X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/aae90eb1aa42a11449e30330e3e23e1e9e5eebb6..2e472998c16e504c0c2ceddf7de52a000d7bd7f8:/src/com/owncloud/android/ui/adapter/DiskLruImageCache.java diff --git a/src/com/owncloud/android/ui/adapter/DiskLruImageCache.java b/src/com/owncloud/android/ui/adapter/DiskLruImageCache.java index 7d122491..d22dc971 100644 --- a/src/com/owncloud/android/ui/adapter/DiskLruImageCache.java +++ b/src/com/owncloud/android/ui/adapter/DiskLruImageCache.java @@ -7,6 +7,8 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import android.content.Context; import android.graphics.Bitmap; @@ -16,7 +18,7 @@ import android.util.Log; import com.jakewharton.disklrucache.DiskLruCache; import com.owncloud.android.BuildConfig; -import com.owncloud.android.utils.Log_OC; +import com.owncloud.android.lib.common.utils.Log_OC; public class DiskLruImageCache { @@ -26,20 +28,21 @@ public class DiskLruImageCache { private static final int CACHE_VERSION = 1; private static final int VALUE_COUNT = 1; private static final int IO_BUFFER_SIZE = 8 * 1024; - //private static final String TAG = "DiskLruImageCache"; + private static final Pattern CAPITAL_LETTERS = Pattern.compile("[A-Z]"); + + private StringBuffer mValidKeyBuffer = new StringBuffer(64); + private StringBuffer mConversionBuffer = new StringBuffer(2).append('_'); + + private static final String TAG = "DiskLruImageCache"; public DiskLruImageCache( Context context,String uniqueName, int diskCacheSize, - CompressFormat compressFormat, int quality ) { - try { - final File diskCacheDir = getDiskCacheDir(context, uniqueName ); - mDiskCache = DiskLruCache.open( - diskCacheDir, CACHE_VERSION, VALUE_COUNT, diskCacheSize - ); - mCompressFormat = compressFormat; - mCompressQuality = quality; - } catch (IOException e) { - e.printStackTrace(); - } + CompressFormat compressFormat, int quality ) throws IOException { + final File diskCacheDir = getDiskCacheDir(context, uniqueName ); + mDiskCache = DiskLruCache.open( + diskCacheDir, CACHE_VERSION, VALUE_COUNT, diskCacheSize + ); + mCompressFormat = compressFormat; + mCompressQuality = quality; } private boolean writeBitmapToFile( Bitmap bitmap, DiskLruCache.Editor editor ) @@ -61,7 +64,7 @@ public class DiskLruImageCache { // otherwise use internal cache dir final String cachePath = context.getExternalCacheDir().getPath(); - Log_OC.d("DiskCache", "create dir: " + cachePath + File.separator + uniqueName); + Log_OC.d(TAG, "create dir: " + cachePath + File.separator + uniqueName); return new File(cachePath + File.separator + uniqueName); } @@ -69,8 +72,9 @@ public class DiskLruImageCache { public void put( String key, Bitmap data ) { DiskLruCache.Editor editor = null; + String validKey = convertToValidKey(key); try { - editor = mDiskCache.edit( key ); + editor = mDiskCache.edit( validKey ); if ( editor == null ) { return; } @@ -79,17 +83,17 @@ public class DiskLruImageCache { mDiskCache.flush(); editor.commit(); if ( BuildConfig.DEBUG ) { - Log.d( "cache_test_DISK_", "image put on disk cache " + key ); + Log.d( "cache_test_DISK_", "image put on disk cache " + validKey ); } } else { editor.abort(); if ( BuildConfig.DEBUG ) { - Log.d( "cache_test_DISK_", "ERROR on: image put on disk cache " + key ); + Log.d( "cache_test_DISK_", "ERROR on: image put on disk cache " + validKey ); } } } catch (IOException e) { if ( BuildConfig.DEBUG ) { - Log.d( "cache_test_DISK_", "ERROR on: image put on disk cache " + key ); + Log.d( "cache_test_DISK_", "ERROR on: image put on disk cache " + validKey ); } try { if ( editor != null ) { @@ -105,9 +109,10 @@ public class DiskLruImageCache { Bitmap bitmap = null; DiskLruCache.Snapshot snapshot = null; + String validKey = convertToValidKey(key); try { - snapshot = mDiskCache.get( key ); + snapshot = mDiskCache.get( validKey ); if ( snapshot == null ) { return null; } @@ -126,7 +131,7 @@ public class DiskLruImageCache { } if ( BuildConfig.DEBUG ) { - Log.d("cache_test_DISK_", bitmap == null ? "not found" : "image read from disk " + key); + Log.d("cache_test_DISK_", bitmap == null ? "not found" : "image read from disk " + validKey); } return bitmap; @@ -137,8 +142,9 @@ public class DiskLruImageCache { boolean contained = false; DiskLruCache.Snapshot snapshot = null; + String validKey = convertToValidKey(key); try { - snapshot = mDiskCache.get( key ); + snapshot = mDiskCache.get( validKey ); contained = snapshot != null; } catch (IOException e) { e.printStackTrace(); @@ -166,5 +172,18 @@ public class DiskLruImageCache { public File getCacheFolder() { return mDiskCache.getDirectory(); } + + private String convertToValidKey(String key) { + Matcher capitalLettersMatcher = CAPITAL_LETTERS.matcher(key); + mValidKeyBuffer.delete(0, mValidKeyBuffer.length()); + mConversionBuffer.delete(1, mConversionBuffer.length()); + + while (capitalLettersMatcher.find()) { + mConversionBuffer.replace(1, 2, capitalLettersMatcher.group(0).toLowerCase()); + capitalLettersMatcher.appendReplacement(mValidKeyBuffer, mConversionBuffer.toString()); + } + capitalLettersMatcher.appendTail(mValidKeyBuffer); + return mValidKeyBuffer.toString(); + } } \ No newline at end of file