From ffd933c6734274cdde5aaec0159b67f173f9228c Mon Sep 17 00:00:00 2001 From: MarcaD <152095496+MarcaDian@users.noreply.github.com> Date: Wed, 24 Sep 2025 16:50:46 +0300 Subject: [PATCH] fix(YouTube - SponsorBlock): Show category color in create new segment menu (#5987) --- .../sponsorblock/SponsorBlockUtils.java | 6 ++-- .../sponsorblock/objects/SegmentCategory.java | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/SponsorBlockUtils.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/SponsorBlockUtils.java index cf74549e4..0cd58eb97 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/SponsorBlockUtils.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/SponsorBlockUtils.java @@ -96,7 +96,7 @@ public class SponsorBlockUtils { SegmentCategory[] categories = SegmentCategory.categoriesWithoutHighlights(); CharSequence[] titles = new CharSequence[categories.length]; for (int i = 0, length = categories.length; i < length; i++) { - titles[i] = categories[i].getTitle().toString(); + titles[i] = categories[i].getTitleWithColorDot(); } newUserCreatedSegmentCategory = null; @@ -336,8 +336,8 @@ public class SponsorBlockUtils { Utils.verifyOnMainThread(); final SegmentCategory[] values = SegmentCategory.categoriesWithoutHighlights(); CharSequence[] titles = new CharSequence[values.length]; - for (int i = 0, length = values.length; i < length; i++) { - titles[i] = values[i].getTitle().toString(); + for (int i = 0; i < values.length; i++) { + titles[i] = values[i].getTitleWithColorDot(); } new AlertDialog.Builder(context) diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/objects/SegmentCategory.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/objects/SegmentCategory.java index ce7ef84ed..a5adc9c10 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/objects/SegmentCategory.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/objects/SegmentCategory.java @@ -5,8 +5,12 @@ import static app.revanced.extension.youtube.settings.Settings.*; import android.graphics.Color; import android.graphics.Paint; +import android.text.Spannable; +import android.text.SpannableString; import android.text.TextUtils; +import android.text.style.ForegroundColorSpan; +import android.text.style.RelativeSizeSpan; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -83,6 +87,8 @@ public enum SegmentCategory { MUSIC_OFFTOPIC, }; + public static final String COLOR_DOT_STRING = "⬤"; + public static final float CATEGORY_DEFAULT_OPACITY = 0.7f; private static final Map mValuesMap = new HashMap<>(2 * categoriesWithoutUnsubmitted.length); @@ -324,6 +330,32 @@ public enum SegmentCategory { return title; } + /** + * Creates a {@link SpannableString} that starts with a colored dot followed by the provided text. + */ + private static SpannableString getCategoryColorDotSpan(String text, @ColorInt int color) { + SpannableString dotSpan = new SpannableString(COLOR_DOT_STRING + text); + dotSpan.setSpan(new ForegroundColorSpan(color), 0, 1, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + dotSpan.setSpan(new RelativeSizeSpan(1.5f), 0, 1, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + return dotSpan; + } + + /** + * Returns the category title with a colored dot. + */ + public SpannableString getTitleWithColorDot(@ColorInt int categoryColor) { + return getCategoryColorDotSpan(" " + title, categoryColor); + } + + /** + * Returns the category title with a colored dot. + */ + public SpannableString getTitleWithColorDot() { + return getTitleWithColorDot(color); + } + /** * Gets the skip button text based on segment position. *