Skip to content

Commit 20abac5

Browse files
fix(YouTube): Better handle incorrect duplicate translations
1 parent d519a8c commit 20abac5

File tree

2 files changed

+29
-13
lines changed

2 files changed

+29
-13
lines changed

extensions/shared/library/src/main/java/app/revanced/extension/shared/Utils.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package app.revanced.extension.shared;
22

33
import android.annotation.SuppressLint;
4-
import android.app.*;
4+
import android.app.Activity;
5+
import android.app.AlertDialog;
6+
import android.app.Dialog;
7+
import android.app.DialogFragment;
8+
import android.app.Fragment;
59
import android.content.Context;
610
import android.content.Intent;
711
import android.content.pm.ApplicationInfo;
@@ -18,6 +22,7 @@
1822
import android.preference.Preference;
1923
import android.preference.PreferenceGroup;
2024
import android.preference.PreferenceScreen;
25+
import android.util.Pair;
2126
import android.view.View;
2227
import android.view.ViewGroup;
2328
import android.view.ViewParent;
@@ -738,9 +743,9 @@ public static String removePunctuationToLowercase(@Nullable CharSequence origina
738743
* then the preferences are left unsorted.
739744
*/
740745
@SuppressWarnings("deprecation")
741-
public static void sortPreferenceGroups(@NonNull PreferenceGroup group) {
746+
public static void sortPreferenceGroups(PreferenceGroup group) {
742747
Sort groupSort = Sort.fromKey(group.getKey(), Sort.UNSORTED);
743-
SortedMap<String, Preference> preferences = new TreeMap<>();
748+
List<Pair<String, Preference>> preferences = new ArrayList<>();
744749

745750
for (int i = 0, prefCount = group.getPreferenceCount(); i < prefCount; i++) {
746751
Preference preference = group.getPreference(i);
@@ -769,17 +774,21 @@ public static void sortPreferenceGroups(@NonNull PreferenceGroup group) {
769774
throw new IllegalStateException();
770775
}
771776

772-
preferences.put(sortValue, preference);
777+
preferences.add(new Pair<>(sortValue, preference));
773778
}
774779

780+
Collections.sort(preferences, (pair1, pair2)
781+
-> pair1.first.compareToIgnoreCase(pair2.first));
782+
775783
int index = 0;
776-
for (Preference pref : preferences.values()) {
784+
for (Pair<String, Preference> pair : preferences) {
777785
int order = index++;
786+
Preference pref = pair.second;
778787

779788
// Move any screens, intents, and the one off About preference to the top.
780789
if (pref instanceof PreferenceScreen || pref instanceof ReVancedAboutPreference
781790
|| pref.getIntent() != null) {
782-
// Arbitrary high number.
791+
// Any arbitrary large number.
783792
order -= 1000;
784793
}
785794

extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/SortedListPreference.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66
import android.util.Pair;
77

88
import java.util.ArrayList;
9+
import java.util.Collections;
910
import java.util.List;
10-
import java.util.SortedMap;
11-
import java.util.TreeMap;
1211

1312
import app.revanced.extension.shared.Utils;
1413

@@ -46,17 +45,24 @@ public void sortEntryAndValues(int firstEntriesToPreserve) {
4645
}
4746

4847
List<Pair<CharSequence, CharSequence>> firstEntries = new ArrayList<>(firstEntriesToPreserve);
49-
SortedMap<String, Pair<CharSequence, CharSequence>> lastEntries = new TreeMap<>();
48+
49+
// Android does not have a triple class like Kotlin, So instead use a nested pair.
50+
// Cannot easily use a SortedMap, because if two entries incorrectly have
51+
// identical names then the duplicates entries are not preserved.
52+
List<Pair<String, Pair<CharSequence, CharSequence>>> lastEntries = new ArrayList<>();
5053

5154
for (int i = 0; i < entrySize; i++) {
5255
Pair<CharSequence, CharSequence> pair = new Pair<>(entries[i], entryValues[i]);
5356
if (i < firstEntriesToPreserve) {
5457
firstEntries.add(pair);
5558
} else {
56-
lastEntries.put(Utils.removePunctuationToLowercase(pair.first), pair);
59+
lastEntries.add(new Pair<>(Utils.removePunctuationToLowercase(pair.first), pair));
5760
}
5861
}
5962

63+
Collections.sort(lastEntries, (pair1, pair2)
64+
-> pair1.first.compareToIgnoreCase(pair2.first));
65+
6066
CharSequence[] sortedEntries = new CharSequence[entrySize];
6167
CharSequence[] sortedEntryValues = new CharSequence[entrySize];
6268

@@ -67,9 +73,10 @@ public void sortEntryAndValues(int firstEntriesToPreserve) {
6773
i++;
6874
}
6975

70-
for (Pair<CharSequence, CharSequence> pair : lastEntries.values()) {
71-
sortedEntries[i] = pair.first;
72-
sortedEntryValues[i] = pair.second;
76+
for (Pair<String, Pair<CharSequence, CharSequence>> outer : lastEntries) {
77+
Pair<CharSequence, CharSequence> inner = outer.second;
78+
sortedEntries[i] = inner.first;
79+
sortedEntryValues[i] = inner.second;
7380
i++;
7481
}
7582

0 commit comments

Comments
 (0)