package com.banking.xc.utils.adapter;
import android.graphics.Bitmap;
import com.banking.xc.utils.HttpGroup.HttpGroupSetting;
import com.banking.xc.utils.Log;
import com.banking.xc.utils.SimpleBeanAdapter;
import com.banking.xc.utils.HttpGroup.HttpError;
import com.banking.xc.utils.HttpGroup.HttpResponse;
import com.banking.xc.utils.HttpGroup.HttpSetting;
import com.banking.xc.utils.HttpGroup.HttpSettingParams;
import com.banking.xc.utils.HttpGroup.OnCommonListener;
import com.banking.xc.utils.ImageUtil.InputWay;
import com.banking.xc.utils.MySimpleAdapter.ImageProcessor;
import com.banking.xc.utils.SimpleBeanAdapter.SubViewHolder;
import com.banking.xc.utils.cache.GlobalImageCache;
import com.banking.xc.utils.cache.GlobalImageCache.BitmapDigest;
import com.banking.xc.utils.cache.GlobalImageCache.ImageState;
public class ImageLoader implements OnCommonListener {
private ImageState imageState;
private ImageProcessor imageProcessor;
private SubViewHolder subViewHolder;
private Boolean manualGetImage = false;
public ImageLoader(SubViewHolder subViewHolder, ImageState imageState, ImageProcessor imageProcessor) {
this.imageState = imageState;
this.imageProcessor = imageProcessor;
this.subViewHolder = new SubViewHolder();
// 用到的才保留,不要过多引用
this.subViewHolder.setAdapter(subViewHolder.getAdapter());
this.subViewHolder.setPosition(subViewHolder.getPosition());
this.subViewHolder.setSubViewId(subViewHolder.getSubViewId());
this.subViewHolder.setItemData(subViewHolder.getItemData());
this.subViewHolder.setSubData(subViewHolder.getSubData());
Object o = subViewHolder.getMoreParameter(SubViewHolder.MORE_PARAMETER_MANUAL_GET_IMAGE);
if (null != o && o instanceof Boolean) {
manualGetImage = (Boolean) o;
}
}
/**
* 发起网络加载请求
*/
public void load() {
BitmapDigest bitmapDigest = GlobalImageCache.getBitmapDigest(imageState);
if (null == bitmapDigest) {
return;
}
imageState.loading();
String url = bitmapDigest.getUrl();
if (Log.D) {
Log.d(ImageLoader.class.getName(), "load() url -->> " + url);
Log.d(ImageLoader.class.getName(), "load() position -->> " + subViewHolder.getPosition());
}
SimpleBeanAdapter adapter = subViewHolder.getAdapter();
HttpSetting httpSetting = new HttpSetting();
httpSetting.setEffect(HttpSetting.EFFECT_NO);
//httpSetting.setType(HttpGroupSetting.TYPE_IMAGE);
httpSetting.setUrl(url);
if (!manualGetImage && adapter.allowNoImageAndIsNoImage()) {
httpSetting.setCacheMode(HttpSetting.CACHE_MODE_ONLY_CACHE);
subViewHolder.putMoreParameter(SubViewHolder.MORE_PARAMETER_LOCAL_LOAD_IMAGE, true);
}
if (adapter.isAssetsCache()) {
httpSetting.setCacheMode(HttpSetting.CACHE_MODE_ASSETS);
}
httpSetting.setListener(this);
adapter.getAdapterHelper().getImageHttpGroup().add(httpSetting);
}
@Override
public void onError(HttpError error) {
if (Log.D) {
Log.d(ImageLoader.class.getName(), "onError() position -->> " + subViewHolder.getPosition());
}
try {
/*
* 缓存
*/
imageState.failure();
/*
* 显示(外部提供方法)
*/
subViewHolder.putMoreParameter(SubViewHolder.MORE_PARAMETER_LOADED, true);
imageProcessor.show(subViewHolder, imageState);
} finally {
gc();
}
}
@Override
public void onEnd(final HttpResponse httpResponse) {
if (Log.D) {
Log.d(ImageLoader.class.getName(), "onEnd() position -->> " + subViewHolder.getPosition());
}
try {
BitmapDigest bitmapDigest = GlobalImageCache.getBitmapDigest(imageState);
if (Log.D) {
Log.d(ImageLoader.class.getName(), "onEnd() bitmapDigest -->> " + bitmapDigest);
}
if (null == bitmapDigest) {
if (Log.D) {
Log.d(ImageLoader.class.getName(), "onEnd() bitmapDigest is null position -->> " + subViewHolder.getPosition());
}
return;
}
/*
* 图像(外部提供方法)
*/
Bitmap b = imageProcessor.create(InputWay.createInputWay(httpResponse), bitmapDigest);
/*
* 缓存
*/
if (null == b) {
if (Log.D) {
Log.d(ImageLoader.class.getName(), "onEnd() bitmap is null position -->> " + subViewHolder.getPosition());
}
imageState.none();
return;
}
imageState.success(b);
/*
* 显示(外部提供方法)
*/
subViewHolder.putMoreParameter(SubViewHolder.MORE_PARAMETER_LOADED, true);
imageProcessor.show(subViewHolder, imageState);
} finally {
gc();
}
}
@Override
public void onReady(HttpSettingParams httpSettingParams) {
}
/**
* 内存回收
*/
public void gc() {
imageState = null;
imageProcessor = null;
subViewHolder = null;
}
}