Back to project page holoreader.
The source code is released under:
GNU General Public License
If you think the Android project holoreader listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package de.hdodenhof.holoreader.misc; /* ww w . ja v a 2 s. c o m*/ import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.os.Build; import android.os.Environment; import com.jakewharton.DiskLruCache; /* * Based on http://stackoverflow.com/a/10235381 */ public class DiskLruImageCache { private static final int APP_VERSION = 1; private static final int VALUE_COUNT = 1; private DiskLruCache mDiskCache; private CompressFormat mCompressFormat = CompressFormat.JPEG; private int mCompressQuality = 70; public DiskLruImageCache(Context context, String uniqueName, int diskCacheSize) { try { final File diskCacheDir = getDiskCacheDir(context, uniqueName); mDiskCache = DiskLruCache.open(diskCacheDir, APP_VERSION, VALUE_COUNT, diskCacheSize); } catch (IOException e) { e.printStackTrace(); } } private boolean writeBitmapToFile(Bitmap bitmap, DiskLruCache.Editor editor) throws IOException, FileNotFoundException { OutputStream out = null; try { out = new BufferedOutputStream(editor.newOutputStream(0)); return bitmap.compress(mCompressFormat, mCompressQuality, out); } finally { if (out != null) { out.close(); } } } private File getDiskCacheDir(Context context, String uniqueName) { File cacheDir; if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED || !isExternalStorageRemovable()) { if (context.getExternalCacheDir() != null) { cacheDir = context.getExternalCacheDir(); } else { cacheDir = context.getCacheDir(); } } else { cacheDir = context.getCacheDir(); } return new File(cacheDir.getPath() + File.separator + uniqueName); } public void put(String key, Bitmap data) { DiskLruCache.Editor editor = null; try { editor = mDiskCache.edit(key); if (editor == null) { return; } if (writeBitmapToFile(data, editor)) { mDiskCache.flush(); editor.commit(); } else { editor.abort(); } } catch (IOException e) { try { if (editor != null) { editor.abort(); } } catch (IOException ignored) { } } } public Bitmap getBitmap(String key) { Bitmap bitmap = null; DiskLruCache.Snapshot snapshot = null; try { snapshot = mDiskCache.get(key); if (snapshot == null) { return null; } final InputStream in = snapshot.getInputStream(0); if (in != null) { final BufferedInputStream buffIn = new BufferedInputStream(in); bitmap = BitmapFactory.decodeStream(buffIn); } } catch (IOException e) { e.printStackTrace(); } finally { if (snapshot != null) { snapshot.close(); } } return bitmap; } public boolean containsKey(String key) { boolean contained = false; DiskLruCache.Snapshot snapshot = null; try { snapshot = mDiskCache.get(key); contained = snapshot != null; } catch (IOException e) { e.printStackTrace(); } finally { if (snapshot != null) { snapshot.close(); } } return contained; } public void clearCache() { try { mDiskCache.delete(); } catch (IOException e) { e.printStackTrace(); } } public File getCacheFolder() { return mDiskCache.getDirectory(); } @SuppressLint("NewApi") private static boolean isExternalStorageRemovable() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { return Environment.isExternalStorageRemovable(); } else { return true; } } }