package com.boardgamegeek.ui.adapter; import android.content.Context; import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.boardgamegeek.R; import com.boardgamegeek.ui.model.Article; import com.boardgamegeek.ui.widget.TimestampView; import com.boardgamegeek.util.ActivityUtils; import com.boardgamegeek.util.UIUtils; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import hugo.weaving.DebugLog; public class ThreadRecyclerViewAdapter extends RecyclerView.Adapter<ThreadRecyclerViewAdapter.ArticleViewHolder> { private final List<Article> articles; private final LayoutInflater inflater; public ThreadRecyclerViewAdapter(Context context, List<Article> articles) { this.articles = articles; inflater = LayoutInflater.from(context); setHasStableIds(true); } @Override public ArticleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ArticleViewHolder(inflater.inflate(R.layout.row_thread_article, parent, false)); } @Override public void onBindViewHolder(ArticleViewHolder holder, int position) { holder.bind(articles.get(position)); } @Override public int getItemCount() { return articles == null ? 0 : articles.size(); } @Override public long getItemId(int position) { Article article = articles.get(position); if (article == null) return RecyclerView.NO_ID; return (long) article.id(); } public int getPosition(int articleId) { if (articles == null) return RecyclerView.NO_POSITION; for (int i = 0; i < articles.size(); i++) { if (articles.get(i).id() == articleId) return i; } return RecyclerView.NO_POSITION; } public class ArticleViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.username) TextView usernameView; @BindView(R.id.post_date) TimestampView postDateView; @BindView(R.id.date_divider) View dateDivider; @BindView(R.id.edit_date) TimestampView editDateView; @BindView(R.id.body) TextView bodyView; @BindView(R.id.view_button) View viewButton; @DebugLog public ArticleViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } public void bind(Article article) { if (article == null) return; usernameView.setText(article.username()); editDateView.setTimestamp(article.editTicks()); postDateView.setTimestamp(article.postTicks()); UIUtils.setTextMaybeHtml(bodyView, article.body()); if (article.editTicks() != article.postTicks()) { editDateView.setTimestamp(article.editTicks()); editDateView.setVisibility(View.VISIBLE); dateDivider.setVisibility(View.VISIBLE); } else { editDateView.setVisibility(View.GONE); dateDivider.setVisibility(View.GONE); } if (TextUtils.isEmpty(article.body())) { bodyView.setText(""); } else { UIUtils.setTextMaybeHtml(bodyView, article.body().trim()); } Bundle bundle = new Bundle(); bundle.putString(ActivityUtils.KEY_USER, article.username()); bundle.putLong(ActivityUtils.KEY_POST_DATE, article.postTicks()); bundle.putLong(ActivityUtils.KEY_EDIT_DATE, article.editTicks()); bundle.putInt(ActivityUtils.KEY_EDIT_COUNT, article.numberOfEdits()); bundle.putString(ActivityUtils.KEY_BODY, article.body()); bundle.putString(ActivityUtils.KEY_LINK, article.link()); bundle.putInt(ActivityUtils.KEY_ARTICLE_ID, article.id()); viewButton.setTag(bundle); } } }