diff --git a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java index 8f1c212ad57..d50a67b8305 100644 --- a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java +++ b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java @@ -48,6 +48,7 @@ import com.android.settingslib.widget.RadioButtonPreference; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.Locale; /** @@ -292,7 +293,7 @@ public class AppLocaleDetails extends AppInfoBase implements RadioButtonPreferen }); // Other locales in suggested languages group. - Collection supportedSystemLocales = new ArrayList<>(); + Collection supportedSystemLocales = new HashSet<>(); getCurrentSystemLocales().forEach(systemLocale -> { mAppSupportedLocales.forEach(supportedLocale -> { if (compareLocale(systemLocale, supportedLocale)) { 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 0f9d54b441d..aa0daad44ff 100644 --- a/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java +++ b/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java @@ -43,7 +43,9 @@ import org.mockito.MockitoAnnotations; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.Locale; +import java.util.Set; /** * Unittest for ApplocaleDetails @@ -151,8 +153,9 @@ public class AppLocaleDetailsTest { @Test @UiThreadTest public void - handleAllLocalesData_noAppAndNoSupportedSimLocale_1stSuggestedLocaleIsAssetLocale() { - Locale firstAssetLocale = new Locale("en", "GB"); + handleAllLocalesData_noAppAndNoSupportedSimLocale_suggestedLocaleIsSupported() { + Locale testEnAssetLocale = new Locale("en", "GB"); + Locale testJaAssetLocale = new Locale("ja", "JP"); setupInitialLocales( /* appLocale= */ "", /* simCountry= */ "tw", @@ -166,8 +169,8 @@ public class AppLocaleDetailsTest { helper.handleAllLocalesData(); Collection suggestedLocales = helper.getSuggestedLocales(); - Locale locale = suggestedLocales.iterator().next(); - assertTrue(locale.equals(firstAssetLocale)); + assertTrue(suggestedLocales.contains(testEnAssetLocale)); + assertTrue(suggestedLocales.contains(testJaAssetLocale)); } @Test @@ -295,6 +298,35 @@ public class AppLocaleDetailsTest { assertTrue(locale.equals(systemLocale)); } + @Test + @UiThreadTest + public void handleAllLocalesData_sameLocaleButDifferentRegion_notShowDuplicatedLocale() { + setupInitialLocales( + /* appLocale= */ "", + /* simCountry= */ "", + /* networkCountry= */ "", + /* systemLocales= */ "en-us, en-gb, jp, ne", + /* packageLocales= */ "pa, cn, tw, en-us, en-gb", + /* assetLocales= */ new String[]{}); + DummyAppLocaleDetailsHelper helper = + new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME); + + helper.handleAllLocalesData(); + + Collection suggestedLocales = helper.getSuggestedLocales(); + assertFalse(hasDuplicatedResult(suggestedLocales)); + } + + private boolean hasDuplicatedResult(Collection locales) { + Set tempSet = new HashSet<>(); + for (Locale locale : locales) { + if (!tempSet.add(locale)) { + return true; + } + } + return false; + } + @Test @UiThreadTest public void handleAllLocalesData_supportLocaleListIsNotEmpty() {