package com.gnod.geekr.tool.manager;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
public class RecyclingBitmapDrawable extends BitmapDrawable {
private boolean mHasBeenDisplayed = false;
private int mDisplayRefCount = 0;
private int mCacheRefCount = 0;
public RecyclingBitmapDrawable(Resources res, Bitmap bitmap) {
super(res, bitmap);
}
public void setIsDisplayed(boolean isDisplayed) {
synchronized (this) {
if(isDisplayed) {
mDisplayRefCount ++;
mHasBeenDisplayed = true;
} else {
mDisplayRefCount --;
}
}
checkState();
}
public void setIsCached(boolean isCached) {
synchronized (this) {
if (isCached) {
mCacheRefCount ++;
} else {
mCacheRefCount --;
}
}
checkState();
}
private synchronized void checkState() {
if (mCacheRefCount <= 0 && mDisplayRefCount <= 0 && mHasBeenDisplayed && hasValidBitmap()) {
getBitmap().recycle();
}
}
private synchronized boolean hasValidBitmap() {
Bitmap bitmap = getBitmap();
return bitmap != null && !bitmap.isRecycled();
}
}