summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Calvin Pan <calvinpan@google.com> 2025-03-17 07:11:11 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-17 07:11:11 -0700
commit5d2941824ce5b4f5ce256c637e9070b088bc192c (patch)
tree106fa701d0f169d32199797c94d9f3dc0ec7e252
parente67135171f023f995bf2e5d79ea9adbe52ead39d (diff)
parentbcdcae5f629a5efca2ff0e0726f16eb5ffb13cf5 (diff)
Merge "Filter duplicate language code and script in system locale restoration" into main
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java17
-rw-r--r--packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java6
2 files changed, 21 insertions, 2 deletions
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index ed11e12c32ff..2273b4f81eea 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -54,6 +54,7 @@ import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManage
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
@@ -650,6 +651,10 @@ public class SettingsHelper {
* e.g. current locale "en-US,zh-CN" and backup locale "ja-JP,zh-Hans-CN,en-US" are merged to
* "en-US,zh-CN,ja-JP".
*
+ * - Same language codes and scripts are dropped.
+ * e.g. current locale "en-US, zh-Hans-TW" and backup locale "en-UK, en-GB, zh-Hans-HK" are
+ * merged to "en-US, zh-Hans-TW".
+ *
* - Unsupported locales are dropped.
* e.g. current locale "en-US" and backup locale "ja-JP,zh-CN" but the supported locales
* are "en-US,zh-CN", the merged locale list is "en-US,zh-CN".
@@ -683,13 +688,23 @@ public class SettingsHelper {
filtered.add(locale);
}
+ final HashSet<String> existingLanguageAndScript = new HashSet<>();
for (int i = 0; i < restore.size(); i++) {
final Locale restoredLocaleWithExtension = copyExtensionToTargetLocale(restoredLocale,
getFilteredLocale(restore.get(i), allLocales));
+
if (restoredLocaleWithExtension != null) {
- filtered.add(restoredLocaleWithExtension);
+ String language = restoredLocaleWithExtension.getLanguage();
+ String script = restoredLocaleWithExtension.getScript();
+
+ String restoredLanguageAndScript =
+ script == null ? language : language + "-" + script;
+ if (existingLanguageAndScript.add(restoredLanguageAndScript)) {
+ filtered.add(restoredLocaleWithExtension);
+ }
}
}
+
if (filtered.size() == current.size()) {
return current; // Nothing added to current locale list.
}
diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java
index 40654b0e2f37..48c778542d66 100644
--- a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java
@@ -388,7 +388,11 @@ public class SettingsHelperTest {
LocaleList.forLanguageTags("zh-Hant-TW"), // current
new String[] { "fa-Arab-AF-u-nu-latn", "zh-Hant-TW" })); // supported
-
+ assertEquals(LocaleList.forLanguageTags("en-US,zh-Hans-TW"),
+ SettingsHelper.resolveLocales(
+ LocaleList.forLanguageTags("en-UK,en-GB,zh-Hans-HK"), // restore
+ LocaleList.forLanguageTags("en-US,zh-Hans-TW"), // current
+ new String[] { "en-US,zh-Hans-TW,en-UK,en-GB,zh-Hans-HK" })); // supported
}
@Test