package com.mogujie.tt.adapter.album;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.Toast;
import com.mogujie.tt.R;
import com.mogujie.tt.adapter.album.BitmapCache.ImageCallback;
import com.mogujie.tt.config.SysConstant;
import com.mogujie.tt.log.Logger;
import com.mogujie.tt.ui.activity.PickPhotoActivity;
/**
* @Description 图片列表适配器
* @author Nana
* @date 2014-5-9
*/
public class ImageGridAdapter extends BaseAdapter {
private TextCallback textcallback = null;
Activity activity = null;
List<ImageItem> dataList = null;
private Map<Integer, ImageItem> selectedMap = new TreeMap<Integer, ImageItem>();
BitmapCache cache = null;
private Handler mHandler = null;
private int selectTotal = 0;
private Logger logger = Logger.getLogger(ImageGridAdapter.class);
private boolean allowLoad = true;
public void lock() {
this.allowLoad = false;
notifyDataSetChanged();
}
public void unlock() {
this.allowLoad = true;
notifyDataSetChanged();
}
ImageCallback callback = new ImageCallback() {
@Override
public void imageLoad(ImageView imageView, Bitmap bitmap,
Object... params) {
try {
if (null != imageView && null != bitmap) {
String url = (String) params[0];
if (null != url && url.equals((String) imageView.getTag())) {
((ImageView) imageView).setImageBitmap(bitmap);
} else {
logger.e("callback, bmp not match");
}
} else {
logger.e("callback, bmp null");
}
} catch (Exception e) {
logger.e(e.getMessage());
}
}
};
public ImageGridAdapter(Activity act, List<ImageItem> list, Handler mHandler) {
this.activity = act;
cache = BitmapCache.getInstance();
this.dataList = list;
this.mHandler = mHandler;
}
@Override
public int getCount() {
int count = 0;
if (null != dataList) {
count = dataList.size();
}
return count;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
public void updateSelectedStatus(int position, boolean selected) {
if (null != dataList) {
ImageItem item = dataList.get(position);
item.setSelected(selected);
}
}
public void setSelectTotalNum(int num) {
selectTotal = num;
}
public int getSelectTotalNum() {
return selectTotal;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Holder holder = null;
try {
if (null == convertView) {
holder = new Holder();
convertView = View.inflate(activity, R.layout.tt_item_image_grid,
null);
holder.iv = (ImageView) convertView.findViewById(R.id.image);
holder.selected = (ImageView) convertView
.findViewById(R.id.isselected);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
setHolder(holder, position);
if (getCount() - 1 == position) {
convertView.setPadding(0, 0, 0, 30);
} else {
convertView.setPadding(0, 0, 0, 0);
}
return convertView;
} catch (Exception e) {
logger.e(e.getMessage());
return null;
}
}
private void setHolder(final Holder holder, final int position) {
try {
final ImageItem item = dataList.get(position);
holder.iv.setTag(item.getImagePath());
Bitmap bmp = cache.getCacheBitmap(item.getThumbnailPath(),
item.getImagePath());
if (null != bmp) {
holder.iv.setImageBitmap(bmp);
} else {
if (allowLoad) {
cache.displayBmp(holder.iv, item.getThumbnailPath(),
item.getImagePath(), callback);
} else {
holder.iv
.setImageResource(R.drawable.tt_default_album_grid_image);
}
}
if (item.isSelected()) {
holder.selected.setImageResource(R.drawable.tt_album_img_selected);
} else {
holder.selected
.setImageResource(R.drawable.tt_album_img_select_nor);
}
holder.iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String path = dataList.get(position).getImagePath();
Bitmap bmp = cache.getCacheBitmap(path, path);
if (null != bmp && bmp == PickPhotoActivity.bimap) {
Toast.makeText(
activity,
activity.getResources().getString(
R.string.unavailable_image_file),
Toast.LENGTH_LONG).show();
return;
}
if (selectTotal < SysConstant.MAX_SELECT_IMAGE_COUNT) {
item.setSelected(!item.isSelected());
if (item.isSelected()) {
holder.selected
.setImageResource(R.drawable.tt_album_img_selected);
selectTotal++;
if (null != textcallback)
textcallback.onListen(selectTotal);
selectedMap.put(position, dataList.get(position));
} else if (!item.isSelected()) {
holder.selected
.setImageResource(R.drawable.tt_album_img_select_nor);
selectTotal--;
if (null != textcallback)
textcallback.onListen(selectTotal);
selectedMap.remove(position);
}
} else if (selectTotal >= SysConstant.MAX_SELECT_IMAGE_COUNT) {
if (item.isSelected() == true) {
item.setSelected(!item.isSelected());
holder.selected
.setImageResource(R.drawable.tt_album_img_select_nor);
selectTotal--;
selectedMap.remove(position);
} else {
Message message = Message.obtain(mHandler, 0);
message.sendToTarget();
}
}
}
});
} catch (Exception e) {
logger.e(e.getMessage());
}
}
public Map<Integer, ImageItem> getSelectMap() {
return selectedMap;
}
public void setSelectMap(Map<Integer, ImageItem> map) {
if (null == map) {
selectedMap.clear();
return;
}
selectedMap = map;
}
public void setTextCallback(TextCallback listener) {
textcallback = listener;
}
class Holder {
private ImageView iv;
private ImageView selected;
}
public static interface TextCallback {
public void onListen(int count);
}
}