From 20abac52121fbecb65d87d0982f3380e1cf4e20e Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Thu, 22 May 2025 21:20:01 +0200 Subject: [PATCH] fix(YouTube): Better handle incorrect duplicate translations --- .../app/revanced/extension/shared/Utils.java | 21 +++++++++++++------ .../preference/SortedListPreference.java | 21 ++++++++++++------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/Utils.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/Utils.java index 3cb809a2d..46aba8191 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/Utils.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/Utils.java @@ -1,7 +1,11 @@ package app.revanced.extension.shared; import android.annotation.SuppressLint; -import android.app.*; +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.app.Fragment; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; @@ -18,6 +22,7 @@ import android.os.Looper; import android.preference.Preference; import android.preference.PreferenceGroup; import android.preference.PreferenceScreen; +import android.util.Pair; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; @@ -738,9 +743,9 @@ public class Utils { * then the preferences are left unsorted. */ @SuppressWarnings("deprecation") - public static void sortPreferenceGroups(@NonNull PreferenceGroup group) { + public static void sortPreferenceGroups(PreferenceGroup group) { Sort groupSort = Sort.fromKey(group.getKey(), Sort.UNSORTED); - SortedMap preferences = new TreeMap<>(); + List> preferences = new ArrayList<>(); for (int i = 0, prefCount = group.getPreferenceCount(); i < prefCount; i++) { Preference preference = group.getPreference(i); @@ -769,17 +774,21 @@ public class Utils { throw new IllegalStateException(); } - preferences.put(sortValue, preference); + preferences.add(new Pair<>(sortValue, preference)); } + Collections.sort(preferences, (pair1, pair2) + -> pair1.first.compareToIgnoreCase(pair2.first)); + int index = 0; - for (Preference pref : preferences.values()) { + for (Pair pair : preferences) { int order = index++; + Preference pref = pair.second; // Move any screens, intents, and the one off About preference to the top. if (pref instanceof PreferenceScreen || pref instanceof ReVancedAboutPreference || pref.getIntent() != null) { - // Arbitrary high number. + // Any arbitrary large number. order -= 1000; } diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/SortedListPreference.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/SortedListPreference.java index c5d166a7f..469319539 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/SortedListPreference.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/SortedListPreference.java @@ -6,9 +6,8 @@ import android.util.AttributeSet; import android.util.Pair; import java.util.ArrayList; +import java.util.Collections; import java.util.List; -import java.util.SortedMap; -import java.util.TreeMap; import app.revanced.extension.shared.Utils; @@ -46,17 +45,24 @@ public class SortedListPreference extends ListPreference { } List> firstEntries = new ArrayList<>(firstEntriesToPreserve); - SortedMap> lastEntries = new TreeMap<>(); + + // Android does not have a triple class like Kotlin, So instead use a nested pair. + // Cannot easily use a SortedMap, because if two entries incorrectly have + // identical names then the duplicates entries are not preserved. + List>> lastEntries = new ArrayList<>(); for (int i = 0; i < entrySize; i++) { Pair pair = new Pair<>(entries[i], entryValues[i]); if (i < firstEntriesToPreserve) { firstEntries.add(pair); } else { - lastEntries.put(Utils.removePunctuationToLowercase(pair.first), pair); + lastEntries.add(new Pair<>(Utils.removePunctuationToLowercase(pair.first), pair)); } } + Collections.sort(lastEntries, (pair1, pair2) + -> pair1.first.compareToIgnoreCase(pair2.first)); + CharSequence[] sortedEntries = new CharSequence[entrySize]; CharSequence[] sortedEntryValues = new CharSequence[entrySize]; @@ -67,9 +73,10 @@ public class SortedListPreference extends ListPreference { i++; } - for (Pair pair : lastEntries.values()) { - sortedEntries[i] = pair.first; - sortedEntryValues[i] = pair.second; + for (Pair> outer : lastEntries) { + Pair inner = outer.second; + sortedEntries[i] = inner.first; + sortedEntryValues[i] = inner.second; i++; }