From ff85d490887de64eb6c6fd42e385a3e75969ff10 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 26 Oct 2024 17:49:23 -0400 Subject: [PATCH] fix(YouTube - Settings): Use multiline preference title for localized languages (#3821) --- .../app/revanced/extension/shared/Utils.java | 29 +++++++++++++++++++ .../AbstractPreferenceFragment.java | 8 +++-- .../youtube/patches/MiniplayerPatch.java | 12 +------- .../patches/components/LithoFilterPatch.java | 1 - 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/extensions/shared/src/main/java/app/revanced/extension/shared/Utils.java b/extensions/shared/src/main/java/app/revanced/extension/shared/Utils.java index 45cf5616e..aed89670c 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/shared/Utils.java +++ b/extensions/shared/src/main/java/app/revanced/extension/shared/Utils.java @@ -722,6 +722,35 @@ public class Utils { } } + /** + * Set all preferences to multiline titles if the device is not using an English variant. + * The English strings are heavily scrutinized and all titles fit on screen + * except 2 or 3 preference strings and those do not affect readability. + * + * Allowing multiline for those 2 or 3 English preferences looks weird and out of place, + * and visually it looks better to clip the text and keep all titles 1 line. + */ + @SuppressWarnings("deprecation") + public static void setPreferenceTitlesToMultiLineIfNeeded(PreferenceGroup group) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + return; + } + + String deviceLanguage = Utils.getContext().getResources().getConfiguration().locale.getLanguage(); + if (deviceLanguage.equals("en")) { + return; + } + + for (int i = 0, prefCount = group.getPreferenceCount(); i < prefCount; i++) { + Preference pref = group.getPreference(i); + pref.setSingleLineTitle(false); + + if (pref instanceof PreferenceGroup) { + setPreferenceTitlesToMultiLineIfNeeded((PreferenceGroup) pref); + } + } + } + /** * If {@link Fragment} uses [Android library] rather than [AndroidX library], * the Dialog theme corresponding to [Android library] should be used. diff --git a/extensions/shared/src/main/java/app/revanced/extension/shared/settings/preference/AbstractPreferenceFragment.java b/extensions/shared/src/main/java/app/revanced/extension/shared/settings/preference/AbstractPreferenceFragment.java index 3c1ad706a..b7be999ff 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/shared/settings/preference/AbstractPreferenceFragment.java +++ b/extensions/shared/src/main/java/app/revanced/extension/shared/settings/preference/AbstractPreferenceFragment.java @@ -17,7 +17,7 @@ import app.revanced.extension.shared.settings.Setting; import static app.revanced.extension.shared.StringRef.str; -@SuppressWarnings({"unused", "deprecation"}) +@SuppressWarnings("deprecation") public abstract class AbstractPreferenceFragment extends PreferenceFragment { /** * Indicates that if a preference changes, @@ -80,10 +80,12 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment { */ protected void initialize() { final var identifier = Utils.getResourceIdentifier("revanced_prefs", "xml"); - if (identifier == 0) return; addPreferencesFromResource(identifier); - Utils.sortPreferenceGroups(getPreferenceScreen()); + + PreferenceScreen screen = getPreferenceScreen(); + Utils.sortPreferenceGroups(screen); + Utils.setPreferenceTitlesToMultiLineIfNeeded(screen); } private void showSettingUserDialogConfirmation(SwitchPreference switchPref, BooleanSetting setting) { diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/MiniplayerPatch.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/MiniplayerPatch.java index 782ca2540..e11cfffa8 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/MiniplayerPatch.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/MiniplayerPatch.java @@ -137,7 +137,7 @@ public final class MiniplayerPatch { MiniplayerType type = Settings.MINIPLAYER_TYPE.get(); return (!IS_19_20_OR_GREATER && (type == MODERN_1 || type == MODERN_3)) || (!IS_19_26_OR_GREATER && type == MODERN_1 - && !Settings.MINIPLAYER_DOUBLE_TAP_ACTION.get() && !Settings.MINIPLAYER_DRAG_AND_DROP.get()) + && !Settings.MINIPLAYER_DOUBLE_TAP_ACTION.get() && !Settings.MINIPLAYER_DRAG_AND_DROP.get()) || (IS_19_29_OR_GREATER && type == MODERN_3); } } @@ -196,8 +196,6 @@ public final class MiniplayerPatch { * Injection point. */ public static boolean getModernFeatureFlagsActiveOverride(boolean original) { - if (original) Logger.printDebug(() -> "getModernFeatureFlagsActiveOverride original: " + original); - if (CURRENT_TYPE == ORIGINAL) { return original; } @@ -209,8 +207,6 @@ public final class MiniplayerPatch { * Injection point. */ public static boolean enableMiniplayerDoubleTapAction(boolean original) { - if (original) Logger.printDebug(() -> "enableMiniplayerDoubleTapAction original: " + true); - if (CURRENT_TYPE == ORIGINAL) { return original; } @@ -222,8 +218,6 @@ public final class MiniplayerPatch { * Injection point. */ public static boolean enableMiniplayerDragAndDrop(boolean original) { - if (original) Logger.printDebug(() -> "enableMiniplayerDragAndDrop original: " + true); - if (CURRENT_TYPE == ORIGINAL) { return original; } @@ -236,8 +230,6 @@ public final class MiniplayerPatch { * Injection point. */ public static boolean setRoundedCorners(boolean original) { - if (original) Logger.printDebug(() -> "setRoundedCorners original: " + true); - if (CURRENT_TYPE.isModern()) { return MINIPLAYER_ROUNDED_CORNERS_ENABLED; } @@ -271,8 +263,6 @@ public final class MiniplayerPatch { * Injection point. */ public static boolean setDropShadow(boolean original) { - if (original) Logger.printDebug(() -> "setViewElevation original: " + true); - return original; } diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/components/LithoFilterPatch.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/components/LithoFilterPatch.java index 0e7ac8ab4..1edd27509 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/components/LithoFilterPatch.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/components/LithoFilterPatch.java @@ -155,7 +155,6 @@ public final class LithoFilterPatch { // Potentially the buffer may have been null or never set up until now. // Use an empty buffer so the litho id/path filters still work correctly. if (protobufBuffer == null) { - Logger.printDebug(() -> "Proto buffer is null, using an empty buffer array"); bufferArray = EMPTY_BYTE_ARRAY; } else if (!protobufBuffer.hasArray()) { Logger.printDebug(() -> "Proto buffer does not have an array, using an empty buffer array");