From 2fc975e4f6237c0b14eb6ebc01701770c7cecb88 Mon Sep 17 00:00:00 2001 From: M M Arif Date: Sun, 13 Mar 2022 19:37:05 +0500 Subject: [PATCH] Add labels to issue list --- .../activities/IssueDetailActivity.java | 4 +- .../gitnex/adapters/IssueCommentsAdapter.java | 3 +- .../mian/gitnex/adapters/IssuesAdapter.java | 65 ++++++++++++++++--- app/src/main/res/layout/list_issues.xml | 18 +++++ 4 files changed, 80 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java index 893145e8..955da1ef 100644 --- a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java @@ -52,6 +52,7 @@ import org.mian.gitnex.databinding.CustomAssigneesSelectionDialogBinding; import org.mian.gitnex.databinding.CustomLabelsSelectionDialogBinding; import org.mian.gitnex.fragments.BottomSheetReplyFragment; import org.mian.gitnex.fragments.BottomSheetSingleIssueFragment; +import org.mian.gitnex.fragments.IssuesFragment; import org.mian.gitnex.helpers.AlertDialogs; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.ClickListener; @@ -418,6 +419,7 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt getSingleIssue(repoOwner, repoName, issueIndex); currentLabelsIds.clear(); new Handler(Looper.getMainLooper()).postDelayed(() -> LabelsActions.getCurrentIssueLabels(ctx, repoOwner, repoName, issueIndex, currentLabelsIds), 1000); + IssuesFragment.resumeIssues = true; } else if(response.code() == 401) { @@ -761,7 +763,7 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt TextDrawable drawable = TextDrawable.builder().beginConfig().useFont(Typeface.DEFAULT) .textColor(new ColorInverter().getContrastColor(color)).fontSize(textSize) .width(LabelWidthCalculator.calculateLabelWidth(labelName, Typeface.DEFAULT, textSize, AppUtil.getPixelsFromDensity(ctx, 10))) - .height(height).endConfig().buildRoundRect(labelName, color, AppUtil.getPixelsFromDensity(ctx, 5)); + .height(height).endConfig().buildRoundRect(labelName, color, AppUtil.getPixelsFromDensity(ctx, 18)); labelsView.setImageDrawable(drawable); viewBinding.frameLabels.addView(labelsView); diff --git a/app/src/main/java/org/mian/gitnex/adapters/IssueCommentsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/IssueCommentsAdapter.java index f094fc16..9fa62181 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/IssueCommentsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/IssueCommentsAdapter.java @@ -1,7 +1,6 @@ package org.mian.gitnex.adapters; import android.annotation.SuppressLint; -import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; @@ -27,6 +26,7 @@ import org.mian.gitnex.activities.ProfileActivity; import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.fragments.BottomSheetReplyFragment; +import org.mian.gitnex.fragments.IssuesFragment; import org.mian.gitnex.helpers.AlertDialogs; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.Markdown; @@ -268,6 +268,7 @@ public class IssueCommentsAdapter extends RecyclerView.Adapter class IssuesHolder extends RecyclerView.ViewHolder { - private Issues issue; + private Issues issueObject; private final ImageView issueAssigneeAvatar; private final TextView issueTitle; private final TextView issueCreatedTime; private final TextView issueCommentsCount; + private final HorizontalScrollView labelsScrollView; + private final LinearLayout frameLabels; IssuesHolder(View itemView) { @@ -111,10 +121,17 @@ public class IssuesAdapter extends RecyclerView.Adapter issueTitle = itemView.findViewById(R.id.issueTitle); issueCommentsCount = itemView.findViewById(R.id.issueCommentsCount); issueCreatedTime = itemView.findViewById(R.id.issueCreatedTime); + labelsScrollView = itemView.findViewById(R.id.labelsScrollView); + frameLabels = itemView.findViewById(R.id.frameLabels); + + issueAssigneeAvatar.setOnLongClickListener(loginId -> { + AppUtil.copyToClipboard(context, issueObject.getUser().getLogin(), context.getString(R.string.copyLoginIdToClipBoard, issueObject.getUser().getLogin())); + return true; + }); itemView.setOnClickListener(layoutView -> { Intent intent = new IssueContext( - issue, + issueObject, ((RepoDetailActivity) context).repository ).getIntent(context, IssueDetailActivity.class); context.startActivity(intent); @@ -122,14 +139,10 @@ public class IssuesAdapter extends RecyclerView.Adapter issueAssigneeAvatar.setOnClickListener(v -> { Intent intent = new Intent(context, ProfileActivity.class); - intent.putExtra("username", issue.getUser().getLogin()); + intent.putExtra("username", issueObject.getUser().getLogin()); context.startActivity(intent); }); - issueAssigneeAvatar.setOnLongClickListener(loginId -> { - AppUtil.copyToClipboard(context, issue.getUser().getLogin(), context.getString(R.string.copyLoginIdToClipBoard, issue.getUser().getLogin())); - return true; - }); } @SuppressLint("SetTextI18n") @@ -152,9 +165,45 @@ public class IssuesAdapter extends RecyclerView.Adapter String issueNumber_ = "" + context.getResources().getString(R.string.hash) + issue.getNumber() + ""; issueTitle.setText(HtmlCompat.fromHtml(issueNumber_ + " " + EmojiParser.parseToUnicode(issue.getTitle()), HtmlCompat.FROM_HTML_MODE_LEGACY)); - this.issue = issue; + this.issueObject = issue; this.issueCommentsCount.setText(String.valueOf(issue.getComments())); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, + LinearLayout.LayoutParams.WRAP_CONTENT); + params.setMargins(0, 0, 15, 0); + + if(issue.getLabels() != null) { + + labelsScrollView.setVisibility(View.VISIBLE); + frameLabels.removeAllViews(); + + for(int i = 0; i < issue.getLabels().size(); i++) { + + String labelColor = issue.getLabels().get(i).getColor(); + String labelName = issue.getLabels().get(i).getName(); + int color = Color.parseColor("#" + labelColor); + + ImageView labelsView = new ImageView(context); + frameLabels.setOrientation(LinearLayout.HORIZONTAL); + frameLabels.setGravity(Gravity.START | Gravity.TOP); + labelsView.setLayoutParams(params); + + int height = AppUtil.getPixelsFromDensity(context, 22); + int textSize = AppUtil.getPixelsFromScaledDensity(context, 12); + + TextDrawable drawable = TextDrawable.builder().beginConfig().useFont(Typeface.DEFAULT) + .textColor(new ColorInverter().getContrastColor(color)).fontSize(textSize) + .width(LabelWidthCalculator.calculateLabelWidth(labelName, Typeface.DEFAULT, textSize, AppUtil.getPixelsFromDensity(context, 8))) + .height(height).endConfig().buildRoundRect(labelName, color, AppUtil.getPixelsFromDensity(context, 18)); + + labelsView.setImageDrawable(drawable); + frameLabels.addView(labelsView); + } + } + else { + labelsScrollView.setVisibility(View.GONE); + } + switch(timeFormat) { case "pretty": { PrettyTime prettyTime = new PrettyTime(locale); diff --git a/app/src/main/res/layout/list_issues.xml b/app/src/main/res/layout/list_issues.xml index 4cc3ceeb..d5a975d6 100644 --- a/app/src/main/res/layout/list_issues.xml +++ b/app/src/main/res/layout/list_issues.xml @@ -39,6 +39,24 @@ + + + + + +