package io.kaif.mobile.view;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.kaif.mobile.R;
import io.kaif.mobile.kmark.KmarkProcessor;
import io.kaif.mobile.view.viewmodel.DebateViewModel;
import io.kaif.mobile.view.widget.ClickableSpanTouchListener;
public class LatestDebateListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
static class DebateViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.content)
public TextView content;
@BindView(R.id.last_update_time)
public TextView lastUpdateTime;
@BindView(R.id.vote_score)
public TextView voteScore;
@BindView(R.id.debater_name)
public TextView debaterName;
@BindView(R.id.zone)
public TextView zone;
public DebateViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
content.setOnTouchListener(new ClickableSpanTouchListener());
}
public void update(DebateViewModel debateViewModel) {
final Context context = itemView.getContext();
debaterName.setText(debateViewModel.getDebaterName());
content.setText(KmarkProcessor.process(context, debateViewModel.getContent()));
lastUpdateTime.setText(DateUtils.getRelativeTimeSpanString(debateViewModel.getLastUpdateTime()
.getTime(), System.currentTimeMillis(), 0, DateUtils.FORMAT_ABBREV_RELATIVE));
voteScore.setText(String.valueOf(debateViewModel.getVoteScore()));
zone.setText(itemView.getContext().getString(R.string.zone_path, debateViewModel.getZone()));
}
}
private final List<DebateViewModel> debates;
private boolean hasNextPage;
public LatestDebateListAdapter() {
this.debates = new ArrayList<>();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false);
if (viewType == R.layout.item_loading) {
return new RecyclerView.ViewHolder(view) {
};
}
return new DebateViewHolder(view);
}
@Override
public int getItemViewType(int position) {
if (position >= debates.size()) {
return R.layout.item_loading;
}
return R.layout.item_debate_latest;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (position >= debates.size()) {
return;
}
DebateViewModel debateVm = debates.get(position);
DebateViewHolder debateViewHolder = (DebateViewHolder) holder;
debateViewHolder.update(debateVm);
}
@Override
public int getItemCount() {
return debates.size() + (hasNextPage ? 1 : 0);
}
public void refresh(List<DebateViewModel> debates) {
this.debates.clear();
this.debates.addAll(debates);
hasNextPage = !debates.isEmpty();
notifyDataSetChanged();
}
public void addAll(List<DebateViewModel> debates) {
if (debates.isEmpty()) {
hasNextPage = false;
return;
}
this.debates.addAll(debates);
notifyItemRangeInserted(this.debates.size() - debates.size(), debates.size());
}
public String getLastDebateId() {
return debates.get(debates.size() - 1).getDebateId();
}
public DebateViewModel findItem(int position) {
if (position >= debates.size()) {
return null;
}
return debates.get(position);
}
}