package com.tomclaw.mandarin.core;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import com.tomclaw.mandarin.im.AccountRoot;
import com.tomclaw.mandarin.util.HttpParamsBuilder;
import com.tomclaw.mandarin.util.HttpUtil;
import com.tomclaw.mandarin.util.Logger;
import java.io.InputStream;
/**
* Created with IntelliJ IDEA.
* User: solkin
* Date: 12/5/13
* Time: 1:55 PM
*/
public abstract class BitmapRequest<A extends AccountRoot> extends HttpRequest<A> {
private String url;
private transient String hash;
public BitmapRequest() {
}
public BitmapRequest(String url) {
this.url = url;
}
@Override
protected final String getUrl() {
return url;
}
@Override
protected final HttpParamsBuilder getParams() {
return HttpParamsBuilder.emptyParams();
}
@Override
protected final String getHttpRequestType() {
hash = HttpUtil.getUrlHash(url);
return HttpUtil.GET;
}
@Override
protected final int parseResponse(InputStream httpResponseStream) throws Throwable {
if (parseBitmap(httpResponseStream)) {
onBitmapSaved(hash);
}
// Remove request in any case, except Network errors.
// In McDonald's case or when avatar if bad, we'll
// drop current task and try to download second time
// presence or roster is coming.
return REQUEST_DELETE;
}
private boolean parseBitmap(InputStream inputStream) {
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
// Checking for bitmap can be decoded. McDonald's etc.
if (bitmap != null) {
// Yeah, avatar is good.
Logger.log("Ready to save bitmap for URL: " + url);
return saveBitmap(bitmap);
} else {
Logger.log("Invalid bitmap for URL: " + url);
}
return false;
}
private boolean saveBitmap(Bitmap bitmap) {
return BitmapCache.getInstance().saveBitmapSync(hash, bitmap);
}
protected abstract void onBitmapSaved(String hash);
}