diff options
Diffstat (limited to 'src/com/android/gallery3d/filtershow/cache')
-rw-r--r-- | src/com/android/gallery3d/filtershow/cache/ImageLoader.java | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java index a89199602..afef58aad 100644 --- a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java +++ b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java @@ -50,6 +50,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Vector; +import java.util.concurrent.locks.ReentrantLock; public class ImageLoader { @@ -83,6 +84,8 @@ public class ImageLoader { private Rect mOriginalBounds = null; private static int mZoomOrientation = ORI_NORMAL; + private ReentrantLock mLoadingLock = new ReentrantLock(); + public ImageLoader(FilterShowActivity activity, Context context) { mActivity = activity; mContext = context; @@ -99,6 +102,7 @@ public class ImageLoader { } public void loadBitmap(Uri uri,int size) { + mLoadingLock.lock(); mUri = uri; mOrientation = getOrientation(mContext, uri); mOriginalBitmapSmall = loadScaledBitmap(uri, 160); @@ -108,6 +112,7 @@ public class ImageLoader { } mOriginalBitmapLarge = loadScaledBitmap(uri, size); updateBitmaps(); + mLoadingLock.unlock(); } public Uri getUri() { @@ -146,6 +151,8 @@ public class ImageLoader { } } catch (SQLiteException e){ return ExifInterface.ORIENTATION_UNDEFINED; + } catch (IllegalArgumentException e) { + return ExifInterface.ORIENTATION_UNDEFINED; } finally { Utils.closeSilently(cursor); } @@ -308,10 +315,12 @@ public class ImageLoader { } public void addListener(ImageShow imageShow) { + mLoadingLock.lock(); if (!mListeners.contains(imageShow)) { mListeners.add(imageShow); } mHiresCache.addObserver(imageShow); + mLoadingLock.unlock(); } private void warnListeners() { @@ -333,6 +342,7 @@ public class ImageLoader { // move this to a background thread. public Bitmap getScaleOneImageForPreset(ImageShow caller, ImagePreset imagePreset, Rect bounds, boolean force) { + mLoadingLock.lock(); Bitmap bmp = mZoomCache.getImage(imagePreset, bounds); if (force || bmp == null) { bmp = loadRegionBitmap(mUri, bounds); @@ -347,12 +357,14 @@ public class ImageLoader { return bmp2; } } + mLoadingLock.unlock(); return bmp; } // Caching method public Bitmap getImageForPreset(ImageShow caller, ImagePreset imagePreset, boolean hiRes) { + mLoadingLock.lock(); if (mOriginalBitmapSmall == null) { return null; } @@ -377,13 +389,16 @@ public class ImageLoader { mCache.addObserver(caller); } } + mLoadingLock.unlock(); return filteredImage; } public void resetImageForPreset(ImagePreset imagePreset, ImageShow caller) { + mLoadingLock.lock(); mHiresCache.reset(imagePreset); mCache.reset(imagePreset); mZoomCache.reset(imagePreset); + mLoadingLock.unlock(); } public void saveImage(ImagePreset preset, final FilterShowActivity filterShowActivity, |