package tellh.com.gitclub.presentation.view.adapter.viewbinder; import android.support.v7.widget.CardView; import android.text.TextUtils; import android.view.View; import android.widget.TextView; import com.tellh.nolistadapter.IListAdapter; import com.tellh.nolistadapter.viewbinder.base.RecyclerViewBinder; import java.util.HashMap; import java.util.Map; import de.hdodenhof.circleimageview.CircleImageView; import tellh.com.gitclub.R; import tellh.com.gitclub.common.config.ExtraKey; import tellh.com.gitclub.common.config.IEventType; import tellh.com.gitclub.common.utils.DateUtils; import tellh.com.gitclub.common.utils.LogUtils; import tellh.com.gitclub.common.utils.StringUtils; import tellh.com.gitclub.common.wrapper.ImageLoader; import tellh.com.gitclub.model.entity.Event; import tellh.com.gitclub.presentation.contract.bus.RxBusPostman; import tellh.com.gitclub.presentation.contract.bus.event.LaunchActivityEvent; import static tellh.com.gitclub.common.config.IEventType.CommitCommentEvent; import static tellh.com.gitclub.common.config.IEventType.CreateEvent; import static tellh.com.gitclub.common.config.IEventType.DeleteEvent; import static tellh.com.gitclub.common.config.IEventType.ForkEvent; import static tellh.com.gitclub.common.config.IEventType.GollumEvent; import static tellh.com.gitclub.common.config.IEventType.IssueCommentEvent; import static tellh.com.gitclub.common.config.IEventType.IssuesEvent; import static tellh.com.gitclub.common.config.IEventType.MemberEvent; import static tellh.com.gitclub.common.config.IEventType.MembershipEvent; import static tellh.com.gitclub.common.config.IEventType.PublicEvent; import static tellh.com.gitclub.common.config.IEventType.PullRequestEvent; import static tellh.com.gitclub.common.config.IEventType.PullRequestReviewCommentEvent; import static tellh.com.gitclub.common.config.IEventType.PushEvent; import static tellh.com.gitclub.common.config.IEventType.ReleaseEvent; import static tellh.com.gitclub.common.config.IEventType.WatchEvent; /** * Created by tlh on 2016/10/4 :) */ public class NewsListItemViewBinder extends RecyclerViewBinder<Event, NewsListItemViewBinder.ViewHolder> { @Override public ViewHolder provideViewHolder(View view) { return new ViewHolder(view); } @Override public void bindView(IListAdapter iListAdapter, ViewHolder holder, int i, final Event event) { holder.itemContainer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { gotoRepoActivity(event.getRepo().getName()); } }); holder.ivActor.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { gotoUserInfoActivity(event.getActor().getLogin()); } }); ImageLoader.load(event.getActor().getAvatar_url(), holder.ivActor); holder.tvActor.setText(event.getActor().getLogin()); holder.tvTimeAgo.setText(DateUtils.timeAgo(event.getCreated_at())); holder.tvRepo.setText(event.getRepo().getName()); handleEventType(holder, event); } private void handleEventType(ViewHolder holder, Event event) { //reset it holder.tvDesc.setText(""); try { Event.PayloadEntity payload = event.getPayload(); @IEventType.EventType String type = event.getType(); switch (type) { case WatchEvent: holder.tvEvent.setText(" starred"); break; case CreateEvent: holder.tvEvent.setText(" created repo"); break; case CommitCommentEvent: holder.tvEvent.setText(" commented on"); holder.tvDesc.setText(payload.comment.body); break; case ForkEvent: holder.tvEvent.setText(" forked"); holder.tvDesc.setText(StringUtils.append("to ", payload.forkee.getFull_name())); break; case GollumEvent: holder.tvEvent.setText(" created wiki page on"); break; case IssueCommentEvent: holder.tvEvent.setText(" commented"); holder.tvDesc.setText(StringUtils.append("on issue#", String.valueOf(payload.issue.number), ": ", payload.comment.body)); break; case IssuesEvent: holder.tvEvent.setText(StringUtils.append(payload.action, " issue")); holder.tvDesc.setText(payload.issue.title); break; case MemberEvent: holder.tvEvent.setText("added collaborator to"); holder.tvDesc.setText(StringUtils.append("for ", payload.member.getLogin())); break; case MembershipEvent: holder.tvEvent.setText(payload.action); holder.tvDesc.setText(StringUtils.append("for ", payload.member.getLogin())); break; case PublicEvent: holder.tvEvent.setText(" public"); break; case PullRequestEvent: holder.tvEvent.setText(StringUtils.append(payload.action, " pull request")); holder.tvDesc.setText(StringUtils.append("title: ", payload.pull_request.title)); break; case PullRequestReviewCommentEvent: holder.tvEvent.setText(" commented on pull request"); holder.tvDesc.setText(payload.comment.body); break; case PushEvent: holder.tvEvent.setText(" pushed to"); holder.tvDesc.setText(payload.ref); break; case DeleteEvent: holder.tvEvent.setText(" deleted repo"); break; case ReleaseEvent: holder.tvEvent.setText(" released"); holder.tvDesc.setText(payload.release.body); break; default: holder.tvEvent.setText(payload.action); break; } } catch (IllegalArgumentException e) { LogUtils.e(e.getMessage()); } } @Override public int getItemLayoutId(IListAdapter iListAdapter) { return R.layout.item_news; } private void gotoRepoActivity(String repoFullName) { String[] pair = TextUtils.split(repoFullName, "/"); if (pair.length != 2) { LogUtils.e("error in parse repo full name."); return; } Map<String, String> params = new HashMap<>(1); params.put(ExtraKey.USER_NAME, pair[0]); params.put(ExtraKey.REPO_NAME, pair[1]); RxBusPostman.postLaunchActivityEvent(params, LaunchActivityEvent.REPO_PAGE_ACTIVITY); } private void gotoUserInfoActivity(String user) { Map<String, String> params = new HashMap<>(1); params.put(ExtraKey.USER_NAME, user); RxBusPostman.postLaunchActivityEvent(params, LaunchActivityEvent.PERSONAL_HOME_PAGE_ACTIVITY); } class ViewHolder extends RecyclerViewBinder.ViewHolder { private CircleImageView ivActor; private TextView tvActor; private TextView tvEvent; private TextView tvRepo; private TextView tvDesc; private TextView tvTimeAgo; private CardView itemContainer; public ViewHolder(View rootView) { super(rootView); this.ivActor = (CircleImageView) rootView.findViewById(R.id.iv_actor); this.tvActor = (TextView) rootView.findViewById(R.id.tv_actor); this.tvEvent = (TextView) rootView.findViewById(R.id.tv_event); this.tvRepo = (TextView) rootView.findViewById(R.id.tv_repo); this.tvDesc = (TextView) rootView.findViewById(R.id.tv_desc); this.tvTimeAgo = (TextView) rootView.findViewById(R.id.tv_time_ago); this.itemContainer = (CardView) rootView.findViewById(R.id.item_container); } } }