diff options
author | Ruben Brunk <rubenbrunk@google.com> | 2012-11-28 17:05:53 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-11-28 17:05:53 -0800 |
commit | 17b8c5174410b09ddeb4cdd0b50468a4bbab450c (patch) | |
tree | 2b28b84901ec5d64371aa0673b412bf3997b1215 | |
parent | a8a9c93313ad8fa42b364e7661211a2483b9a957 (diff) | |
parent | 7a36d4275ea0375d4e6a940cc3307dbe716cf85c (diff) | |
download | android_packages_apps_Gallery2-17b8c5174410b09ddeb4cdd0b50468a4bbab450c.tar.gz android_packages_apps_Gallery2-17b8c5174410b09ddeb4cdd0b50468a4bbab450c.tar.bz2 android_packages_apps_Gallery2-17b8c5174410b09ddeb4cdd0b50468a4bbab450c.zip |
am 7a36d427: Merge "Added locking to ImageLoader." into gb-ub-photos-arches
* commit '7a36d4275ea0375d4e6a940cc3307dbe716cf85c':
Added locking to ImageLoader.
-rw-r--r-- | src/com/android/gallery3d/filtershow/cache/ImageLoader.java | 13 |
1 files changed, 13 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..21548b150 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() { @@ -308,10 +313,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 +340,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 +355,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 +387,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, |