[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:
@@ -48,6 +48,7 @@ import com.android.settingslib.widget.RadioButtonPreference;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -292,7 +293,7 @@ public class AppLocaleDetails extends AppInfoBase implements RadioButtonPreferen
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Other locales in suggested languages group.
|
// Other locales in suggested languages group.
|
||||||
Collection<Locale> supportedSystemLocales = new ArrayList<>();
|
Collection<Locale> supportedSystemLocales = new HashSet<>();
|
||||||
getCurrentSystemLocales().forEach(systemLocale -> {
|
getCurrentSystemLocales().forEach(systemLocale -> {
|
||||||
mAppSupportedLocales.forEach(supportedLocale -> {
|
mAppSupportedLocales.forEach(supportedLocale -> {
|
||||||
if (compareLocale(systemLocale, supportedLocale)) {
|
if (compareLocale(systemLocale, supportedLocale)) {
|
||||||
|
@@ -43,7 +43,9 @@ import org.mockito.MockitoAnnotations;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unittest for ApplocaleDetails
|
* Unittest for ApplocaleDetails
|
||||||
@@ -151,8 +153,9 @@ public class AppLocaleDetailsTest {
|
|||||||
@Test
|
@Test
|
||||||
@UiThreadTest
|
@UiThreadTest
|
||||||
public void
|
public void
|
||||||
handleAllLocalesData_noAppAndNoSupportedSimLocale_1stSuggestedLocaleIsAssetLocale() {
|
handleAllLocalesData_noAppAndNoSupportedSimLocale_suggestedLocaleIsSupported() {
|
||||||
Locale firstAssetLocale = new Locale("en", "GB");
|
Locale testEnAssetLocale = new Locale("en", "GB");
|
||||||
|
Locale testJaAssetLocale = new Locale("ja", "JP");
|
||||||
setupInitialLocales(
|
setupInitialLocales(
|
||||||
/* appLocale= */ "",
|
/* appLocale= */ "",
|
||||||
/* simCountry= */ "tw",
|
/* simCountry= */ "tw",
|
||||||
@@ -166,8 +169,8 @@ public class AppLocaleDetailsTest {
|
|||||||
helper.handleAllLocalesData();
|
helper.handleAllLocalesData();
|
||||||
|
|
||||||
Collection<Locale> suggestedLocales = helper.getSuggestedLocales();
|
Collection<Locale> suggestedLocales = helper.getSuggestedLocales();
|
||||||
Locale locale = suggestedLocales.iterator().next();
|
assertTrue(suggestedLocales.contains(testEnAssetLocale));
|
||||||
assertTrue(locale.equals(firstAssetLocale));
|
assertTrue(suggestedLocales.contains(testJaAssetLocale));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -295,6 +298,35 @@ public class AppLocaleDetailsTest {
|
|||||||
assertTrue(locale.equals(systemLocale));
|
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
|
@Test
|
||||||
@UiThreadTest
|
@UiThreadTest
|
||||||
public void handleAllLocalesData_supportLocaleListIsNotEmpty() {
|
public void handleAllLocalesData_supportLocaleListIsNotEmpty() {
|
||||||
|
Reference in New Issue
Block a user