package com.banking.xc.utils.adapter;
import android.graphics.Bitmap;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.widget.ImageView;
import skytv_com.banking.enjoymovie.R;
import skytv_com.banking.enjoymovie.MyApplication;
import com.banking.xc.utils.AdapterHelper;
import com.banking.xc.utils.ExceptionDrawable;
import com.banking.xc.utils.Log;
import com.banking.xc.utils.SimpleBeanAdapter;
import com.banking.xc.utils.SimpleSubViewBinder;
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 UIRunnable implements Runnable {
private final static String APP_NAME = MyApplication.getInstance().getString(R.string.app_name);
private static final String TAG = UIRunnable.class.getSimpleName();
/**
* 默认图
*/
private static final ExceptionDrawable defaultDrawable = new ExceptionDrawable(MyApplication.getInstance(), APP_NAME,ExceptionDrawable.LOADING);
private static final ExceptionDrawable noPictureDrawable = new ExceptionDrawable(MyApplication.getInstance(),"",ExceptionDrawable.NOPICTURE);
private SubViewHolder subViewHolder;
private ImageState imageState;
public UIRunnable(SubViewHolder subViewHolder, ImageState imageState) {
this.subViewHolder = subViewHolder;
this.imageState = imageState;
}
@Override
public void run() {
if (Log.D) {
Log.d(UIRunnable.class.getName(), "run() position -->> " + getSubViewHolder().getPosition());
}
/**
* 确保正确获得itemView和subView
*/
View itemView = subViewHolder.getItemView();
if (null == itemView) {
itemView = getItemView();
}
if (null == itemView) {
if (Log.D) {
Log.d(UIRunnable.class.getName(), "run() itemView null -->> ");
}
gc();
return;
}
if (Log.D) {
Log.d(UIRunnable.class.getName(), "run() itemView -->> " + itemView);
}
View subView = itemView.findViewById(getSubViewHolder().getSubViewId());
if (Log.D) {
Log.d(UIRunnable.class.getName(), "run() subView -->> " + subView);
}
if (null == subView && itemView.getId() == getSubViewHolder().getSubViewId()) {
subView = itemView;
}
SimpleBeanAdapter adapter = subViewHolder.getAdapter();
/**
* UI处理
*/
if (subView instanceof ImageView) {
ImageView iv = (ImageView) subView;
switch (imageState.getState()) {
case GlobalImageCache.STATE_NONE:
if (Log.D) {
Log.d(UIRunnable.class.getName(), "STATE_NONE position -->> " + getSubViewHolder().getPosition());
}
iv.setImageDrawable(defaultDrawable);
break;
case GlobalImageCache.STATE_LOADING:
if (Log.D) {
Log.d(UIRunnable.class.getName(), "STATE_LOADING position -->> " + getSubViewHolder().getPosition());
}
iv.setImageDrawable(defaultDrawable);
break;
case GlobalImageCache.STATE_FAILURE:
if (Log.D) {
Log.d(UIRunnable.class.getName(), "STATE_FAILURE position -->> " + getSubViewHolder().getPosition());
}
/**
* 得到localLoadImage
*/
Boolean localLoadImage = false;
Object o = subViewHolder.getMoreParameter(SubViewHolder.MORE_PARAMETER_LOCAL_LOAD_IMAGE);
if (null != o && o instanceof Boolean) {
localLoadImage = (Boolean) o;
}
if (Log.D) {
Log.d(UIRunnable.class.getName(), "STATE_FAILURE localLoadImage -->> " + localLoadImage);
}
iv.setImageDrawable(noPictureDrawable);
break;
case GlobalImageCache.STATE_SUCCESS:
if (Log.D) {
Log.d(UIRunnable.class.getName(), "STATE_SUCCESS position -->> " + getSubViewHolder().getPosition());
}
BitmapDigest bitmapDigest = GlobalImageCache.getBitmapDigest(imageState);
Bitmap bitmap = imageState.getBitmap();
if(bitmap == null || (bitmapDigest == null && bitmap.isRecycled())) {
iv.setImageDrawable(defaultDrawable);
imageState.none();
} else {
iv.setImageDrawable(new MyBitmapDrawable(iv.getResources(), subViewHolder, bitmapDigest, bitmap));
}
break;
}
}
gc();
}
/**
* 子类可复写
*/
protected View getItemView() {
AdapterHelper adapterHelper = getSubViewHolder().getAdapter().getAdapterHelper();
SubViewHolder holder = getSubViewHolder();
Object item = holder.getAdapter().getItem(holder.getPosition());
if (Log.D) {
Log.d(UIRunnable.class.getName(), "getItemView() old item -->> " + holder.getItemData());
Log.d(UIRunnable.class.getName(), "getItemView() new item -->> " + item);
}
if (null != item && holder.getItemData() == item) {
if (Log.D) {
Log.d(UIRunnable.class.getName(), "oldItemData and newItemData is equals -->> ");
}
return adapterHelper.getItemView(getSubViewHolder().getPosition(), true);
} else {
if (Log.D) {
Log.d(UIRunnable.class.getName(), "oldItemData and newItemData not equals -->> ");
}
return null;
}
}
/**
* 供子类调用
*/
protected SubViewHolder getSubViewHolder() {
return subViewHolder;
}
private void gc() {
subViewHolder = null;
imageState = null;
}
/**
* 无图版的长按事件(这个用于view,还有一个用于adapterView的已经删了)
*/
private static class ViewLongClickForNoImage implements OnLongClickListener {
private SubViewHolder subViewHolder;
private BitmapDigest bitmapDigest;
private SimpleImageProcessor imageProcessor;
public ViewLongClickForNoImage(SubViewHolder subViewHolder, BitmapDigest bitmapDigest) {
this.subViewHolder = subViewHolder;
this.bitmapDigest = bitmapDigest;
this.imageProcessor = ((SimpleSubViewBinder) subViewHolder.getAdapter().getViewBinder()).getSimpleImageProcessor();
}
@Override
public boolean onLongClick(View v) {
v.setLongClickable(false);// 去掉交互事件
if (Log.D) {
Log.d(TAG, "ViewLongClickForNoImage v.getId -->> " + v.getId());
Log.d(TAG, "ViewLongClickForNoImage subViewHolder -->> " + subViewHolder);
}
if (null != subViewHolder) {
subViewHolder.putMoreParameter(SubViewHolder.MORE_PARAMETER_MANUAL_GET_IMAGE, true);
imageProcessor.show(subViewHolder, GlobalImageCache.getImageState(bitmapDigest));
}
gc();
return true;
}
private void gc() {
subViewHolder = null;
bitmapDigest = null;
imageProcessor = null;
}
}
}