From bb31bb84c0c9c871da83064a86d7fbbd3005a26a Mon Sep 17 00:00:00 2001 From: M M Arif Date: Wed, 16 Mar 2022 15:23:22 +0500 Subject: [PATCH] Introduce two styles(dorts and text). Let the user choose. default is dot. Extend it to explore issues --- .../SettingsAppearanceActivity.java | 10 +++ .../gitnex/adapters/ExploreIssuesAdapter.java | 81 ++++++++++++++++++- .../mian/gitnex/adapters/IssuesAdapter.java | 79 +++++++++++------- .../gitnex/adapters/PullRequestsAdapter.java | 74 ++++++++++++----- .../layout/activity_settings_appearance.xml | 42 ++++++++++ app/src/main/res/layout/list_issues.xml | 46 ++++++++--- app/src/main/res/layout/list_pr.xml | 44 +++++++--- app/src/main/res/values/strings.xml | 2 + 8 files changed, 308 insertions(+), 70 deletions(-) diff --git a/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java b/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java index 07f09b9a..8ed19993 100644 --- a/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java @@ -100,6 +100,16 @@ public class SettingsAppearanceActivity extends BaseActivity { }); activitySettingsAppearanceBinding.counterBadgeFrame.setOnClickListener(v -> counterBadgesSwitch.setChecked(!counterBadgesSwitch.isChecked())); + // show labels in lists(issues, pr) - default is color dots + activitySettingsAppearanceBinding.switchLabelsInListBadge.setChecked(tinyDB.getBoolean("showLabelsInList", true)); + + activitySettingsAppearanceBinding.switchLabelsInListBadge.setOnCheckedChangeListener((buttonView, isChecked) -> { + + tinyDB.putBoolean("showLabelsInList", isChecked); + Toasty.success(appCtx, getResources().getString(R.string.settingsSave)); + }); + activitySettingsAppearanceBinding.labelsInListFrame.setOnClickListener(v -> activitySettingsAppearanceBinding.switchLabelsInListBadge.setChecked(!activitySettingsAppearanceBinding.switchLabelsInListBadge.isChecked())); + // theme selection dialog themeFrame.setOnClickListener(view -> { diff --git a/app/src/main/java/org/mian/gitnex/adapters/ExploreIssuesAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/ExploreIssuesAdapter.java index 387238e8..e2013488 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/ExploreIssuesAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/ExploreIssuesAdapter.java @@ -3,15 +3,21 @@ package org.mian.gitnex.adapters; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; +import android.graphics.Color; +import android.graphics.Typeface; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.HorizontalScrollView; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.core.content.res.ResourcesCompat; import androidx.core.text.HtmlCompat; import androidx.recyclerview.widget.RecyclerView; +import com.amulyakhare.textdrawable.TextDrawable; import org.gitnex.tea4j.models.Issues; import org.mian.gitnex.R; import org.mian.gitnex.activities.BaseActivity; @@ -23,6 +29,8 @@ import org.mian.gitnex.database.api.RepositoriesApi; import org.mian.gitnex.database.models.Repository; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.ClickListener; +import org.mian.gitnex.helpers.ColorInverter; +import org.mian.gitnex.helpers.LabelWidthCalculator; import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.helpers.TimeHelper; import org.mian.gitnex.helpers.TinyDB; @@ -98,6 +106,10 @@ public class ExploreIssuesAdapter extends RecyclerView.Adapter { + String[] parts = issue.getRepository().getFull_name().split("/"); final String repoOwner = parts[0]; final String repoName = parts[1]; - - int currentActiveAccountId = ((BaseActivity) context).getAccount().getAccount().getAccountId(); RepositoriesApi repositoryData = BaseApi.getInstance(context, RepositoriesApi.class); @@ -171,6 +186,68 @@ public class ExploreIssuesAdapter extends RecyclerView.Adapter private final TextView issueTitle; private final TextView issueCreatedTime; private final TextView issueCommentsCount; - private final HorizontalScrollView labelsScrollView; + private final HorizontalScrollView labelsScrollViewWithText; private final LinearLayout frameLabels; + private final HorizontalScrollView labelsScrollViewDots; + private final LinearLayout frameLabelsDots; IssuesHolder(View itemView) { @@ -121,8 +123,10 @@ 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); + labelsScrollViewWithText = itemView.findViewById(R.id.labelsScrollViewWithText); frameLabels = itemView.findViewById(R.id.frameLabels); + labelsScrollViewDots = itemView.findViewById(R.id.labelsScrollViewDots); + frameLabelsDots = itemView.findViewById(R.id.frameLabelsDots); issueAssigneeAvatar.setOnLongClickListener(loginId -> { AppUtil.copyToClipboard(context, issueObject.getUser().getLogin(), context.getString(R.string.copyLoginIdToClipBoard, issueObject.getUser().getLogin())); @@ -174,34 +178,59 @@ public class IssuesAdapter extends RecyclerView.Adapter if(issue.getLabels() != null) { - labelsScrollView.setVisibility(View.VISIBLE); - frameLabels.removeAllViews(); + if(!tinyDb.getBoolean("showLabelsInList")) { // default - for(int i = 0; i < issue.getLabels().size(); i++) { + labelsScrollViewWithText.setVisibility(View.GONE); + labelsScrollViewDots.setVisibility(View.VISIBLE); + frameLabelsDots.removeAllViews(); - String labelColor = issue.getLabels().get(i).getColor(); - String labelName = issue.getLabels().get(i).getName(); - int color = Color.parseColor("#" + labelColor); + for(int i = 0; i < issue.getLabels().size(); i++) { - ImageView labelsView = new ImageView(context); - frameLabels.setOrientation(LinearLayout.HORIZONTAL); - frameLabels.setGravity(Gravity.START | Gravity.TOP); - labelsView.setLayoutParams(params); + String labelColor = issue.getLabels().get(i).getColor(); + int color = Color.parseColor("#" + labelColor); - int height = AppUtil.getPixelsFromDensity(context, 20); - int textSize = AppUtil.getPixelsFromScaledDensity(context, 12); + ImageView labelsView = new ImageView(context); + frameLabelsDots.setOrientation(LinearLayout.HORIZONTAL); + frameLabelsDots.setGravity(Gravity.START | Gravity.TOP); + labelsView.setLayoutParams(params); - 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)); + TextDrawable drawable = TextDrawable.builder().beginConfig().useFont(Typeface.DEFAULT).width(54).height(54).endConfig().buildRound("", color); - labelsView.setImageDrawable(drawable); - frameLabels.addView(labelsView); + labelsView.setImageDrawable(drawable); + frameLabelsDots.addView(labelsView); + } + } + else { + + labelsScrollViewDots.setVisibility(View.GONE); + labelsScrollViewWithText.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, 20); + 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); + labelsScrollViewDots.setVisibility(View.GONE); + labelsScrollViewWithText.setVisibility(View.GONE); } switch(timeFormat) { @@ -233,31 +262,27 @@ public class IssuesAdapter extends RecyclerView.Adapter static class LoadHolder extends RecyclerView.ViewHolder { LoadHolder(View itemView) { - super(itemView); } } public void setMoreDataAvailable(boolean moreDataAvailable) { - isMoreDataAvailable = moreDataAvailable; } + @SuppressLint("NotifyDataSetChanged") public void notifyDataChanged() { - notifyDataSetChanged(); isLoading = false; } public void setLoadMoreListener(Runnable loadMoreListener) { - this.loadMoreListener = loadMoreListener; } public void updateList(List list) { - issuesList = list; - notifyDataSetChanged(); + notifyDataChanged(); } } diff --git a/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java index d8ee0028..bb8a3399 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java @@ -105,8 +105,10 @@ public class PullRequestsAdapter extends RecyclerView.Adapter { Intent intent = new IssueContext( @@ -165,34 +169,59 @@ public class PullRequestsAdapter extends RecyclerView.Adapter" + context.getResources().getString(R.string.hash) + pullRequest.getNumber() + ""; @@ -219,6 +248,7 @@ public class PullRequestsAdapter extends RecyclerView.Adapter list) { prList = list; - notifyDataSetChanged(); + notifyDataChanged(); } } diff --git a/app/src/main/res/layout/activity_settings_appearance.xml b/app/src/main/res/layout/activity_settings_appearance.xml index 90ac744a..b3d1bccf 100644 --- a/app/src/main/res/layout/activity_settings_appearance.xml +++ b/app/src/main/res/layout/activity_settings_appearance.xml @@ -245,4 +245,46 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/list_issues.xml b/app/src/main/res/layout/list_issues.xml index d5a975d6..c356a548 100644 --- a/app/src/main/res/layout/list_issues.xml +++ b/app/src/main/res/layout/list_issues.xml @@ -26,23 +26,49 @@ android:contentDescription="@string/generalImgContentText" tools:src="@tools:sample/avatars" /> - + android:orientation="vertical"> + + + + + + + + + + - + android:orientation="vertical"> + + + + + + + + + + N/A Select Default Link Handler Screen Biometric Support + Labels With Text Support + Enabling this will show labels with text in issues and pr lists, default are color dots No more data available