Change locale comparison API
Bug: 209729853
Test: atest AppLocaleDetailsTest
Change-Id: I1568fe9474e473ac6d3fb81dcf9edf9ba7434e85
diff --git a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
index 742ce04..2ba6fdc 100644
--- a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
+++ b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
@@ -237,18 +237,28 @@
mSuggestedLocales.add(appLocale);
}
// 2nd locale in suggested languages group.
- if (simLocale != null && !simLocale.equals(appLocale)) {
+ if (simLocale != null && !compareLocale(simLocale, appLocale)) {
mSuggestedLocales.add(simLocale);
}
// Other locales in suggested languages group.
for (int i = 0; i < currentSystemLocales.size(); i++) {
Locale locale = currentSystemLocales.get(i);
- if (!locale.equals(appLocale) && !locale.equals(simLocale)) {
+ if (!compareLocale(locale, appLocale) && !compareLocale(locale, simLocale)) {
mSuggestedLocales.add(locale);
}
}
}
+ static boolean compareLocale(Locale source, Locale target) {
+ if (source == null && target == null) {
+ return true;
+ } else if (source != null && target != null) {
+ return LocaleList.matchesLanguageAndScript(source, target);
+ } else {
+ return false;
+ }
+ }
+
@VisibleForTesting
void handleSupportedLocales() {
//TODO Waiting for PackageManager api
diff --git a/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java b/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java
index a97656c..e185354 100644
--- a/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java
+++ b/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java
@@ -152,6 +152,26 @@
assertFalse(helper.getSupportedLocales().isEmpty());
}
+ @Test
+ @UiThreadTest
+ public void handleAllLocalesData_compareLocale() {
+ //Use LocaleList.matchScore() to compare two locales.
+ assertTrue(DummyAppLocaleDetailsHelper.compareLocale(Locale.forLanguageTag("en-US"),
+ Locale.forLanguageTag("en-CA")));
+ assertTrue(DummyAppLocaleDetailsHelper.compareLocale(Locale.forLanguageTag("zh-CN"),
+ Locale.forLanguageTag("zh")));
+ assertTrue(DummyAppLocaleDetailsHelper.compareLocale(Locale.forLanguageTag("zh-CN"),
+ Locale.forLanguageTag("zh-Hans")));
+ assertTrue(DummyAppLocaleDetailsHelper.compareLocale(Locale.forLanguageTag("zh-TW"),
+ Locale.forLanguageTag("zh-Hant")));
+
+ //Use Locale.equals() to compare two locales.
+ assertFalse(Locale.forLanguageTag("en-US").equals(Locale.forLanguageTag("en-CA")));
+ assertFalse(Locale.forLanguageTag("zh-CN").equals(Locale.forLanguageTag("zh")));
+ assertFalse(Locale.forLanguageTag("zh-CN").equals(Locale.forLanguageTag("zh-Hans")));
+ assertFalse(Locale.forLanguageTag("zh-TW").equals(Locale.forLanguageTag("zh-Hant")));
+ }
+
/**
* Sets the initial Locale data
*