package com.koushikdutta.ion;
import android.graphics.Point;
import com.koushikdutta.async.AsyncServer;
import com.koushikdutta.async.future.FutureCallback;
import com.koushikdutta.ion.Ion;
import com.koushikdutta.ion.bitmap.BitmapInfo;
import java.util.ArrayList;
abstract class BitmapCallback {
String key;
Ion ion;
protected BitmapCallback(Ion ion, String key, boolean put) {
this.key = key;
this.put = put;
this.ion = ion;
ion.bitmapsPending.tag(key, this);
}
boolean put;
boolean put() {
return put;
}
protected void onReported() {
ion.processDeferred();
}
protected void report(final Exception e, final BitmapInfo info) {
AsyncServer.post(Ion.mainHandler, new Runnable() {
@Override
public void run() {
BitmapInfo result = info;
if (result == null) {
// cache errors
result = new BitmapInfo(key, null, null, new Point());
result.exception = e;
ion.getBitmapCache().put(result);
} else if (put()) {
ion.getBitmapCache().put(result);
}
final ArrayList<FutureCallback<BitmapInfo>> callbacks = ion.bitmapsPending.remove(key);
if (callbacks == null || callbacks.size() == 0) {
onReported();
return;
}
for (FutureCallback<BitmapInfo> callback : callbacks) {
callback.onCompleted(e, result);
}
onReported();
}
});
}
}