Merge "Fix incorrect suggested language" into udc-dev
This commit is contained in:
@@ -157,13 +157,13 @@ public class AppLocaleCollector implements LocalePickerWithRegion.LocaleCollecto
|
|||||||
* Get a list of system locale that removes all extensions except for the numbering system.
|
* Get a list of system locale that removes all extensions except for the numbering system.
|
||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public List<LocaleStore.LocaleInfo> getSystemCurrentLocales() {
|
public Set<LocaleStore.LocaleInfo> getSystemCurrentLocales() {
|
||||||
List<LocaleStore.LocaleInfo> sysLocales = LocaleStore.getSystemCurrentLocales();
|
Set<LocaleStore.LocaleInfo> sysLocales = LocaleStore.getSystemCurrentLocales();
|
||||||
return sysLocales.stream().filter(
|
return sysLocales.stream().filter(
|
||||||
// For the locale to be added into the suggestion area, its country could not be
|
// For the locale to be added into the suggestion area, its country could not be
|
||||||
// empty.
|
// empty.
|
||||||
info -> info.getLocale().getCountry().length() > 0).collect(
|
info -> info.getLocale().getCountry().length() > 0).collect(
|
||||||
Collectors.toList());
|
Collectors.toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -225,7 +225,10 @@ public class AppLocaleCollector implements LocalePickerWithRegion.LocaleCollecto
|
|||||||
// Add current system language into suggestion list
|
// Add current system language into suggestion list
|
||||||
if (!isForCountryMode) {
|
if (!isForCountryMode) {
|
||||||
boolean isCurrentLocale, existsInApp, existsInIme;
|
boolean isCurrentLocale, existsInApp, existsInIme;
|
||||||
for (LocaleStore.LocaleInfo localeInfo : getSystemCurrentLocales()) {
|
// filter out the system locases that are supported by the application.
|
||||||
|
Set<LocaleStore.LocaleInfo> localeInfoSet =
|
||||||
|
filterSupportedLocales(getSystemCurrentLocales(), result.mAppSupportedLocales);
|
||||||
|
for (LocaleStore.LocaleInfo localeInfo : localeInfoSet) {
|
||||||
isCurrentLocale = mAppCurrentLocale != null
|
isCurrentLocale = mAppCurrentLocale != null
|
||||||
&& localeInfo.getLocale().equals(mAppCurrentLocale.getLocale());
|
&& localeInfo.getLocale().equals(mAppCurrentLocale.getLocale());
|
||||||
// Add the system suggestion flag if the localeInfo exists in mAllAppActiveLocales
|
// Add the system suggestion flag if the localeInfo exists in mAllAppActiveLocales
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ import com.android.internal.annotations.VisibleForTesting;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@@ -404,8 +403,8 @@ public class LocaleStore {
|
|||||||
/**
|
/**
|
||||||
* Returns a list of system locale that removes all extensions except for the numbering system.
|
* Returns a list of system locale that removes all extensions except for the numbering system.
|
||||||
*/
|
*/
|
||||||
public static List<LocaleInfo> getSystemCurrentLocales() {
|
public static Set<LocaleInfo> getSystemCurrentLocales() {
|
||||||
List<LocaleInfo> localeList = new ArrayList<>();
|
Set<LocaleInfo> localeList = new HashSet<>();
|
||||||
LocaleList systemLangList = LocaleList.getDefault();
|
LocaleList systemLangList = LocaleList.getDefault();
|
||||||
for(int i = 0; i < systemLangList.size(); i++) {
|
for(int i = 0; i < systemLangList.size(); i++) {
|
||||||
Locale sysLocale = getLocaleWithOnlyNumberingSystem(systemLangList.get(i));
|
Locale sysLocale = getLocaleWithOnlyNumberingSystem(systemLangList.get(i));
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ public class AppLocaleCollectorTest {
|
|||||||
private LocaleStore.LocaleInfo mAppCurrentLocale;
|
private LocaleStore.LocaleInfo mAppCurrentLocale;
|
||||||
private Set<LocaleInfo> mAllAppActiveLocales;
|
private Set<LocaleInfo> mAllAppActiveLocales;
|
||||||
private Set<LocaleInfo> mImeLocales;
|
private Set<LocaleInfo> mImeLocales;
|
||||||
private List<LocaleInfo> mSystemCurrentLocales;
|
private Set<LocaleInfo> mSystemCurrentLocales;
|
||||||
private Set<LocaleInfo> mSystemSupportedLocales;
|
private Set<LocaleInfo> mSystemSupportedLocales;
|
||||||
private AppLocaleStore.AppLocaleResult mResult;
|
private AppLocaleStore.AppLocaleResult mResult;
|
||||||
private static final String PKG1 = "pkg1";
|
private static final String PKG1 = "pkg1";
|
||||||
@@ -73,14 +73,6 @@ public class AppLocaleCollectorTest {
|
|||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
mAppLocaleCollector = spy(
|
mAppLocaleCollector = spy(
|
||||||
new AppLocaleCollector(InstrumentationRegistry.getContext(), PKG1));
|
new AppLocaleCollector(InstrumentationRegistry.getContext(), PKG1));
|
||||||
|
|
||||||
mAppCurrentLocale = createLocaleInfo("en-US", CURRENT);
|
|
||||||
mAllAppActiveLocales = initAllAppActivatedLocales();
|
|
||||||
mImeLocales = initImeLocales();
|
|
||||||
mSystemSupportedLocales = initSystemSupportedLocales();
|
|
||||||
mSystemCurrentLocales = initSystemCurrentLocales();
|
|
||||||
mResult = new AppLocaleStore.AppLocaleResult(GET_SUPPORTED_LANGUAGE_FROM_LOCAL_CONFIG,
|
|
||||||
initAppSupportedLocale());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -88,7 +80,7 @@ public class AppLocaleCollectorTest {
|
|||||||
LocaleList.setDefault(
|
LocaleList.setDefault(
|
||||||
LocaleList.forLanguageTags("en-US-u-mu-fahrenhe,ar-JO-u-mu-fahrenhe-nu-latn"));
|
LocaleList.forLanguageTags("en-US-u-mu-fahrenhe,ar-JO-u-mu-fahrenhe-nu-latn"));
|
||||||
|
|
||||||
List<LocaleStore.LocaleInfo> list =
|
Set<LocaleStore.LocaleInfo> list =
|
||||||
mAppLocaleCollector.getSystemCurrentLocales();
|
mAppLocaleCollector.getSystemCurrentLocales();
|
||||||
|
|
||||||
LocaleList expected = LocaleList.forLanguageTags("en-US,ar-JO-u-nu-latn");
|
LocaleList expected = LocaleList.forLanguageTags("en-US,ar-JO-u-nu-latn");
|
||||||
@@ -99,7 +91,69 @@ public class AppLocaleCollectorTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetSupportedLocaleList() {
|
public void testGetSupportedLocaleList_filterNonAppsupportedSystemLanguage() {
|
||||||
|
mAppCurrentLocale = createLocaleInfo("en-US", CURRENT);
|
||||||
|
|
||||||
|
// App supports five locales
|
||||||
|
HashSet<Locale> appSupported =
|
||||||
|
getAppSupportedLocales(new String[] {
|
||||||
|
"en-US",
|
||||||
|
"fr",
|
||||||
|
"ar",
|
||||||
|
"es",
|
||||||
|
"bn"
|
||||||
|
});
|
||||||
|
// There are six locales in system current locales.
|
||||||
|
mSystemCurrentLocales = getSystemCurrentLocales(new String[] {
|
||||||
|
"en-US",
|
||||||
|
"fr-FR",
|
||||||
|
"ar-JO",
|
||||||
|
"ca-AD",
|
||||||
|
"da-DK",
|
||||||
|
"es-US"
|
||||||
|
});
|
||||||
|
mAllAppActiveLocales = Collections.emptySet();
|
||||||
|
mImeLocales = Collections.emptySet();
|
||||||
|
mSystemSupportedLocales = Collections.emptySet();
|
||||||
|
mResult = new AppLocaleStore.AppLocaleResult(GET_SUPPORTED_LANGUAGE_FROM_LOCAL_CONFIG,
|
||||||
|
appSupported);
|
||||||
|
|
||||||
|
doReturn(mAppCurrentLocale).when(mAppLocaleCollector).getAppCurrentLocale();
|
||||||
|
doReturn(mResult).when(mAppLocaleCollector).getAppSupportedLocales();
|
||||||
|
doReturn(mAllAppActiveLocales).when(mAppLocaleCollector).getAllAppActiveLocales();
|
||||||
|
doReturn(mImeLocales).when(mAppLocaleCollector).getActiveImeLocales();
|
||||||
|
doReturn(mSystemSupportedLocales).when(mAppLocaleCollector).getSystemSupportedLocale(
|
||||||
|
anyObject(), eq(null), eq(true));
|
||||||
|
doReturn(mSystemCurrentLocales).when(
|
||||||
|
mAppLocaleCollector).getSystemCurrentLocales();
|
||||||
|
|
||||||
|
Set<LocaleInfo> result = mAppLocaleCollector.getSupportedLocaleList(null, true, false);
|
||||||
|
|
||||||
|
// The result would show four rather than six locales in the suggested region.
|
||||||
|
HashMap<String, Integer> expectedResult = new HashMap<>();
|
||||||
|
expectedResult.put("en-US", CURRENT); // The locale current App activates.
|
||||||
|
expectedResult.put("ar-JO", SYSTEM_AVAILABLE);
|
||||||
|
expectedResult.put("fr-FR", SYSTEM_AVAILABLE);
|
||||||
|
expectedResult.put("es-US", SYSTEM_AVAILABLE);
|
||||||
|
expectedResult.put(createLocaleInfo("", SYSTEM).getId(), SYSTEM); // System language title
|
||||||
|
|
||||||
|
assertEquals(result.size(), expectedResult.size());
|
||||||
|
for (LocaleStore.LocaleInfo info: result) {
|
||||||
|
int suggestionFlags = expectedResult.getOrDefault(info.getId(), -1);
|
||||||
|
assertEquals(info.mSuggestionFlags, suggestionFlags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetSupportedLocaleList_withActiveLocalesFromOtherAppAndIme() {
|
||||||
|
mAppCurrentLocale = createLocaleInfo("en-US", CURRENT);
|
||||||
|
mAllAppActiveLocales = initAllAppActivatedLocales();
|
||||||
|
mImeLocales = initImeLocales();
|
||||||
|
mSystemSupportedLocales = initSystemSupportedLocales();
|
||||||
|
mSystemCurrentLocales = initSystemCurrentLocales();
|
||||||
|
mResult = new AppLocaleStore.AppLocaleResult(GET_SUPPORTED_LANGUAGE_FROM_LOCAL_CONFIG,
|
||||||
|
initAppSupportedLocale());
|
||||||
|
|
||||||
doReturn(mAppCurrentLocale).when(mAppLocaleCollector).getAppCurrentLocale();
|
doReturn(mAppCurrentLocale).when(mAppLocaleCollector).getAppCurrentLocale();
|
||||||
doReturn(mResult).when(mAppLocaleCollector).getAppSupportedLocales();
|
doReturn(mResult).when(mAppLocaleCollector).getAppSupportedLocales();
|
||||||
doReturn(mAllAppActiveLocales).when(mAppLocaleCollector).getAllAppActiveLocales();
|
doReturn(mAllAppActiveLocales).when(mAppLocaleCollector).getAllAppActiveLocales();
|
||||||
@@ -147,8 +201,8 @@ public class AppLocaleCollectorTest {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<LocaleInfo> initSystemCurrentLocales() {
|
private Set<LocaleInfo> initSystemCurrentLocales() {
|
||||||
return List.of(createLocaleInfo("zh-Hant-TW", SYSTEM_AVAILABLE),
|
return Set.of(createLocaleInfo("zh-Hant-TW", SYSTEM_AVAILABLE),
|
||||||
createLocaleInfo("ja-JP", SYSTEM_AVAILABLE),
|
createLocaleInfo("ja-JP", SYSTEM_AVAILABLE),
|
||||||
// will be filtered because current App activates this locale.
|
// will be filtered because current App activates this locale.
|
||||||
createLocaleInfo("en-US", SYSTEM_AVAILABLE));
|
createLocaleInfo("en-US", SYSTEM_AVAILABLE));
|
||||||
@@ -188,6 +242,22 @@ public class AppLocaleCollectorTest {
|
|||||||
return hs;
|
return hs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Set<LocaleStore.LocaleInfo> getSystemCurrentLocales(String []languageTags) {
|
||||||
|
HashSet<LocaleStore.LocaleInfo> hs = new HashSet<>(languageTags.length);
|
||||||
|
for (String tag:languageTags) {
|
||||||
|
hs.add(createLocaleInfo(tag, SYSTEM_AVAILABLE));
|
||||||
|
}
|
||||||
|
return hs;
|
||||||
|
}
|
||||||
|
|
||||||
|
private HashSet<Locale> getAppSupportedLocales(String []languageTags) {
|
||||||
|
HashSet<Locale> hs = new HashSet<>(languageTags.length);
|
||||||
|
for (String language:languageTags) {
|
||||||
|
hs.add(Locale.forLanguageTag(language));
|
||||||
|
}
|
||||||
|
return hs;
|
||||||
|
}
|
||||||
|
|
||||||
private LocaleInfo createLocaleInfo(String languageTag, int suggestionFlag) {
|
private LocaleInfo createLocaleInfo(String languageTag, int suggestionFlag) {
|
||||||
LocaleInfo localeInfo = LocaleStore.fromLocale(Locale.forLanguageTag(languageTag));
|
LocaleInfo localeInfo = LocaleStore.fromLocale(Locale.forLanguageTag(languageTag));
|
||||||
localeInfo.mSuggestionFlags = suggestionFlag;
|
localeInfo.mSuggestionFlags = suggestionFlag;
|
||||||
|
|||||||
Reference in New Issue
Block a user