Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a36d427 authored by Ruben Brunk's avatar Ruben Brunk Committed by Android (Google) Code Review
Browse files

Merge "Added locking to ImageLoader." into gb-ub-photos-arches

parents e5b979ed 2380d02e
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -50,6 +50,7 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStream;
import java.util.Vector;
import java.util.Vector;
import java.util.concurrent.locks.ReentrantLock;


public class ImageLoader {
public class ImageLoader {


@@ -83,6 +84,8 @@ public class ImageLoader {
    private Rect mOriginalBounds = null;
    private Rect mOriginalBounds = null;
    private static int mZoomOrientation = ORI_NORMAL;
    private static int mZoomOrientation = ORI_NORMAL;


    private ReentrantLock mLoadingLock = new ReentrantLock();

    public ImageLoader(FilterShowActivity activity, Context context) {
    public ImageLoader(FilterShowActivity activity, Context context) {
        mActivity = activity;
        mActivity = activity;
        mContext = context;
        mContext = context;
@@ -99,6 +102,7 @@ public class ImageLoader {
    }
    }


    public void loadBitmap(Uri uri,int size) {
    public void loadBitmap(Uri uri,int size) {
        mLoadingLock.lock();
        mUri = uri;
        mUri = uri;
        mOrientation = getOrientation(mContext, uri);
        mOrientation = getOrientation(mContext, uri);
        mOriginalBitmapSmall = loadScaledBitmap(uri, 160);
        mOriginalBitmapSmall = loadScaledBitmap(uri, 160);
@@ -108,6 +112,7 @@ public class ImageLoader {
        }
        }
        mOriginalBitmapLarge = loadScaledBitmap(uri, size);
        mOriginalBitmapLarge = loadScaledBitmap(uri, size);
        updateBitmaps();
        updateBitmaps();
        mLoadingLock.unlock();
    }
    }


    public Uri getUri() {
    public Uri getUri() {
@@ -308,10 +313,12 @@ public class ImageLoader {
    }
    }


    public void addListener(ImageShow imageShow) {
    public void addListener(ImageShow imageShow) {
        mLoadingLock.lock();
        if (!mListeners.contains(imageShow)) {
        if (!mListeners.contains(imageShow)) {
            mListeners.add(imageShow);
            mListeners.add(imageShow);
        }
        }
        mHiresCache.addObserver(imageShow);
        mHiresCache.addObserver(imageShow);
        mLoadingLock.unlock();
    }
    }


    private void warnListeners() {
    private void warnListeners() {
@@ -333,6 +340,7 @@ public class ImageLoader {
    // move this to a background thread.
    // move this to a background thread.
    public Bitmap getScaleOneImageForPreset(ImageShow caller, ImagePreset imagePreset, Rect bounds,
    public Bitmap getScaleOneImageForPreset(ImageShow caller, ImagePreset imagePreset, Rect bounds,
            boolean force) {
            boolean force) {
        mLoadingLock.lock();
        Bitmap bmp = mZoomCache.getImage(imagePreset, bounds);
        Bitmap bmp = mZoomCache.getImage(imagePreset, bounds);
        if (force || bmp == null) {
        if (force || bmp == null) {
            bmp = loadRegionBitmap(mUri, bounds);
            bmp = loadRegionBitmap(mUri, bounds);
@@ -347,12 +355,14 @@ public class ImageLoader {
                return bmp2;
                return bmp2;
            }
            }
        }
        }
        mLoadingLock.unlock();
        return bmp;
        return bmp;
    }
    }


    // Caching method
    // Caching method
    public Bitmap getImageForPreset(ImageShow caller, ImagePreset imagePreset,
    public Bitmap getImageForPreset(ImageShow caller, ImagePreset imagePreset,
            boolean hiRes) {
            boolean hiRes) {
        mLoadingLock.lock();
        if (mOriginalBitmapSmall == null) {
        if (mOriginalBitmapSmall == null) {
            return null;
            return null;
        }
        }
@@ -377,13 +387,16 @@ public class ImageLoader {
                mCache.addObserver(caller);
                mCache.addObserver(caller);
            }
            }
        }
        }
        mLoadingLock.unlock();
        return filteredImage;
        return filteredImage;
    }
    }


    public void resetImageForPreset(ImagePreset imagePreset, ImageShow caller) {
    public void resetImageForPreset(ImagePreset imagePreset, ImageShow caller) {
        mLoadingLock.lock();
        mHiresCache.reset(imagePreset);
        mHiresCache.reset(imagePreset);
        mCache.reset(imagePreset);
        mCache.reset(imagePreset);
        mZoomCache.reset(imagePreset);
        mZoomCache.reset(imagePreset);
        mLoadingLock.unlock();
    }
    }


    public void saveImage(ImagePreset preset, final FilterShowActivity filterShowActivity,
    public void saveImage(ImagePreset preset, final FilterShowActivity filterShowActivity,