package name.caiyao.microreader.ui.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import butterknife.BindView;
import butterknife.ButterKnife;
import name.caiyao.microreader.R;
import name.caiyao.microreader.config.Config;
import name.caiyao.microreader.ui.helper.OnItemMoveListener;
/**
* Created by 蔡小木 on 2016/4/27 0027.
*/
public class ChannelAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements OnItemMoveListener {
private static final int TYPE_CHANNEL_HEADER = 0;
private static final int TYPE_CHANNEL = 1;
private ArrayList<Config.Channel> mSavedChannel, mOtherChannelItems;
private Context mContext;
private ItemTouchHelper mItemTouchHelper;
public ChannelAdapter(Context context, ItemTouchHelper itemTouchHelper, ArrayList<Config.Channel> savedChannel, ArrayList<Config.Channel> otherChannelItems) {
this.mContext = context;
this.mItemTouchHelper = itemTouchHelper;
this.mSavedChannel = savedChannel;
this.mOtherChannelItems = otherChannelItems;
}
@Override
public int getItemViewType(int position) {
if (position == 0 || position == mSavedChannel.size() + 1) {
return TYPE_CHANNEL_HEADER;
} else {
return TYPE_CHANNEL;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
View view;
switch (viewType) {
case TYPE_CHANNEL_HEADER:
view = LayoutInflater.from(mContext).inflate(R.layout.channel_header, parent, false);
return new ChannelHeaderViewHolder(view);
case TYPE_CHANNEL:
view = LayoutInflater.from(mContext).inflate(R.layout.channel, parent, false);
final ChannelViewHolder channelViewHolder = new ChannelViewHolder(view);
channelViewHolder.itemView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mItemTouchHelper.startDrag(channelViewHolder);
return true;
}
});
channelViewHolder.mIvDrag.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mItemTouchHelper.startDrag(channelViewHolder);
return true;
}
});
return channelViewHolder;
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (position == 0) {
((ChannelHeaderViewHolder) holder).mTvChannelHeader.setText(R.string.activity_change_channel_show_channel);
} else if (position == mSavedChannel.size() + 1) {
((ChannelHeaderViewHolder) holder).mTvChannelHeader.setText(R.string.activity_change_channel_other_channel);
} else if (position > 0 && position < mSavedChannel.size() + 1) {
((ChannelViewHolder) holder).mIvChannel.setImageResource(mSavedChannel.get(position - 1).getIcon());
((ChannelViewHolder) holder).mTvChannel.setText(mSavedChannel.get(position - 1).getTitle());
} else if (position > mSavedChannel.size() + 1) {
((ChannelViewHolder) holder).mIvChannel.setImageResource(mOtherChannelItems.get(position - (mSavedChannel.size() + 2)).getIcon());
((ChannelViewHolder) holder).mTvChannel.setText(mOtherChannelItems.get(position - (mSavedChannel.size() + 2)).getTitle());
}
}
@Override
public int getItemCount() {
return mSavedChannel.size() + mOtherChannelItems.size() + 2;
}
@Override
public void onItemMove(int fromPosition, int toPosition) {
if (fromPosition < mSavedChannel.size() + 1 && toPosition < mSavedChannel.size() + 1 && toPosition > 0) {
//显示栏目内移动
Config.Channel item = mSavedChannel.get(fromPosition - 1);
mSavedChannel.remove(fromPosition - 1);
mSavedChannel.add(toPosition - 1, item);
notifyItemMoved(fromPosition, toPosition);
} else if (fromPosition < mSavedChannel.size() + 1 && toPosition == mSavedChannel.size() + 1) {
//显示栏目移动到未显示栏目
Config.Channel item = mSavedChannel.get(fromPosition - 1);
mSavedChannel.remove(fromPosition - 1);
mOtherChannelItems.add(0, item);
notifyItemMoved(fromPosition, mSavedChannel.size() + 2);
} else if (fromPosition > mSavedChannel.size() + 1 && toPosition == mSavedChannel.size() + 1) {
//未显示栏目移动到显示栏目
Config.Channel item = mOtherChannelItems.get(fromPosition - 2 - mSavedChannel.size());
mOtherChannelItems.remove(fromPosition - 2 - mSavedChannel.size());
mSavedChannel.add(0, item);
notifyItemMoved(fromPosition, 1);
} else if (fromPosition >= mSavedChannel.size() + 2 && toPosition <= mSavedChannel.size() + mOtherChannelItems.size() + 2 && toPosition >= mSavedChannel.size() + 2) {
//未显示栏目内移动
Config.Channel item = mOtherChannelItems.get(fromPosition - 1 - mSavedChannel.size() - 1);
mOtherChannelItems.remove(fromPosition - 1 - mSavedChannel.size() - 1);
mOtherChannelItems.add(toPosition - 1 - mSavedChannel.size() - 1, item);
notifyItemMoved(fromPosition, toPosition);
}
}
class ChannelHeaderViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.tv_channel_header)
TextView mTvChannelHeader;
public ChannelHeaderViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
class ChannelViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.iv_channel)
ImageView mIvChannel;
@BindView(R.id.tv_channel)
TextView mTvChannel;
@BindView(R.id.iv_drag)
ImageView mIvDrag;
public ChannelViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}