summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
diff options
context:
space:
mode:
authorRuben Brunk <rubenbrunk@google.com>2012-11-28 17:05:44 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2012-11-28 17:05:44 -0800
commitf94d5c38e57d6ab563f801ea1de7ccea5cd4d94a (patch)
treea05ba3b96c702bf32afc6f521d3d0bb72f26c99a /src/com/android/gallery3d/filtershow/cache/ImageLoader.java
parentc604eacfeaea2845b3848ac341f47bc41af6d132 (diff)
parent9174643f1e0004e7240ed4d49877dc207c47acf3 (diff)
downloadandroid_packages_apps_Snap-f94d5c38e57d6ab563f801ea1de7ccea5cd4d94a.tar.gz
android_packages_apps_Snap-f94d5c38e57d6ab563f801ea1de7ccea5cd4d94a.tar.bz2
android_packages_apps_Snap-f94d5c38e57d6ab563f801ea1de7ccea5cd4d94a.zip
am 7a36d427: Merge "Added locking to ImageLoader." into gb-ub-photos-arches
* commit '7a36d4275ea0375d4e6a940cc3307dbe716cf85c': Added locking to ImageLoader.
Diffstat (limited to 'src/com/android/gallery3d/filtershow/cache/ImageLoader.java')
-rw-r--r--src/com/android/gallery3d/filtershow/cache/ImageLoader.java13
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 7874881fa..cd1cc27ef 100644
--- a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
+++ b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
@@ -54,6 +54,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 {
@@ -87,6 +88,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;
@@ -103,6 +106,7 @@ public class ImageLoader {
}
public void loadBitmap(Uri uri,int size) {
+ mLoadingLock.lock();
mUri = uri;
mOrientation = getOrientation(mContext, uri);
mOriginalBitmapSmall = loadScaledBitmap(uri, 160);
@@ -112,6 +116,7 @@ public class ImageLoader {
}
mOriginalBitmapLarge = loadScaledBitmap(uri, size);
updateBitmaps();
+ mLoadingLock.unlock();
}
public Uri getUri() {
@@ -327,10 +332,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() {
@@ -352,6 +359,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);
@@ -366,12 +374,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;
}
@@ -396,13 +406,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,