diff --git a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java index 742ce046d5f..2ba6fdc8af0 100644 --- a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java +++ b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java @@ -237,18 +237,28 @@ public class AppLocaleDetails extends AppInfoBase implements RadioButtonPreferen 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 a97656c4b71..e185354e5ed 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 @@ public class AppLocaleDetailsTest { 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 *