Change locale comparison API

Bug: 209729853
Test: atest AppLocaleDetailsTest
Change-Id: I1568fe9474e473ac6d3fb81dcf9edf9ba7434e85
This commit is contained in:
allenwtsu
2021-12-17 01:11:35 +08:00
parent e2f4baed0b
commit 03711a8ed4
2 changed files with 32 additions and 2 deletions

View File

@@ -237,18 +237,28 @@ public class AppLocaleDetails extends AppInfoBase implements RadioButtonPreferen
mSuggestedLocales.add(appLocale); mSuggestedLocales.add(appLocale);
} }
// 2nd locale in suggested languages group. // 2nd locale in suggested languages group.
if (simLocale != null && !simLocale.equals(appLocale)) { if (simLocale != null && !compareLocale(simLocale, appLocale)) {
mSuggestedLocales.add(simLocale); mSuggestedLocales.add(simLocale);
} }
// Other locales in suggested languages group. // Other locales in suggested languages group.
for (int i = 0; i < currentSystemLocales.size(); i++) { for (int i = 0; i < currentSystemLocales.size(); i++) {
Locale locale = currentSystemLocales.get(i); Locale locale = currentSystemLocales.get(i);
if (!locale.equals(appLocale) && !locale.equals(simLocale)) { if (!compareLocale(locale, appLocale) && !compareLocale(locale, simLocale)) {
mSuggestedLocales.add(locale); 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 @VisibleForTesting
void handleSupportedLocales() { void handleSupportedLocales() {
//TODO Waiting for PackageManager api //TODO Waiting for PackageManager api

View File

@@ -152,6 +152,26 @@ public class AppLocaleDetailsTest {
assertFalse(helper.getSupportedLocales().isEmpty()); 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 * Sets the initial Locale data
* *