package com.kenny.openimgur.ui.adapters; import android.content.Context; import android.graphics.Color; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; import android.text.format.DateUtils; import android.text.util.Linkify; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.kenny.openimgur.R; import com.kenny.openimgur.classes.CustomLinkMovement; import com.kenny.openimgur.classes.ImgurListener; import com.kenny.openimgur.classes.ImgurTrophy; import com.kenny.openimgur.classes.ImgurUser; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; import butterknife.BindView; /** * Created by kcampagna on 1/21/16. */ public class ProfileInfoAdapter extends BaseRecyclerAdapter<ImgurTrophy> { private static final int VIEW_TYPE_HEADER = 0; private static final int VIEW_TYPE_TROPHY = 1; private int mDividerColor; private ImgurUser mUser; ImgurListener mListener; private final SimpleDateFormat mDateFormat = new SimpleDateFormat("MMM dd yyyy", Locale.getDefault()); public ProfileInfoAdapter(Context context, @Nullable List<ImgurTrophy> trophies, @NonNull ImgurUser user, ImgurListener listener) { super(context, trophies, true); mUser = user; mListener = listener; mDividerColor = isDarkTheme ? getColor(R.color.primary_dark_light) : Color.BLACK; } @Override public int getItemViewType(int position) { return position == 0 ? VIEW_TYPE_HEADER : VIEW_TYPE_TROPHY; } @Override public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { BaseViewHolder holder; switch (viewType) { case VIEW_TYPE_HEADER: holder = new InfoHolder(inflateView(R.layout.profile_info_header, parent)); break; case VIEW_TYPE_TROPHY: default: holder = new TrophyHolder(inflateView(R.layout.trophy_item, parent)); ((TrophyHolder) holder).divider.setBackgroundColor(mDividerColor); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mListener != null) mListener.onPhotoTap(v); } }); break; } return holder; } @Override public void onBindViewHolder(BaseViewHolder holder, int position) { if (holder instanceof InfoHolder) { InfoHolder infoHolder = (InfoHolder) holder; String dateFormat = mDateFormat.format(new Date(mUser.getCreated())); infoHolder.notoriety.setText(mUser.getNotoriety().getStringId()); infoHolder.notoriety.setTextColor(getColor(mUser.getNotoriety().getNotorietyColor())); infoHolder.rep.setText(getResources().getString(R.string.profile_rep, mUser.getReputation())); infoHolder.date.setText(getResources().getString(R.string.profile_date, dateFormat)); if (!TextUtils.isEmpty(mUser.getBio())) { infoHolder.bio.setText(mUser.getBio()); if (mListener != null) { infoHolder.bio.setMovementMethod(CustomLinkMovement.getInstance(mListener)); Linkify.addLinks(infoHolder.bio, Linkify.WEB_URLS); } } else { infoHolder.bio.setText(getResources().getString(R.string.profile_bio_empty, mUser.getUsername())); } } else if (holder instanceof TrophyHolder) { TrophyHolder trophyHolder = (TrophyHolder) holder; ImgurTrophy trophy = getItem(position - 1); String date = mDateFormat.format(new Date(trophy.getDate() * DateUtils.SECOND_IN_MILLIS)); trophyHolder.trophyName.setText(String.format("%s - %s", trophy.getName(), date)); trophyHolder.trophyDesc.setText(trophy.getDescription()); displayImage(trophyHolder.trophyImage, trophy.getTrophyImagePath()); } } @Override public int getItemCount() { // Pad for the header return super.getItemCount() + 1; } @Override public void onDestroy() { mListener = null; super.onDestroy(); } static class InfoHolder extends BaseViewHolder { @BindView(R.id.notoriety) TextView notoriety; @BindView(R.id.rep) TextView rep; @BindView(R.id.bio) TextView bio; @BindView(R.id.date) TextView date; public InfoHolder(View v) { super(v); } } static class TrophyHolder extends BaseViewHolder { @BindView(R.id.image) ImageView trophyImage; @BindView(R.id.name) TextView trophyName; @BindView(R.id.desc) TextView trophyDesc; @BindView(R.id.divider) View divider; public TrophyHolder(View v) { super(v); } } }