diff options
| author | 2023-08-11 03:46:59 +0000 | |
|---|---|---|
| committer | 2023-08-11 03:46:59 +0000 | |
| commit | 06db8a68e1923598bbd7c7aea60936d011212126 (patch) | |
| tree | bdb2924cbda3b94675903625ed4e574ada0dfbbc | |
| parent | be3b1554656f7b9aadd98312df499f1d86ceb3d1 (diff) | |
| parent | a312052bf7baa205466b4de5493bff0fd6a8314b (diff) | |
Merge "[Panlingual]Fix duplicate language from IME" into udc-qpr-dev am: a312052bf7
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24365763
Change-Id: I8a725413d1bf52e42f5348948f215031f5a3018a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | core/java/com/android/internal/app/LocaleStore.java | 15 | ||||
| -rw-r--r-- | tests/Internal/src/com/android/internal/app/LocaleStoreTest.java | 19 |
2 files changed, 29 insertions, 5 deletions
diff --git a/core/java/com/android/internal/app/LocaleStore.java b/core/java/com/android/internal/app/LocaleStore.java index 43d263bc8a6d..b3b06037ec24 100644 --- a/core/java/com/android/internal/app/LocaleStore.java +++ b/core/java/com/android/internal/app/LocaleStore.java @@ -390,12 +390,17 @@ public class LocaleStore { public static Set<LocaleInfo> transformImeLanguageTagToLocaleInfo( List<InputMethodSubtype> list) { Set<LocaleInfo> imeLocales = new HashSet<>(); + Set<String> languageTagSet = new HashSet<>(); for (InputMethodSubtype subtype : list) { - Locale locale = Locale.forLanguageTag(subtype.getLanguageTag()); - LocaleInfo cacheInfo = getLocaleInfo(locale, sLocaleCache); - LocaleInfo localeInfo = new LocaleInfo(cacheInfo); - localeInfo.mSuggestionFlags |= LocaleInfo.SUGGESTION_TYPE_IME_LANGUAGE; - imeLocales.add(localeInfo); + String languageTag = subtype.getLanguageTag(); + if (!languageTagSet.contains(languageTag)) { + languageTagSet.add(languageTag); + Locale locale = Locale.forLanguageTag(languageTag); + LocaleInfo cacheInfo = getLocaleInfo(locale, sLocaleCache); + LocaleInfo localeInfo = new LocaleInfo(cacheInfo); + localeInfo.mSuggestionFlags |= LocaleInfo.SUGGESTION_TYPE_IME_LANGUAGE; + imeLocales.add(localeInfo); + } } return imeLocales; } diff --git a/tests/Internal/src/com/android/internal/app/LocaleStoreTest.java b/tests/Internal/src/com/android/internal/app/LocaleStoreTest.java index f6568816b4f7..c0d7cb402636 100644 --- a/tests/Internal/src/com/android/internal/app/LocaleStoreTest.java +++ b/tests/Internal/src/com/android/internal/app/LocaleStoreTest.java @@ -63,6 +63,25 @@ public class LocaleStoreTest { } @Test + public void testTransformImeLanguageTagToLocaleInfo_duplicateTagFilter() { + List<InputMethodSubtype> list = List.of( + new InputMethodSubtypeBuilder().setLanguageTag("en-US").build(), + new InputMethodSubtypeBuilder().setLanguageTag("en-US").build(), + new InputMethodSubtypeBuilder().setLanguageTag("en-US").build(), + new InputMethodSubtypeBuilder().setLanguageTag("zh-TW").build(), + new InputMethodSubtypeBuilder().setLanguageTag("ja-JP").build()); + + Set<LocaleInfo> localeSet = LocaleStore.transformImeLanguageTagToLocaleInfo(list); + + Set<String> expectedLanguageTag = Set.of("en-US", "zh-TW", "ja-JP"); + assertEquals(localeSet.size(), expectedLanguageTag.size()); + for (LocaleInfo info : localeSet) { + assertEquals(info.mSuggestionFlags, LocaleInfo.SUGGESTION_TYPE_IME_LANGUAGE); + assertTrue(expectedLanguageTag.contains(info.getId())); + } + } + + @Test public void convertExplicitLocales_noExplicitLcoales_returnEmptyHashMap() { Collection<LocaleInfo> supportedLocale = getFakeSupportedLocales(); |