package com.jasonrobinson.racer.util;
import android.content.Context;
import android.graphics.Typeface;
import android.support.v4.util.LruCache;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class RawTypeface {
private static LruCache<Integer, Typeface> sTypefaceCache = new LruCache<Integer, Typeface>(5);
private RawTypeface() {
}
public static Typeface obtain(Context context, int resId) {
Typeface typeface = sTypefaceCache.get(resId);
if (typeface == null) {
String outPath = context.getCacheDir() + File.separator + resId + ".raw";
File outFile = new File(outPath);
if (!outFile.exists()) {
try {
copyToFile(context, resId, outFile);
} catch (IOException e) {
return null;
}
}
typeface = Typeface.createFromFile(outFile);
outFile.delete();
sTypefaceCache.put(resId, typeface);
}
return typeface;
}
private static void copyToFile(Context context, int resId, File outFile) throws IOException {
InputStream is = context.getResources().openRawResource(resId);
byte[] buffer = new byte[is.available()];
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outFile));
try {
int read = 0;
while ((read = is.read(buffer)) > 0) {
bos.write(buffer, 0, read);
}
} finally {
bos.close();
is.close();
}
}
}