package com.alorma.github.ui.view.issue; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import com.alorma.github.R; import com.alorma.github.StoreCredentials; import com.alorma.github.sdk.bean.info.RepoInfo; import com.alorma.github.sdk.bean.issue.IssueStoryComment; import com.alorma.github.sdk.bean.issue.IssueStoryDetail; import com.alorma.github.ui.listeners.IssueCommentRequestListener; import com.alorma.github.ui.view.UserAvatarView; import com.alorma.github.utils.TimeUtils; import com.gh4a.utils.UiUtils; import com.github.mobile.util.HtmlUtils; import com.github.mobile.util.HttpImageGetter; import core.GithubComment; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; public class IssueCommentView extends LinearLayout { private IssueCommentRequestListener issueCommentRequestListener; private TextView body; private UserAvatarView profileIcon; private TextView userText; private TextView createdAt; private ReactionsView reactions; private View editComment; public IssueCommentView(Context context) { super(context); init(); } public IssueCommentView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public IssueCommentView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public IssueCommentView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(); } private void init() { inflate(getContext(), R.layout.issue_card, this); setOrientation(VERTICAL); body = (TextView) findViewById(R.id.textBody); userText = (TextView) findViewById(R.id.name); profileIcon = (UserAvatarView) findViewById(R.id.profileIcon); createdAt = (TextView) findViewById(R.id.time); reactions = (ReactionsView) findViewById(R.id.reactionsLy); editComment = findViewById(R.id.editComment); } public void setComment(RepoInfo repoInfo, IssueStoryComment issueStoryDetail) { long milis = System.currentTimeMillis(); GithubComment githubComment = issueStoryDetail.comment; applyGenericIssueStory(issueStoryDetail); if (reactions != null) { reactions.setReactions(githubComment.reactions); } if (githubComment.user != null) { profileIcon.setUser(githubComment.user); } if (githubComment.body_html != null) { String htmlCode = HtmlUtils.format(githubComment.body_html).toString(); HttpImageGetter imageGetter = new HttpImageGetter(getContext()); imageGetter.repoInfo(repoInfo); imageGetter.bind(body, htmlCode, githubComment.hashCode()); body.setMovementMethod(UiUtils.CHECKING_LINK_METHOD); } checkEditable(repoInfo, issueStoryDetail); Log.i("PR_time_comment", (System.currentTimeMillis() - milis) + "ms"); } private void checkEditable(RepoInfo repoInfo, IssueStoryComment issueStoryComment) { StoreCredentials credentials = new StoreCredentials(getContext()); if (repoInfo.permissions != null && repoInfo.permissions.push || issueStoryComment.user().getLogin().equals(credentials.getUserName())) { editComment.setVisibility(VISIBLE); editComment.setOnClickListener(view -> { if (issueCommentRequestListener != null) { issueCommentRequestListener.onContentEditRequest(issueStoryComment); } }); } else { editComment.setVisibility(GONE); editComment.setOnClickListener(null); } } private void applyGenericIssueStory(IssueStoryDetail storyEvent) { userText.setText(storyEvent.user().getLogin()); profileIcon.setUser(storyEvent.user()); setTime(storyEvent.createdAt()); } private void setTime(long time) { DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"); String date = TimeUtils.getTimeAgoString(formatter.print(time)); createdAt.setText(date); } public void setIssueCommentRequestListener(IssueCommentRequestListener issueCommentRequestListener) { this.issueCommentRequestListener = issueCommentRequestListener; } }