package jp.gr.procon.proconapp.ui.adapter; import android.support.annotation.NonNull; 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.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.List; import java.util.Locale; import jp.gr.procon.proconapp.R; import jp.gr.procon.proconapp.model.FeedTwitterStatus; import jp.gr.procon.proconapp.ui.fragment.TwitterFeedFragment; import jp.gr.procon.proconapp.util.DateUtil; import timber.log.Timber; public class TwitterFeedRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private static final int VIEW_TYPE_ITEM = 1; private static final int VIEW_TYPE_FOOTER = 2; private List<FeedTwitterStatus> mItems; private TwitterFeedFragment.OnClickTweetListener mOnClickTweetListener; private View.OnClickListener mOnClickMoreButtonListener; public TwitterFeedRecyclerAdapter(@NonNull List<FeedTwitterStatus> items) { mItems = items; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case VIEW_TYPE_FOOTER: return FooterViewHolder.create(parent); default: return ItemViewHolder.create(parent); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)) { case VIEW_TYPE_ITEM: ((ItemViewHolder) holder).bindTo(mItems.get(position), mOnClickTweetListener); break; case VIEW_TYPE_FOOTER: ((FooterViewHolder) holder).bindTo(mOnClickMoreButtonListener); break; } } @Override public int getItemViewType(int position) { if (position < mItems.size()) { return VIEW_TYPE_ITEM; } else { return VIEW_TYPE_FOOTER; } } @Override public int getItemCount() { return mItems.size() + getFootersCount(); } public int getFootersCount() { return mItems.size() == 0 ? 0 : 1; } public void setOnClickTweetListener(TwitterFeedFragment.OnClickTweetListener onClickTweetListener) { mOnClickTweetListener = onClickTweetListener; } public void setOnClickMoreButtonListener(View.OnClickListener onClickMoreButtonListener) { mOnClickMoreButtonListener = onClickMoreButtonListener; } private static class ItemViewHolder extends RecyclerView.ViewHolder { public static final int RES_ID = R.layout.item_twitter_feed; private ImageView mThumbnailView; private TextView mNameText; private TextView mScreenNameText; private TextView mCreatedAtText; private TextView mTweetBody; public static ItemViewHolder create(ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); return new ItemViewHolder(inflater.inflate(RES_ID, parent, false)); } public ItemViewHolder(View itemView) { super(itemView); mThumbnailView = (ImageView) itemView.findViewById(R.id.thumbnail_view); mNameText = (TextView) itemView.findViewById(R.id.user_name); mScreenNameText = (TextView) itemView.findViewById(R.id.screen_name); mCreatedAtText = (TextView) itemView.findViewById(R.id.created_at); mTweetBody = (TextView) itemView.findViewById(R.id.tweet_body); } public void bindTo(final FeedTwitterStatus tweet, final TwitterFeedFragment.OnClickTweetListener listener) { itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { listener.onClickTweet(tweet); } } }); Glide.with(itemView.getContext()) .load(convertProfileIconUrlToLargeUrl(tweet.getUser().getProfileImageUrl())) .fitCenter() .into(mThumbnailView); String twitterDateFormat = "EEE MMM dd HH:mm:ss ZZZZZ yyyy"; SimpleDateFormat format = new SimpleDateFormat(twitterDateFormat, Locale.ENGLISH); format.setLenient(true); Timber.d("bindTo: " + format.toPattern()); long targetDateTime = 0; try { targetDateTime = format.parse(tweet.getCreatedAt()).getTime(); } catch (ParseException e) { targetDateTime = -1; e.printStackTrace(); } Timber.d("bindTo: " + System.currentTimeMillis() + " " + tweet.getCreatedAt() + " "); mNameText.setText(tweet.getUser().getName()); mScreenNameText.setText("@" + tweet.getUser().getScreenName()); mCreatedAtText.setText(DateUtil.timeToPostDate(targetDateTime)); mTweetBody.setText(tweet.getText()); } private String convertProfileIconUrlToLargeUrl(String url) { if (TextUtils.isDigitsOnly(url)) { return url; } String normalUrlString = "_normal"; return url.replace(normalUrlString, ""); } } private static class FooterViewHolder extends RecyclerView.ViewHolder { private static final int RES_ID = R.layout.text_show_more_tweet; private TextView mDescText; public static FooterViewHolder create(ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); return new FooterViewHolder(inflater.inflate(RES_ID, parent, false)); } public FooterViewHolder(View itemView) { super(itemView); mDescText = (TextView) itemView.findViewById(R.id.text_body); } public void bindTo(View.OnClickListener listener) { mDescText.setText(R.string.text_show_more_tweet); mDescText.setOnClickListener(listener); } } }