diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java index 3bc16e313..d44053b5b 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java @@ -25,6 +25,7 @@ public class BaseSettings { * Use the icons declared in the preferences created during patching. If no icons or styles are declared then this setting does nothing. */ public static final BooleanSetting SHOW_MENU_ICONS = new BooleanSetting("revanced_show_menu_icons", TRUE, true); + public static final BooleanSetting SETTINGS_DISABLE_BOLD_ICONS = new BooleanSetting("revanced_settings_disable_bold_icons", TRUE, true, parent(SHOW_MENU_ICONS)); public static final BooleanSetting SETTINGS_SEARCH_HISTORY = new BooleanSetting("revanced_settings_search_history", TRUE, true); public static final StringSetting SETTINGS_SEARCH_ENTRIES = new StringSetting("revanced_settings_search_entries", ""); diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/AbstractPreferenceFragment.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/AbstractPreferenceFragment.java index 67fa51fce..d4534a8d5 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/AbstractPreferenceFragment.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/AbstractPreferenceFragment.java @@ -104,9 +104,15 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment { * so all app specific {@link Setting} instances are loaded before this method returns. */ protected void initialize() { - String preferenceResourceName = BaseSettings.SHOW_MENU_ICONS.get() - ? "revanced_prefs_icons" - : "revanced_prefs"; + String preferenceResourceName; + if (BaseSettings.SHOW_MENU_ICONS.get()) { + preferenceResourceName = BaseSettings.SETTINGS_DISABLE_BOLD_ICONS.get() + ? "revanced_prefs_icons" + : "revanced_prefs_icons_bold"; + } else { + preferenceResourceName = "revanced_prefs"; + } + final var identifier = Utils.getResourceIdentifier(ResourceType.XML, preferenceResourceName); if (identifier == 0) return; addPreferencesFromResource(identifier); diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/ToolbarPreferenceFragment.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/ToolbarPreferenceFragment.java index d9bc097ac..9dce15322 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/ToolbarPreferenceFragment.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/ToolbarPreferenceFragment.java @@ -21,6 +21,7 @@ import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.ResourceType; import app.revanced.extension.shared.Utils; import app.revanced.extension.shared.settings.BaseActivityHook; +import app.revanced.extension.shared.settings.BaseSettings; @SuppressWarnings({"deprecation", "NewApi"}) public class ToolbarPreferenceFragment extends AbstractPreferenceFragment { @@ -135,8 +136,10 @@ public class ToolbarPreferenceFragment extends AbstractPreferenceFragment { */ @SuppressLint("UseCompatLoadingForDrawables") public static Drawable getBackButtonDrawable() { - final int backButtonResource = Utils.getResourceIdentifierOrThrow( - ResourceType.DRAWABLE, "revanced_settings_toolbar_arrow_left"); + final int backButtonResource = Utils.getResourceIdentifierOrThrow(ResourceType.DRAWABLE, + BaseSettings.SETTINGS_DISABLE_BOLD_ICONS.get() + ? "revanced_settings_toolbar_arrow_left" + : "revanced_settings_toolbar_arrow_left_bold"); Drawable drawable = Utils.getContext().getResources().getDrawable(backButtonResource); customizeBackButtonDrawable(drawable); return drawable; diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/search/BaseSearchResultsAdapter.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/search/BaseSearchResultsAdapter.java index 87d35ae24..2a5028256 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/search/BaseSearchResultsAdapter.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/search/BaseSearchResultsAdapter.java @@ -1,7 +1,6 @@ package app.revanced.extension.shared.settings.search; import static app.revanced.extension.shared.Utils.getResourceIdentifierOrThrow; -import static app.revanced.extension.shared.settings.search.BaseSearchViewController.DRAWABLE_REVANCED_SETTINGS_SEARCH_ICON; import android.animation.AnimatorSet; import android.animation.ArgbEvaluator; @@ -276,7 +275,7 @@ public abstract class BaseSearchResultsAdapter extends ArrayAdapter searchHistory; private final Activity activity; @@ -324,14 +329,20 @@ public class SearchHistoryManager { View view = inflater.inflate(LAYOUT_REVANCED_PREFERENCE_SEARCH_HISTORY_ITEM, container, false); TextView historyText = view.findViewById(ID_HISTORY_TEXT); - ImageView deleteIcon = view.findViewById(ID_DELETE_ICON); - historyText.setText(query); // Set click listener for main item (select query). view.setOnClickListener(v -> onSelectHistoryItemListener.onSelectHistoryItem(query)); // Set click listener for delete icon. + ImageView deleteIcon = view.findViewById(ID_DELETE_ICON); + + deleteIcon.setImageResource( + BaseSettings.SETTINGS_DISABLE_BOLD_ICONS.get() + ? ID_SEARCH_REMOVE_ICON + : ID_SEARCH_REMOVE_ICON_BOLD + ); + deleteIcon.setOnClickListener(v -> createAndShowDialog( query, str("revanced_settings_search_remove_message"), diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/NavigationButtonsPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/NavigationButtonsPatch.java index eed16380d..76a315659 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/NavigationButtonsPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/NavigationButtonsPatch.java @@ -38,9 +38,6 @@ public final class NavigationButtonsPatch { private static final boolean DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK = Settings.DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK.get(); - private static final boolean NAVIGATION_BAR_DISABLE_BOLD_ICONS - = Settings.NAVIGATION_BAR_DISABLE_BOLD_ICONS.get(); - /** * Injection point. */ @@ -71,13 +68,6 @@ public final class NavigationButtonsPatch { return Settings.NAVIGATION_BAR_ANIMATIONS.get(); } - /** - * Injection point. - */ - public static boolean useBoldIcons(boolean original) { - return !NAVIGATION_BAR_DISABLE_BOLD_ICONS; - } - /** * Injection point. */ diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/theme/ReVancedSettingsIconDynamicDrawable.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/theme/ReVancedSettingsIconDynamicDrawable.java new file mode 100644 index 000000000..722c3dc24 --- /dev/null +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/theme/ReVancedSettingsIconDynamicDrawable.java @@ -0,0 +1,85 @@ +package app.revanced.extension.youtube.patches.theme; + +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import app.revanced.extension.shared.ResourceType; +import app.revanced.extension.shared.Utils; +import app.revanced.extension.shared.settings.BaseSettings; + +/** + * Dynamic drawable that is either the regular or bolded ReVanced preference icon. + * + * This is needed because the YouTube ReVanced preference intent is an AndroidX preference, + * and AndroidX classes are not built into Android which makes programmatically changing + * the preference thru patching overly complex. This solves the problem by using a drawable + * wrapper to dynamically pick which icon drawable to use at runtime. + */ +@SuppressWarnings("unused") +public class ReVancedSettingsIconDynamicDrawable extends Drawable { + + private final Drawable icon; + + public ReVancedSettingsIconDynamicDrawable() { + final int resId = Utils.getResourceIdentifier(ResourceType.DRAWABLE, + BaseSettings.SETTINGS_DISABLE_BOLD_ICONS.get() + ? "revanced_settings_icon" + : "revanced_settings_icon_bold" + ); + + icon = Utils.getContext().getDrawable(resId); + } + + @Override + public void draw(@NonNull Canvas canvas) { + icon.draw(canvas); + } + + @Override + public void setAlpha(int alpha) { + icon.setAlpha(alpha); + } + + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { + icon.setColorFilter(colorFilter); + } + + @Override + public int getOpacity() { + return icon.getOpacity(); + } + + @Override + public int getIntrinsicWidth() { + return icon.getIntrinsicWidth(); + } + + @Override + public int getIntrinsicHeight() { + return icon.getIntrinsicHeight(); + } + + @Override + public void setBounds(int left, int top, int right, int bottom) { + super.setBounds(left, top, right, bottom); + icon.setBounds(left, top, right, bottom); + } + + @Override + public void setBounds(@NonNull Rect bounds) { + super.setBounds(bounds); + icon.setBounds(bounds); + } + + @Override + public void onBoundsChange(@NonNull Rect bounds) { + super.onBoundsChange(bounds); + icon.setBounds(bounds); + } +} \ No newline at end of file diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java index 997b32bf7..c821dd45d 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java @@ -285,7 +285,6 @@ public class Settings extends BaseSettings { public static final BooleanSetting SWITCH_CREATE_WITH_NOTIFICATIONS_BUTTON = new BooleanSetting("revanced_switch_create_with_notifications_button", TRUE, true, "revanced_switch_create_with_notifications_button_user_dialog_message"); public static final BooleanSetting NAVIGATION_BAR_ANIMATIONS = new BooleanSetting("revanced_navigation_bar_animations", FALSE); - public static final BooleanSetting NAVIGATION_BAR_DISABLE_BOLD_ICONS = new BooleanSetting("revanced_navigation_bar_disable_bold_icons", TRUE, true); public static final BooleanSetting DISABLE_TRANSLUCENT_STATUS_BAR = new BooleanSetting("revanced_disable_translucent_status_bar", FALSE, true, "revanced_disable_translucent_status_bar_user_dialog_message"); public static final BooleanSetting DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT = new BooleanSetting("revanced_disable_translucent_navigation_bar_light", FALSE, true); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/YouTubeActivityHook.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/YouTubeActivityHook.java index b6ce40dda..fee16f431 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/YouTubeActivityHook.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/YouTubeActivityHook.java @@ -21,6 +21,9 @@ import app.revanced.extension.youtube.settings.search.YouTubeSearchViewControlle @SuppressWarnings("deprecation") public class YouTubeActivityHook extends BaseActivityHook { + private static final boolean SETTINGS_DISABLE_BOLD_ICONS + = Settings.SETTINGS_DISABLE_BOLD_ICONS.get(); + private static int currentThemeValueOrdinal = -1; // Must initially be a non-valid enum ordinal value. /** @@ -148,4 +151,12 @@ public class YouTubeActivityHook extends BaseActivityHook { public static boolean handleBackPress() { return YouTubeSearchViewController.handleFinish(searchViewController); } + + /** + * Injection point. + */ + @SuppressWarnings("unused") + public static boolean useBoldIcons(boolean original) { + return !SETTINGS_DISABLE_BOLD_ICONS; + } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java index b53a06122..19add5c48 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java @@ -284,7 +284,7 @@ public final class NavigationBar { private static final int fillBellCairoBlack = Utils.getResourceIdentifier(ResourceType.DRAWABLE, // The bold cairo notification filled icon is present, // but YT still has not fixed the icon not associated to the enum. - VersionCheckPatch.IS_20_31_OR_GREATER && !Settings.NAVIGATION_BAR_DISABLE_BOLD_ICONS.get() + VersionCheckPatch.IS_20_31_OR_GREATER && !Settings.SETTINGS_DISABLE_BOLD_ICONS.get() ? "yt_fill_experimental_bell_vd_theme_24" : "revanced_fill_bell_cairo_black_24"); diff --git a/patches/api/patches.api b/patches/api/patches.api index c000e5ba6..919a9d487 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -860,9 +860,10 @@ public final class app/revanced/patches/shared/misc/settings/SettingsPatchKt { public abstract class app/revanced/patches/shared/misc/settings/preference/BasePreference { public static final field Companion Lapp/revanced/patches/shared/misc/settings/preference/BasePreference$Companion; - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getIcon ()Ljava/lang/String; + public final fun getIconBold ()Ljava/lang/String; public final fun getKey ()Ljava/lang/String; public final fun getLayout ()Ljava/lang/String; public final fun getSummaryKey ()Ljava/lang/String; @@ -886,9 +887,10 @@ public abstract class app/revanced/patches/shared/misc/settings/preference/BaseP public abstract class app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$BasePreferenceCollection { public fun ()V - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getIcon ()Ljava/lang/String; + public final fun getIconBold ()Ljava/lang/String; public final fun getKey ()Ljava/lang/String; public final fun getLayout ()Ljava/lang/String; public final fun getPreferences ()Ljava/util/Set; @@ -897,8 +899,8 @@ public abstract class app/revanced/patches/shared/misc/settings/preference/BaseP } public class app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen : app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$BasePreferenceCollection { - public fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;)V - public synthetic fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;)V + public synthetic fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun addPreferences ([Lapp/revanced/patches/shared/misc/settings/preference/BasePreference;)V public final fun getCategories ()Ljava/util/Set; public synthetic fun transform ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreference; @@ -906,8 +908,8 @@ public class app/revanced/patches/shared/misc/settings/preference/BasePreference } public class app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen$Category : app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$BasePreferenceCollection { - public fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V - public synthetic fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V + public synthetic fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun addPreferences ([Lapp/revanced/patches/shared/misc/settings/preference/BasePreference;)V public synthetic fun transform ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreference; public fun transform ()Lapp/revanced/patches/shared/misc/settings/preference/PreferenceCategory; @@ -926,8 +928,8 @@ public final class app/revanced/patches/shared/misc/settings/preference/InputTyp } public final class app/revanced/patches/shared/misc/settings/preference/IntentPreference : app/revanced/patches/shared/misc/settings/preference/BasePreference { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public fun equals (Ljava/lang/Object;)Z public final fun getIntent ()Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent; public fun hashCode ()I @@ -947,8 +949,8 @@ public final class app/revanced/patches/shared/misc/settings/preference/ListPref public fun ()V public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/util/resource/ArrayResource;Lapp/revanced/util/resource/ArrayResource;)V public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/util/resource/ArrayResource;Lapp/revanced/util/resource/ArrayResource;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getEntries ()Lapp/revanced/util/resource/ArrayResource; public final fun getEntriesKey ()Ljava/lang/String; public final fun getEntryValues ()Lapp/revanced/util/resource/ArrayResource; @@ -957,22 +959,22 @@ public final class app/revanced/patches/shared/misc/settings/preference/ListPref } public final class app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference : app/revanced/patches/shared/misc/settings/preference/BasePreference { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getSelectable ()Z public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element; } public class app/revanced/patches/shared/misc/settings/preference/PreferenceCategory : app/revanced/patches/shared/misc/settings/preference/BasePreference { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getPreferences ()Ljava/util/Set; public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element; } public class app/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference : app/revanced/patches/shared/misc/settings/preference/BasePreference { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference$Sorting;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getPreferences ()Ljava/util/Set; public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element; } @@ -1000,8 +1002,8 @@ public final class app/revanced/patches/shared/misc/settings/preference/SummaryT public final class app/revanced/patches/shared/misc/settings/preference/SwitchPreference : app/revanced/patches/shared/misc/settings/preference/BasePreference { public fun ()V - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getSummaryOffKey ()Ljava/lang/String; public final fun getSummaryOnKey ()Ljava/lang/String; public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element; @@ -1009,8 +1011,8 @@ public final class app/revanced/patches/shared/misc/settings/preference/SwitchPr public final class app/revanced/patches/shared/misc/settings/preference/TextPreference : app/revanced/patches/shared/misc/settings/preference/BasePreference { public fun ()V - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/InputType;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/InputType;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/InputType;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/InputType;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getInputType ()Lapp/revanced/patches/shared/misc/settings/preference/InputType; public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element; } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/SettingsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/SettingsPatch.kt index dffff697a..e66fb73dc 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/SettingsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/SettingsPatch.kt @@ -56,8 +56,14 @@ fun settingsPatch ( execute { copyResources( "settings", - ResourceGroup("xml", "revanced_prefs.xml", "revanced_prefs_icons.xml"), - ResourceGroup("menu", "revanced_search_menu.xml"), + ResourceGroup("xml", + "revanced_prefs.xml", + "revanced_prefs_icons.xml", + "revanced_prefs_icons_bold.xml" + ), + ResourceGroup("menu", + "revanced_search_menu.xml" + ), ResourceGroup("drawable", // CustomListPreference resources. "revanced_ic_dialog_alert.xml", @@ -65,8 +71,11 @@ fun settingsPatch ( "revanced_settings_arrow_time.xml", "revanced_settings_custom_checkmark.xml", "revanced_settings_search_icon.xml", + "revanced_settings_search_icon_bold.xml", "revanced_settings_search_remove.xml", + "revanced_settings_search_remove_bold.xml", "revanced_settings_toolbar_arrow_left.xml", + "revanced_settings_toolbar_arrow_left_bold.xml", ), ResourceGroup("layout", "revanced_custom_list_item_checked.xml", @@ -127,19 +136,30 @@ fun settingsPatch ( // there is no easy way to change to the Android default preference layout // after the preference is inflated. // Using two different preference files is the simplest and most robust solution. - fun removeIconsAndLayout(preferences: Collection) { + fun removeIconsAndLayout(preferences: Collection, removeAllIconsAndLayout: Boolean) { preferences.forEach { preference -> preference.icon = null - preference.layout = null + if (removeAllIconsAndLayout) { + preference.iconBold = null + preference.layout = null + } if (preference is PreferenceCategory) { - removeIconsAndLayout(preference.preferences) + removeIconsAndLayout(preference.preferences, removeAllIconsAndLayout) } else if (preference is PreferenceScreenPreference) { - removeIconsAndLayout(preference.preferences) + removeIconsAndLayout(preference.preferences, removeAllIconsAndLayout) } } } - removeIconsAndLayout(preferences) + + // Bold icons. + removeIconsAndLayout(preferences, false) + document("res/xml/revanced_prefs_icons_bold.xml").use { document -> + val revancedPreferenceScreenNode = document.getNode("PreferenceScreen") + preferences.forEach { revancedPreferenceScreenNode.addPreference(it) } + } + + removeIconsAndLayout(preferences, true) document("res/xml/revanced_prefs.xml").use { document -> val revancedPreferenceScreenNode = document.getNode("PreferenceScreen") diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreference.kt index 70542b9b9..b133d962e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreference.kt @@ -20,6 +20,7 @@ abstract class BasePreference( val titleKey: String? = "${key}_title", val summaryKey: String? = "${key}_summary", icon: String? = null, + iconBold: String? = null, layout: String? = null, val tag: String ) { @@ -27,6 +28,9 @@ abstract class BasePreference( var icon: String? = icon internal set + var iconBold: String? = iconBold + internal set + var layout: String? = layout internal set @@ -44,8 +48,9 @@ abstract class BasePreference( key?.let { setAttribute("android:key", it) } titleKey?.let { setAttribute("android:title", "@string/${titleKey}") } summaryKey?.let { addSummary(it) } - icon?.let { - setAttribute("android:icon", it) + + if (icon != null || iconBold != null) { + setAttribute("android:icon", icon ?: iconBold) setAttribute("app:iconSpaceReserved", "true") } layout?.let { setAttribute("android:layout", layout) } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen.kt index 8590e9965..24cfac230 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen.kt @@ -25,11 +25,12 @@ abstract class BasePreferenceScreen( titleKey: String = "${key}_title", private val summaryKey: String? = "${key}_summary", icon: String? = null, + iconBold: String? = null, layout: String? = null, preferences: MutableSet = mutableSetOf(), val categories: MutableSet = mutableSetOf(), private val sorting: Sorting = Sorting.BY_TITLE, - ) : BasePreferenceCollection(key, titleKey, icon, layout, preferences) { + ) : BasePreferenceCollection(key, titleKey, icon, iconBold, layout, preferences) { override fun transform(): PreferenceScreenPreference { return PreferenceScreenPreference( @@ -37,6 +38,7 @@ abstract class BasePreferenceScreen( titleKey, summaryKey, icon, + iconBold, layout, sorting, // Screens and preferences are sorted at runtime by extension code, @@ -61,16 +63,18 @@ abstract class BasePreferenceScreen( key: String? = null, titleKey: String = "${key}_title", icon: String? = null, + iconBold: String? = null, layout: String? = null, preferences: MutableSet = mutableSetOf(), - ) : BasePreferenceCollection(key, titleKey, icon, layout, preferences) { + ) : BasePreferenceCollection(key, titleKey, icon, iconBold, layout, preferences) { override fun transform(): PreferenceCategory { return PreferenceCategory( - key, - titleKey, - icon, - layout, - sorting, + key = key, + titleKey = titleKey, + icon = icon, + iconBold = iconBold, + layout = layout, + sorting = sorting, preferences = preferences, ) } @@ -92,6 +96,7 @@ abstract class BasePreferenceScreen( val key: String? = null, val titleKey: String = "${key}_title", val icon: String? = null, + val iconBold: String? = null, val layout: String? = null, val preferences: MutableSet = mutableSetOf(), ) { diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/IntentPreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/IntentPreference.kt index 2aef02dc8..f0ce9e754 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/IntentPreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/IntentPreference.kt @@ -19,10 +19,11 @@ class IntentPreference( titleKey: String = "${key}_title", summaryKey: String? = "${key}_summary", icon: String? = null, + iconBold: String? = null, layout: String? = null, tag: String = "Preference", val intent: Intent, -) : BasePreference(key, titleKey, summaryKey, icon, layout, tag) { +) : BasePreference(key, titleKey, summaryKey, icon, iconBold, layout, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/ListPreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/ListPreference.kt index 43de07ec2..d1e9da1fd 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/ListPreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/ListPreference.kt @@ -20,11 +20,12 @@ class ListPreference( key: String? = null, titleKey: String = "${key}_title", icon: String? = null, + iconBold: String? = null, layout: String? = null, tag: String = "app.revanced.extension.shared.settings.preference.CustomDialogListPreference", val entriesKey: String? = "${key}_entries", val entryValuesKey: String? = "${key}_entry_values" -) : BasePreference(key, titleKey, null, icon, layout, tag) { +) : BasePreference(key, titleKey, null, icon, iconBold, layout, tag) { var entries: ArrayResource? = null private set var entryValues: ArrayResource? = null diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference.kt index b5ce55489..77f1ba3e8 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference.kt @@ -21,10 +21,11 @@ class NonInteractivePreference( titleKey: String = "${key}_title", summaryKey: String? = "${key}_summary", icon: String? = null, + iconBold: String? = null, layout: String? = null, tag: String = "Preference", val selectable: Boolean = false, -) : BasePreference(key, titleKey, summaryKey, icon, layout, tag) { +) : BasePreference(key, titleKey, summaryKey, icon, iconBold, layout, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { setAttribute("android:selectable", selectable.toString()) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceCategory.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceCategory.kt index ef51eca8c..a1a3724fa 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceCategory.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceCategory.kt @@ -19,11 +19,12 @@ open class PreferenceCategory( key: String? = null, titleKey: String? = "${key}_title", icon: String? = null, + iconBold: String? = null, layout: String? = null, sorting: Sorting = Sorting.BY_TITLE, tag: String = "PreferenceCategory", val preferences: Set -) : BasePreference(sorting.appendSortType(key), titleKey, null, icon, layout, tag) { +) : BasePreference(sorting.appendSortType(key), titleKey, null, icon, iconBold, layout, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference.kt index a37e92947..6f757a1b5 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceScreenPreference.kt @@ -22,6 +22,7 @@ open class PreferenceScreenPreference( titleKey: String = "${key}_title", summaryKey: String? = "${key}_summary", icon: String? = null, + iconBold: String? = null, layout: String? = null, sorting: Sorting = Sorting.BY_TITLE, tag: String = "PreferenceScreen", @@ -32,7 +33,7 @@ open class PreferenceScreenPreference( // or adding new attributes to the attrs.xml file. // Since the key value is not currently used by the extensions, // for now it's much simpler to modify the key to include the sort parameter. -) : BasePreference(sorting.appendSortType(key), titleKey, summaryKey, icon, layout, tag) { +) : BasePreference(sorting.appendSortType(key), titleKey, summaryKey, icon, iconBold, layout, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { preferences.forEach { diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/SwitchPreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/SwitchPreference.kt index df9accd4b..429eac683 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/SwitchPreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/SwitchPreference.kt @@ -20,10 +20,11 @@ class SwitchPreference( titleKey: String = "${key}_title", tag: String = "SwitchPreference", icon: String? = null, + iconBold: String? = null, layout: String? = null, val summaryOnKey: String = "${key}_summary_on", val summaryOffKey: String = "${key}_summary_off" -) : BasePreference(key, titleKey, null, icon, layout, tag) { +) : BasePreference(key, titleKey, null, icon, iconBold, layout, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { addSummary(summaryOnKey, SummaryType.ON) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/TextPreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/TextPreference.kt index 397d4bd43..8c74edaa7 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/TextPreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/TextPreference.kt @@ -20,10 +20,11 @@ class TextPreference( titleKey: String = "${key}_title", summaryKey: String? = "${key}_summary", icon: String? = null, + iconBold: String? = null, layout: String? = null, tag: String = "app.revanced.extension.shared.settings.preference.ResettableEditTextPreference", val inputType: InputType = InputType.TEXT -) : BasePreference(key, titleKey, summaryKey, icon, layout, tag) { +) : BasePreference(key, titleKey, summaryKey, icon, iconBold, layout, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/Fingerprints.kt index 61495eced..4fdae0652 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/Fingerprints.kt @@ -66,13 +66,3 @@ internal val translucentNavigationButtonsSystemFeatureFlagFingerprint by fingerp literal(45632194L) // Translucent system buttons feature flag. ) } - -// Flag is present in 20.23, but icons are missing and forcing bold icons crashes the app. -internal val boldIconsFeatureFlagFingerprint by fingerprint { - accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) - returns("Z") - parameters() - instructions( - literal(45685201L) - ) -} diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt index 72932e8c0..7cc05190c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt @@ -14,7 +14,6 @@ import app.revanced.patches.youtube.misc.navigation.hookNavigationButtonCreated import app.revanced.patches.youtube.misc.navigation.navigationBarHookPatch import app.revanced.patches.youtube.misc.playservice.is_19_25_or_greater import app.revanced.patches.youtube.misc.playservice.is_20_15_or_greater -import app.revanced.patches.youtube.misc.playservice.is_20_31_or_greater import app.revanced.patches.youtube.misc.playservice.versionCheckPatch import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.misc.settings.settingsPatch @@ -73,12 +72,6 @@ val navigationButtonsPatch = bytecodePatch( ) } - if (is_20_31_or_greater) { - PreferenceScreen.GENERAL_LAYOUT.addPreferences( - SwitchPreference("revanced_navigation_bar_disable_bold_icons") - ) - } - PreferenceScreen.GENERAL_LAYOUT.addPreferences( PreferenceScreenPreference( key = "revanced_navigation_buttons_screen", @@ -153,16 +146,5 @@ val navigationButtonsPatch = bytecodePatch( ) } } - - // Bold icon resources are found starting in 20.23, but many YT icons are not bold. - // 20.31 is the first version that seems to have all the bold icons. - if (is_20_31_or_greater) { - boldIconsFeatureFlagFingerprint.let { - it.method.insertLiteralOverride( - it.instructionMatches.first().index, - "$EXTENSION_CLASS_DESCRIPTOR->useBoldIcons(Z)Z" - ) - } - } } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/LithoFilterPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/LithoFilterPatch.kt index d161a2c48..0375f413c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/LithoFilterPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/LithoFilterPatch.kt @@ -212,7 +212,7 @@ val lithoFilterPatch = bytecodePatch( lithoConverterBufferUpbFeatureFlagFingerprint.let { // Procool buffer has changed in 20.22, and UPB native code is now always enabled. if (is_20_22_or_greater) { - Logger.getLogger(this::class.java.name).severe( + Logger.getLogger(this::class.java.name).warning( "\n!!!" + "\n!!! Litho filtering is not yet fully supported when patching 20.22+" + "\n!!! Action buttons, Shorts shelves, and possibly other components cannot be set hidden." + diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/Fingerprints.kt index 4c0554960..1e08b69e6 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/Fingerprints.kt @@ -33,4 +33,15 @@ internal val cairoFragmentConfigFingerprint by fingerprint { literal(45532100L), opcode(Opcode.MOVE_RESULT, 10) ) -} \ No newline at end of file +} + +// Flag is present in 20.23, but bold icons are missing and forcing them crashes the app. +// 20.31 is the first target with all the bold icons present. +internal val boldIconsFeatureFlagFingerprint by fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) + returns("Z") + parameters() + instructions( + literal(45685201L) + ) +} diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt index 8ef5443e0..7f109d54b 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt @@ -12,15 +12,30 @@ import app.revanced.patches.all.misc.resources.addResources import app.revanced.patches.all.misc.resources.addResourcesPatch import app.revanced.patches.shared.misc.mapping.resourceMappingPatch import app.revanced.patches.shared.misc.settings.overrideThemeColors -import app.revanced.patches.shared.misc.settings.preference.* +import app.revanced.patches.shared.misc.settings.preference.BasePreference +import app.revanced.patches.shared.misc.settings.preference.BasePreferenceScreen +import app.revanced.patches.shared.misc.settings.preference.InputType +import app.revanced.patches.shared.misc.settings.preference.IntentPreference +import app.revanced.patches.shared.misc.settings.preference.ListPreference +import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference +import app.revanced.patches.shared.misc.settings.preference.PreferenceCategory +import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference.Sorting +import app.revanced.patches.shared.misc.settings.preference.SwitchPreference +import app.revanced.patches.shared.misc.settings.preference.TextPreference import app.revanced.patches.shared.misc.settings.settingsPatch import app.revanced.patches.youtube.misc.check.checkEnvironmentPatch import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch import app.revanced.patches.youtube.misc.fix.playbackspeed.fixPlaybackSpeedWhilePlayingPatch import app.revanced.patches.youtube.misc.playservice.is_19_34_or_greater +import app.revanced.patches.youtube.misc.playservice.is_20_31_or_greater import app.revanced.patches.youtube.misc.playservice.versionCheckPatch -import app.revanced.util.* +import app.revanced.util.ResourceGroup +import app.revanced.util.addInstructionsAtControlFlowLabel +import app.revanced.util.copyResources +import app.revanced.util.findElementByAttributeValueOrThrow +import app.revanced.util.findInstructionIndicesReversedOrThrow +import app.revanced.util.insertLiteralOverride import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation @@ -44,8 +59,9 @@ private val settingsResourcePatch = resourcePatch { IntentPreference( titleKey = "revanced_settings_title", summaryKey = null, - intent = newIntent("revanced_settings_intent"), + intent = newIntent("revanced_settings_intent") ) to "settings_fragment", + PreferenceCategory( titleKey = "revanced_settings_title", layout = "@layout/preference_group_title", @@ -53,12 +69,12 @@ private val settingsResourcePatch = resourcePatch { IntentPreference( titleKey = "revanced_settings_submenu_title", summaryKey = null, - icon = "@drawable/revanced_settings_icon", + icon = "@drawable/revanced_settings_icon_dynamic", layout = "@layout/preference_with_icon", - intent = newIntent("revanced_settings_intent"), + intent = newIntent("revanced_settings_intent") ) ) - ) to "settings_fragment_cairo", + ) to "settings_fragment_cairo" ), preferences = preferences ) @@ -71,20 +87,35 @@ private val settingsResourcePatch = resourcePatch { copyResources( "settings", ResourceGroup("drawable", + "revanced_settings_icon_dynamic.xml", "revanced_settings_icon.xml", + "revanced_settings_icon_bold.xml", "revanced_settings_screen_00_about.xml", + "revanced_settings_screen_00_about_bold.xml", "revanced_settings_screen_01_ads.xml", + "revanced_settings_screen_01_ads_bold.xml", "revanced_settings_screen_02_alt_thumbnails.xml", + "revanced_settings_screen_02_alt_thumbnails_bold.xml", "revanced_settings_screen_03_feed.xml", + "revanced_settings_screen_03_feed_bold.xml", "revanced_settings_screen_04_general.xml", + "revanced_settings_screen_04_general_bold.xml", "revanced_settings_screen_05_player.xml", + "revanced_settings_screen_05_player_bold.xml", "revanced_settings_screen_06_shorts.xml", + "revanced_settings_screen_06_shorts_bold.xml", "revanced_settings_screen_07_seekbar.xml", + "revanced_settings_screen_07_seekbar_bold.xml", "revanced_settings_screen_08_swipe_controls.xml", + "revanced_settings_screen_08_swipe_controls_bold.xml", "revanced_settings_screen_09_return_youtube_dislike.xml", + "revanced_settings_screen_09_return_youtube_dislike_bold.xml", "revanced_settings_screen_10_sponsorblock.xml", + "revanced_settings_screen_10_sponsorblock_bold.xml", "revanced_settings_screen_11_misc.xml", + "revanced_settings_screen_11_misc_bold.xml", "revanced_settings_screen_12_video.xml", + "revanced_settings_screen_12_video_bold.xml", ) ) @@ -158,6 +189,7 @@ val settingsPatch = bytecodePatch( preferences += NonInteractivePreference( key = "revanced_settings_screen_00_about", icon = "@drawable/revanced_settings_screen_00_about", + iconBold = "@drawable/revanced_settings_screen_00_about_bold", layout = "@layout/preference_with_icon", summaryKey = null, tag = "app.revanced.extension.shared.settings.preference.ReVancedAboutPreference", @@ -172,7 +204,23 @@ val settingsPatch = bytecodePatch( PreferenceScreen.GENERAL_LAYOUT.addPreferences( SwitchPreference("revanced_settings_search_history"), - SwitchPreference("revanced_show_menu_icons") + ) + + + PreferenceScreen.GENERAL_LAYOUT.addPreferences( + if (is_20_31_or_greater) { + PreferenceCategory( + titleKey = null, + sorting = Sorting.UNSORTED, + tag = "app.revanced.extension.shared.settings.preference.NoTitlePreferenceCategory", + preferences = setOf( + SwitchPreference("revanced_show_menu_icons"), + SwitchPreference("revanced_settings_disable_bold_icons") + ) + ) + } else { + SwitchPreference("revanced_show_menu_icons") + } ) PreferenceScreen.MISC.addPreferences( @@ -208,6 +256,17 @@ val settingsPatch = bytecodePatch( "$YOUTUBE_ACTIVITY_HOOK_CLASS_DESCRIPTOR->useCairoSettingsFragment(Z)Z" ) + // Bold icon resources are found starting in 20.23, but many YT icons are not bold. + // 20.31 is the first version that seems to have all the bold icons. + if (is_20_31_or_greater) { + boldIconsFeatureFlagFingerprint.let { + it.method.insertLiteralOverride( + it.instructionMatches.first().index, + "$YOUTUBE_ACTIVITY_HOOK_CLASS_DESCRIPTOR->useBoldIcons(Z)Z" + ) + } + } + modifyActivityForSettingsInjection( licenseActivityOnCreateFingerprint.classDef, licenseActivityOnCreateFingerprint.method, @@ -315,12 +374,14 @@ object PreferenceScreen : BasePreferenceScreen() { key = "revanced_settings_screen_01_ads", summaryKey = null, icon = "@drawable/revanced_settings_screen_01_ads", + iconBold = "@drawable/revanced_settings_screen_01_ads_bold", layout = "@layout/preference_with_icon", ) val ALTERNATIVE_THUMBNAILS = Screen( key = "revanced_settings_screen_02_alt_thumbnails", summaryKey = null, icon = "@drawable/revanced_settings_screen_02_alt_thumbnails", + iconBold = "@drawable/revanced_settings_screen_02_alt_thumbnails_bold", layout = "@layout/preference_with_icon", sorting = Sorting.UNSORTED, ) @@ -328,36 +389,42 @@ object PreferenceScreen : BasePreferenceScreen() { key = "revanced_settings_screen_03_feed", summaryKey = null, icon = "@drawable/revanced_settings_screen_03_feed", + iconBold = "@drawable/revanced_settings_screen_03_feed_bold", layout = "@layout/preference_with_icon", ) val GENERAL_LAYOUT = Screen( key = "revanced_settings_screen_04_general", summaryKey = null, icon = "@drawable/revanced_settings_screen_04_general", + iconBold = "@drawable/revanced_settings_screen_04_general_bold", layout = "@layout/preference_with_icon", ) val PLAYER = Screen( key = "revanced_settings_screen_05_player", summaryKey = null, icon = "@drawable/revanced_settings_screen_05_player", + iconBold = "@drawable/revanced_settings_screen_05_player_bold", layout = "@layout/preference_with_icon", ) val SHORTS = Screen( key = "revanced_settings_screen_06_shorts", summaryKey = null, icon = "@drawable/revanced_settings_screen_06_shorts", + iconBold = "@drawable/revanced_settings_screen_06_shorts_bold", layout = "@layout/preference_with_icon", ) val SEEKBAR = Screen( key = "revanced_settings_screen_07_seekbar", summaryKey = null, icon = "@drawable/revanced_settings_screen_07_seekbar", + iconBold = "@drawable/revanced_settings_screen_07_seekbar_bold", layout = "@layout/preference_with_icon", ) val SWIPE_CONTROLS = Screen( key = "revanced_settings_screen_08_swipe_controls", summaryKey = null, icon = "@drawable/revanced_settings_screen_08_swipe_controls", + iconBold = "@drawable/revanced_settings_screen_08_swipe_controls_bold", layout = "@layout/preference_with_icon", sorting = Sorting.UNSORTED, ) @@ -365,6 +432,7 @@ object PreferenceScreen : BasePreferenceScreen() { key = "revanced_settings_screen_09_return_youtube_dislike", summaryKey = null, icon = "@drawable/revanced_settings_screen_09_return_youtube_dislike", + iconBold = "@drawable/revanced_settings_screen_09_return_youtube_dislike_bold", layout = "@layout/preference_with_icon", sorting = Sorting.UNSORTED, ) @@ -372,6 +440,7 @@ object PreferenceScreen : BasePreferenceScreen() { key = "revanced_settings_screen_10_sponsorblock", summaryKey = null, icon = "@drawable/revanced_settings_screen_10_sponsorblock", + iconBold = "@drawable/revanced_settings_screen_10_sponsorblock_bold", layout = "@layout/preference_with_icon", sorting = Sorting.UNSORTED, ) @@ -379,12 +448,14 @@ object PreferenceScreen : BasePreferenceScreen() { key = "revanced_settings_screen_11_misc", summaryKey = null, icon = "@drawable/revanced_settings_screen_11_misc", + iconBold = "@drawable/revanced_settings_screen_11_misc_bold", layout = "@layout/preference_with_icon", ) val VIDEO = Screen( key = "revanced_settings_screen_12_video", summaryKey = null, icon = "@drawable/revanced_settings_screen_12_video", + iconBold = "@drawable/revanced_settings_screen_12_video_bold", layout = "@layout/preference_with_icon", sorting = Sorting.BY_KEY, ) diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index a891e976b..143f4be6c 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -82,6 +82,9 @@ Second \"item\" text" Show settings search history Settings search history is shown Settings search history is not shown + Disable bold icons + Icons are not bold + Icons are bold Show ReVanced setting icons Setting icons are shown Setting icons are not shown @@ -792,9 +795,6 @@ If changing this setting does not take effect, try switching to Incognito mode." Enable navigation bar animations Navigation transitions are animated Navigation transitions are not animated - Disable bold icons - Icons are not bold - Icons are bold Disable translucent status bar Status bar is opaque Status bar is opaque or translucent diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_icon_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_icon_bold.xml new file mode 100644 index 000000000..c929e507d --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_icon_bold.xml @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_icon_dynamic.xml b/patches/src/main/resources/settings/drawable/revanced_settings_icon_dynamic.xml new file mode 100644 index 000000000..69b5f99c8 --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_icon_dynamic.xml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_screen_00_about_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_screen_00_about_bold.xml new file mode 100644 index 000000000..b931198cf --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_screen_00_about_bold.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_screen_01_ads_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_screen_01_ads_bold.xml new file mode 100644 index 000000000..f341714f3 --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_screen_01_ads_bold.xml @@ -0,0 +1,26 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_screen_02_alt_thumbnails_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_screen_02_alt_thumbnails_bold.xml new file mode 100644 index 000000000..9854f09fc --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_screen_02_alt_thumbnails_bold.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_screen_03_feed_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_screen_03_feed_bold.xml new file mode 100644 index 000000000..edce57018 --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_screen_03_feed_bold.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_screen_04_general_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_screen_04_general_bold.xml new file mode 100644 index 000000000..5a14a69b5 --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_screen_04_general_bold.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_screen_05_player_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_screen_05_player_bold.xml new file mode 100644 index 000000000..fde9e7cea --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_screen_05_player_bold.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_screen_06_shorts_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_screen_06_shorts_bold.xml new file mode 100644 index 000000000..2b616d939 --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_screen_06_shorts_bold.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_screen_07_seekbar_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_screen_07_seekbar_bold.xml new file mode 100644 index 000000000..12fe4e8b7 --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_screen_07_seekbar_bold.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_screen_08_swipe_controls_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_screen_08_swipe_controls_bold.xml new file mode 100644 index 000000000..12fe4e8b7 --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_screen_08_swipe_controls_bold.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_screen_09_return_youtube_dislike_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_screen_09_return_youtube_dislike_bold.xml new file mode 100644 index 000000000..d35c3fb7b --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_screen_09_return_youtube_dislike_bold.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_screen_10_sponsorblock_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_screen_10_sponsorblock_bold.xml new file mode 100644 index 000000000..08e788ef5 --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_screen_10_sponsorblock_bold.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_screen_11_misc_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_screen_11_misc_bold.xml new file mode 100644 index 000000000..ac63c495f --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_screen_11_misc_bold.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_screen_12_video_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_screen_12_video_bold.xml new file mode 100644 index 000000000..22a7d6feb --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_screen_12_video_bold.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_search_icon_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_search_icon_bold.xml new file mode 100644 index 000000000..22fcf34b9 --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_search_icon_bold.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_search_remove_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_search_remove_bold.xml new file mode 100644 index 000000000..3cb5d7d78 --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_search_remove_bold.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/drawable/revanced_settings_toolbar_arrow_left_bold.xml b/patches/src/main/resources/settings/drawable/revanced_settings_toolbar_arrow_left_bold.xml new file mode 100644 index 000000000..f93ab850c --- /dev/null +++ b/patches/src/main/resources/settings/drawable/revanced_settings_toolbar_arrow_left_bold.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/settings/xml/revanced_prefs_icons_bold.xml b/patches/src/main/resources/settings/xml/revanced_prefs_icons_bold.xml new file mode 100644 index 000000000..66304a5c0 --- /dev/null +++ b/patches/src/main/resources/settings/xml/revanced_prefs_icons_bold.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file