[tx-robot] updated from transifex
[pub/Android/ownCloud.git] / src / com / owncloud / android / ui / adapter / DiskLruImageCache.java
index d3479af..d22dc97 100644 (file)
@@ -7,17 +7,18 @@ 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;
 import android.graphics.Bitmap.CompressFormat;
 import android.graphics.BitmapFactory;
-import android.os.Environment;
 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 {
 
@@ -27,18 +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 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 )
@@ -60,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);
     }
@@ -68,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;
             }
@@ -78,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 ) {
@@ -104,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;
             }
@@ -125,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;
@@ -136,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();
@@ -165,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