package com.jaydenxiao.androidfire.ui.news.adapter;
import android.content.Context;
import android.support.v4.content.ContextCompat;
import android.view.MotionEvent;
import android.view.View;
import com.aspsine.irecyclerview.universaladapter.ViewHolderHelper;
import com.aspsine.irecyclerview.universaladapter.recyclerview.CommonRecycleViewAdapter;
import com.jaydenxiao.androidfire.R;
import com.jaydenxiao.androidfire.app.AppConstant;
import com.jaydenxiao.androidfire.bean.NewsChannelTable;
import com.jaydenxiao.androidfire.ui.news.event.ChannelItemMoveEvent;
import com.jaydenxiao.androidfire.widget.ItemDragHelperCallback;
import com.jaydenxiao.common.baserx.RxBus;
import com.jaydenxiao.common.commonwidget.OnNoDoubleClickListener;
import java.util.Collections;
/**
* des:选择频道
* Created by xsf
* on 2016.09.11:27
*/
public class ChannelAdapter extends CommonRecycleViewAdapter<NewsChannelTable>implements
ItemDragHelperCallback.OnItemMoveListener{
private ItemDragHelperCallback mItemDragHelperCallback;
private OnItemClickListener mOnItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
public void setItemDragHelperCallback(ItemDragHelperCallback itemDragHelperCallback) {
mItemDragHelperCallback = itemDragHelperCallback;
}
public ChannelAdapter(Context context, int layoutId) {
super(context, layoutId);
}
@Override
public void convert(ViewHolderHelper helper, NewsChannelTable newsChannelTable) {
helper.setText(R.id.news_channel_tv,newsChannelTable.getNewsChannelName());
if (newsChannelTable.getNewsChannelFixed()) {
helper.setTextColor(R.id.news_channel_tv,ContextCompat.getColor(mContext,R.color.gray));
}else{
helper.setTextColor(R.id.news_channel_tv,ContextCompat.getColor(mContext,R.color.gray_deep));
}
handleLongPress(helper,newsChannelTable);
handleOnClick(helper,newsChannelTable);
}
private void handleLongPress(ViewHolderHelper helper,final NewsChannelTable newsChannelTable) {
if (mItemDragHelperCallback != null) {
helper.itemView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mItemDragHelperCallback.setLongPressEnabled(newsChannelTable.getNewsChannelIndex()==0?false:true);
return false;
}
});
}
}
private void handleOnClick(final ViewHolderHelper helper,final NewsChannelTable newsChannelTable) {
if (mOnItemClickListener != null) {
helper.itemView.setOnClickListener(new OnNoDoubleClickListener() {
@Override
protected void onNoDoubleClick(View v) {
if (!newsChannelTable.getNewsChannelFixed()) {
mOnItemClickListener.onItemClick(v, helper.getLayoutPosition());
}
}
});
}
}
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
if (isChannelFixed(fromPosition, toPosition)) {
return false;
}
Collections.swap(getAll(), fromPosition, toPosition);
notifyItemMoved(fromPosition, toPosition);
RxBus.getInstance().post(AppConstant.CHANNEL_SWAP,new ChannelItemMoveEvent(fromPosition, toPosition));
return true;
}
private boolean isChannelFixed(int fromPosition, int toPosition) {
return (getAll().get(fromPosition).getNewsChannelFixed() ||
getAll().get(toPosition).getNewsChannelFixed())&&(fromPosition==0||toPosition==0);
}
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
}