[Panlingual] Fix duplicated locale show on suggested group

- When User select 2 same locale but different region, current logic
   will also check 2 times and add these same results into cache.
 - Use hashSet to resolve this problem

Bug: 220804297
Test: local
Test: atest pass
Change-Id: I60c63a1eb570373fd714cf9b29ed926d15b2daa7
This commit is contained in:
tom hsu
2022-02-25 12:14:46 +08:00
committed by Tom Hsu
parent d3a7ec88a0
commit 62a8514d1b
2 changed files with 38 additions and 5 deletions

View File

@@ -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<Locale> supportedSystemLocales = new ArrayList<>();
Collection<Locale> supportedSystemLocales = new HashSet<>();
getCurrentSystemLocales().forEach(systemLocale -> {
mAppSupportedLocales.forEach(supportedLocale -> {
if (compareLocale(systemLocale, supportedLocale)) {

View File

@@ -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<Locale> 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<Locale> suggestedLocales = helper.getSuggestedLocales();
assertFalse(hasDuplicatedResult(suggestedLocales));
}
private boolean hasDuplicatedResult(Collection<Locale> locales) {
Set<Locale> tempSet = new HashSet<>();
for (Locale locale : locales) {
if (!tempSet.add(locale)) {
return true;
}
}
return false;
}
@Test
@UiThreadTest
public void handleAllLocalesData_supportLocaleListIsNotEmpty() {