package com.fastaccess.ui.adapter.viewholder;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.Html;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import com.fastaccess.R;
import com.fastaccess.data.dao.PayloadModel;
import com.fastaccess.data.dao.model.Event;
import com.fastaccess.data.dao.types.EventsType;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.helper.ParseDateFormat;
import com.fastaccess.provider.markdown.MarkDownProvider;
import com.fastaccess.ui.widgets.AvatarLayout;
import com.fastaccess.ui.widgets.FontTextView;
import com.fastaccess.ui.widgets.SpannableBuilder;
import com.fastaccess.ui.widgets.recyclerview.BaseRecyclerAdapter;
import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder;
import butterknife.BindString;
import butterknife.BindView;
/**
* Created by Kosh on 11 Nov 2016, 2:08 PM
*/
public class FeedsViewHolder extends BaseViewHolder<Event> {
@BindView(R.id.avatarLayout) AvatarLayout avatar;
@BindView(R.id.description) FontTextView description;
@BindView(R.id.title) FontTextView title;
@BindView(R.id.date) FontTextView date;
@BindString(R.string.to) String to;
@BindString(R.string.in_value) String in;
public FeedsViewHolder(@NonNull View itemView, @Nullable BaseRecyclerAdapter adapter) {
super(itemView, adapter);
}
public static View getView(@NonNull ViewGroup viewGroup) {
return getView(viewGroup, R.layout.feeds_row_item);
}
@Override public void bind(@NonNull Event eventsModel) {
if (eventsModel.getActor() != null) {
avatar.setUrl(eventsModel.getActor().getAvatarUrl(), eventsModel.getActor().getLogin(), eventsModel.getActor().isOrganizationType());
} else {
avatar.setUrl(null, null);
}
SpannableBuilder spannableBuilder = SpannableBuilder.builder();
spannableBuilder.append(eventsModel.getActor() != null ? eventsModel.getActor().getLogin() : "N/A").append(" ");
String number = "";
if (eventsModel.getType() != null) {
EventsType type = eventsModel.getType();
date.setGravity(Gravity.CENTER);
date.setEventsIcon(type.getDrawableRes());
String action;
if (type == EventsType.WatchEvent) {
action = itemView.getResources().getString(type.getType()).toLowerCase();
} else if (type == EventsType.PullRequestEvent) {
if (eventsModel.getPayload().getPullRequest() != null) {
if (eventsModel.getPayload().getPullRequest().isMerged()) {
action = itemView.getResources().getString(R.string.merged);
} else {
action = eventsModel.getPayload() != null ? eventsModel.getPayload().getAction() : "";
}
} else {
action = eventsModel.getPayload() != null ? eventsModel.getPayload().getAction() : "";
}
} else {
action = eventsModel.getPayload() != null ? eventsModel.getPayload().getAction() : "";
}
spannableBuilder.bold(action != null ? action.toLowerCase() : "")
.append(eventsModel.getPayload() != null && eventsModel.getPayload().getAction() != null ? " " : "");
if (type != EventsType.WatchEvent) {
if (type == EventsType.CreateEvent && !InputHelper.isEmpty(eventsModel.getPayload().getRefType())) {
spannableBuilder
.bold(itemView.getResources().getString(type.getType()).toLowerCase())
.append(" ")
.bold(eventsModel.getPayload().getRefType())
.append(" ")
.append(in)
.append(" ");
} else if ((type == EventsType.PushEvent || type == EventsType.DeleteEvent) && eventsModel.getPayload() != null) {
spannableBuilder
.bold(itemView.getResources().getString(type.getType()).toLowerCase())
.append(" ")
.bold(Uri.parse(eventsModel.getPayload().getRef()).getLastPathSegment())
.append(" ")
.append(in)
.append(" ");
} else {
if (eventsModel.getPayload() != null) {
PayloadModel payloadModel = eventsModel.getPayload();
if (payloadModel.getTarget() != null) {
spannableBuilder
.bold(payloadModel.getTarget().getLogin())
.append(" ")
.append(in)
.append(" ");
} else if (payloadModel.getTeam() != null) {
spannableBuilder
.bold(payloadModel.getTeam().getName())
.append(" ")
.append(in)
.append(" ");
} else if (payloadModel.getMember() != null) {
spannableBuilder
.bold(payloadModel.getMember().getLogin())
.append(" ")
.append(in)
.append(" ");
} else {
spannableBuilder.bold(itemView.getResources().getString(type.getType()).toLowerCase()).append(" ");
}
} else {
spannableBuilder.bold(itemView.getResources().getString(type.getType()).toLowerCase()).append(" ");
}
}
}
}
if (eventsModel.getPayload() != null) {
if (eventsModel.getPayload().getComment() != null) {
MarkDownProvider.stripMdText(description, eventsModel.getPayload().getComment().getBody());
description.setVisibility(View.VISIBLE);
if (eventsModel.getPayload().getIssue() != null) {
number = "#" + eventsModel.getPayload().getIssue().getNumber();
} else if (eventsModel.getPayload().getPullRequest() != null) {
number = "#" + eventsModel.getPayload().getPullRequest().getNumber();
}
} else if (eventsModel.getPayload().getIssue() != null) {
number = "#" + eventsModel.getPayload().getIssue().getNumber();
description.setText(eventsModel.getPayload().getIssue().getTitle());
description.setVisibility(View.VISIBLE);
} else if (eventsModel.getPayload().getPullRequest() != null) {
number = "#" + eventsModel.getPayload().getPullRequest().getNumber();
description.setText(eventsModel.getPayload().getPullRequest().getTitle());
description.setVisibility(View.VISIBLE);
} else {
description.setText("");
description.setVisibility(View.GONE);
}
} else {
description.setText("");
description.setVisibility(View.GONE);
}
spannableBuilder.append(eventsModel.getRepo() != null ? eventsModel.getRepo().getName() : "")
.append(number);
title.setText(spannableBuilder);
date.setText(ParseDateFormat.getTimeAgo(eventsModel.getCreatedAt()));
}
}