Loading core/java/com/android/internal/inputmethod/InputMethodSubtypeSwitchingController.java +24 −4 Original line number Diff line number Diff line Loading @@ -54,8 +54,8 @@ public class InputMethodSubtypeSwitchingController { public final CharSequence mSubtypeName; public final InputMethodInfo mImi; public final int mSubtypeId; private final boolean mIsSystemLocale; private final boolean mIsSystemLanguage; public final boolean mIsSystemLocale; public final boolean mIsSystemLanguage; public ImeSubtypeListItem(CharSequence imeName, CharSequence subtypeName, InputMethodInfo imi, int subtypeId, String subtypeLocale, String systemLocale) { Loading @@ -68,8 +68,28 @@ public class InputMethodSubtypeSwitchingController { mIsSystemLanguage = false; } else { mIsSystemLocale = subtypeLocale.equals(systemLocale); mIsSystemLanguage = mIsSystemLocale || subtypeLocale.startsWith(systemLocale.substring(0, 2)); if (mIsSystemLocale) { mIsSystemLanguage = true; } else { // TODO: Use Locale#getLanguage or Locale#toLanguageTag final String systemLanguage = parseLanguageFromLocaleString(systemLocale); final String subtypeLanguage = parseLanguageFromLocaleString(subtypeLocale); mIsSystemLanguage = systemLanguage.length() >= 2 && systemLanguage.equals(subtypeLanguage); } } } /** * Returns the language component of a given locale string. * TODO: Use {@link Locale#getLanguage()} instead. */ private static String parseLanguageFromLocaleString(final String locale) { final int idx = locale.indexOf('_'); if (idx < 0) { return locale; } else { return locale.substring(0, idx); } } Loading core/tests/inputmethodtests/src/android/os/InputMethodSubtypeSwitchingControllerTest.java +29 −0 Original line number Diff line number Diff line Loading @@ -295,4 +295,33 @@ public class InputMethodSubtypeSwitchingControllerTest extends InstrumentationTe assertRotationOrder(anotherController, false /* onlyCurrentIme */, switchingUnawarelatinIme_en_UK, switchUnawareJapaneseIme_ja_JP); } @SmallTest public void testImeSubtypeListItem() throws Exception { final List<ImeSubtypeListItem> items = new ArrayList<ImeSubtypeListItem>(); addDummyImeSubtypeListItems(items, "LatinIme", "LatinIme", Arrays.asList("en_US", "fr", "en", "en_uk", "enn", "e", "EN_US"), true /* supportsSwitchingToNextInputMethod*/); final ImeSubtypeListItem item_en_US = items.get(0); final ImeSubtypeListItem item_fr = items.get(1); final ImeSubtypeListItem item_en = items.get(2); final ImeSubtypeListItem item_enn = items.get(3); final ImeSubtypeListItem item_e = items.get(4); final ImeSubtypeListItem item_EN_US = items.get(5); assertTrue(item_en_US.mIsSystemLocale); assertFalse(item_fr.mIsSystemLocale); assertFalse(item_en.mIsSystemLocale); assertFalse(item_en.mIsSystemLocale); assertFalse(item_enn.mIsSystemLocale); assertFalse(item_e.mIsSystemLocale); assertFalse(item_EN_US.mIsSystemLocale); assertTrue(item_en_US.mIsSystemLanguage); assertFalse(item_fr.mIsSystemLanguage); assertTrue(item_en.mIsSystemLanguage); assertFalse(item_enn.mIsSystemLocale); assertFalse(item_e.mIsSystemLocale); assertFalse(item_EN_US.mIsSystemLocale); } } Loading
core/java/com/android/internal/inputmethod/InputMethodSubtypeSwitchingController.java +24 −4 Original line number Diff line number Diff line Loading @@ -54,8 +54,8 @@ public class InputMethodSubtypeSwitchingController { public final CharSequence mSubtypeName; public final InputMethodInfo mImi; public final int mSubtypeId; private final boolean mIsSystemLocale; private final boolean mIsSystemLanguage; public final boolean mIsSystemLocale; public final boolean mIsSystemLanguage; public ImeSubtypeListItem(CharSequence imeName, CharSequence subtypeName, InputMethodInfo imi, int subtypeId, String subtypeLocale, String systemLocale) { Loading @@ -68,8 +68,28 @@ public class InputMethodSubtypeSwitchingController { mIsSystemLanguage = false; } else { mIsSystemLocale = subtypeLocale.equals(systemLocale); mIsSystemLanguage = mIsSystemLocale || subtypeLocale.startsWith(systemLocale.substring(0, 2)); if (mIsSystemLocale) { mIsSystemLanguage = true; } else { // TODO: Use Locale#getLanguage or Locale#toLanguageTag final String systemLanguage = parseLanguageFromLocaleString(systemLocale); final String subtypeLanguage = parseLanguageFromLocaleString(subtypeLocale); mIsSystemLanguage = systemLanguage.length() >= 2 && systemLanguage.equals(subtypeLanguage); } } } /** * Returns the language component of a given locale string. * TODO: Use {@link Locale#getLanguage()} instead. */ private static String parseLanguageFromLocaleString(final String locale) { final int idx = locale.indexOf('_'); if (idx < 0) { return locale; } else { return locale.substring(0, idx); } } Loading
core/tests/inputmethodtests/src/android/os/InputMethodSubtypeSwitchingControllerTest.java +29 −0 Original line number Diff line number Diff line Loading @@ -295,4 +295,33 @@ public class InputMethodSubtypeSwitchingControllerTest extends InstrumentationTe assertRotationOrder(anotherController, false /* onlyCurrentIme */, switchingUnawarelatinIme_en_UK, switchUnawareJapaneseIme_ja_JP); } @SmallTest public void testImeSubtypeListItem() throws Exception { final List<ImeSubtypeListItem> items = new ArrayList<ImeSubtypeListItem>(); addDummyImeSubtypeListItems(items, "LatinIme", "LatinIme", Arrays.asList("en_US", "fr", "en", "en_uk", "enn", "e", "EN_US"), true /* supportsSwitchingToNextInputMethod*/); final ImeSubtypeListItem item_en_US = items.get(0); final ImeSubtypeListItem item_fr = items.get(1); final ImeSubtypeListItem item_en = items.get(2); final ImeSubtypeListItem item_enn = items.get(3); final ImeSubtypeListItem item_e = items.get(4); final ImeSubtypeListItem item_EN_US = items.get(5); assertTrue(item_en_US.mIsSystemLocale); assertFalse(item_fr.mIsSystemLocale); assertFalse(item_en.mIsSystemLocale); assertFalse(item_en.mIsSystemLocale); assertFalse(item_enn.mIsSystemLocale); assertFalse(item_e.mIsSystemLocale); assertFalse(item_EN_US.mIsSystemLocale); assertTrue(item_en_US.mIsSystemLanguage); assertFalse(item_fr.mIsSystemLanguage); assertTrue(item_en.mIsSystemLanguage); assertFalse(item_enn.mIsSystemLocale); assertFalse(item_e.mIsSystemLocale); assertFalse(item_EN_US.mIsSystemLocale); } }