package com.dl7.mvp.adapter;
import android.content.Context;
import android.util.SparseBooleanArray;
import com.dl7.downloaderlib.entity.FileInfo;
import com.dl7.mvp.R;
import com.dl7.mvp.engine.DownloaderWrapper;
import com.dl7.mvp.local.table.VideoInfo;
import com.dl7.mvp.rxbus.RxBus;
import com.dl7.mvp.rxbus.event.VideoEvent;
import com.dl7.recycler.adapter.BaseQuickAdapter;
import com.dl7.recycler.adapter.BaseViewHolder;
import com.orhanobut.logger.Logger;
/**
* Created by long on 2016/12/19.
* video下载适配器基类
*/
public abstract class BaseVideoDLAdapter extends BaseQuickAdapter<VideoInfo> {
private static final int INVALID_POS = -1;
protected boolean mIsEditMode = false;
protected SparseBooleanArray mSparseItemChecked = new SparseBooleanArray();
protected final RxBus mRxBus;
public BaseVideoDLAdapter(Context context, RxBus rxBus) {
super(context);
mRxBus = rxBus;
}
/**
* 处理选中事件
* @param position
* @param isChecked
*/
protected void _handleCheckedChanged(int position, boolean isChecked) {
if (position == INVALID_POS) {
Logger.i(position + "" + isChecked);
return;
}
mSparseItemChecked.put(position, isChecked);
int checkedCount = 0;
int checkedStatus;
for (int i = 0; i < getItemCount(); i++) {
if (mSparseItemChecked.get(i, false)) {
checkedCount++;
}
}
if (checkedCount == 0) {
checkedStatus = VideoEvent.CHECK_NONE;
} else if (checkedCount == getItemCount()) {
checkedStatus = VideoEvent.CHECK_ALL;
} else {
checkedStatus = VideoEvent.CHECK_SOME;
}
// 通知 DownloadActivity 更新界面
mRxBus.post(new VideoEvent(checkedStatus));
}
public boolean isEditMode() {
return mIsEditMode;
}
public void setEditMode(boolean editMode) {
mIsEditMode = editMode;
if (!mIsEditMode) {
mSparseItemChecked.clear();
}
notifyDataSetChanged();
}
/**
* 切换 Item 的选中状态
* @param position
*/
public void toggleItemChecked(int position, BaseViewHolder holder) {
boolean isChecked = mSparseItemChecked.get(position);
Logger.d(position+""+!isChecked);
holder.setChecked(R.id.cb_delete, !isChecked);
_handleCheckedChanged(position, !isChecked);
// 如果用 notifyItemChanged(),会有一闪的情况
// notifyItemChanged(position);
}
public void deleteItemChecked() {
for (int i = mSparseItemChecked.size() - 1; i >= 0; i--) {
if (mSparseItemChecked.valueAt(i)) {
DownloaderWrapper.delete(getItem(mSparseItemChecked.keyAt(i)));
removeItem(mSparseItemChecked.keyAt(i));
mSparseItemChecked.delete(mSparseItemChecked.keyAt(i));
}
}
}
public void checkAllOrNone(boolean isChecked) {
for (int i = 0; i < getItemCount(); i++) {
mSparseItemChecked.put(i, isChecked);
}
notifyDataSetChanged();
}
public void updateDownload(FileInfo fileInfo) {
}
}