Loading core/java/android/view/inputmethod/InputMethodSubtype.java +3 −17 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import android.os.Parcelable; import android.text.TextUtils; import android.util.Slog; import com.android.internal.inputmethod.InputMethodUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; Loading Loading @@ -379,7 +381,7 @@ public final class InputMethodSubtype implements Parcelable { */ public CharSequence getDisplayName( Context context, String packageName, ApplicationInfo appInfo) { final Locale locale = constructLocaleFromString(mSubtypeLocale); final Locale locale = InputMethodUtils.constructLocaleFromString(mSubtypeLocale); final String localeStr = locale != null ? locale.getDisplayName() : mSubtypeLocale; if (mSubtypeNameResId == 0) { return localeStr; Loading Loading @@ -503,22 +505,6 @@ public final class InputMethodSubtype implements Parcelable { } }; private static Locale constructLocaleFromString(String localeStr) { if (TextUtils.isEmpty(localeStr)) return null; String[] localeParams = localeStr.split("_", 3); // The length of localeStr is guaranteed to always return a 1 <= value <= 3 // because localeStr is not empty. if (localeParams.length == 1) { return new Locale(localeParams[0]); } else if (localeParams.length == 2) { return new Locale(localeParams[0], localeParams[1]); } else if (localeParams.length == 3) { return new Locale(localeParams[0], localeParams[1], localeParams[2]); } return null; } private static int hashCodeInternal(String locale, String mode, String extraValue, boolean isAuxiliary, boolean overridesImplicitlyEnabledSubtype, boolean isAsciiCapable) { Loading core/java/com/android/internal/inputmethod/InputMethodUtils.java +23 −4 Original line number Diff line number Diff line Loading @@ -411,6 +411,24 @@ public class InputMethodUtils { return false; } public static Locale constructLocaleFromString(String localeStr) { if (TextUtils.isEmpty(localeStr)) { return null; } // TODO: Use {@link Locale#toLanguageTag()} and {@link Locale#forLanguageTag(languageTag)}. String[] localeParams = localeStr.split("_", 3); // The length of localeStr is guaranteed to always return a 1 <= value <= 3 // because localeStr is not empty. if (localeParams.length == 1) { return new Locale(localeParams[0]); } else if (localeParams.length == 2) { return new Locale(localeParams[0], localeParams[1]); } else if (localeParams.length == 3) { return new Locale(localeParams[0], localeParams[1], localeParams[2]); } return null; } public static boolean containsSubtypeOf(final InputMethodInfo imi, @Nullable final Locale locale, final boolean checkCountry, final String mode) { if (locale == null) { Loading @@ -420,15 +438,16 @@ public class InputMethodUtils { for (int i = 0; i < N; ++i) { final InputMethodSubtype subtype = imi.getSubtypeAt(i); if (checkCountry) { // TODO: Use {@link Locale#toLanguageTag()} and // {@link Locale#forLanguageTag(languageTag)} instead. if (!TextUtils.equals(subtype.getLocale(), locale.toString())) { final Locale subtypeLocale = constructLocaleFromString(subtype.getLocale()); if (subtypeLocale == null || !TextUtils.equals(subtypeLocale.getLanguage(), locale.getLanguage()) || !TextUtils.equals(subtypeLocale.getCountry(), locale.getCountry())) { continue; } } else { final Locale subtypeLocale = new Locale(getLanguageFromLocaleString( subtype.getLocale())); if (!subtypeLocale.getLanguage().equals(locale.getLanguage())) { if (!TextUtils.equals(subtypeLocale.getLanguage(), locale.getLanguage())) { continue; } } Loading core/tests/inputmethodtests/src/android/os/InputMethodTest.java +2 −4 Original line number Diff line number Diff line Loading @@ -554,13 +554,11 @@ public class InputMethodTest extends InstrumentationTestCase { subtypes); assertTrue(InputMethodUtils.containsSubtypeOf(imi, LOCALE_IN, !CHECK_COUNTRY, SUBTYPE_MODE_KEYBOARD)); // TODO: This should be true but the current behavior is broken. assertFalse(InputMethodUtils.containsSubtypeOf(imi, LOCALE_IN, CHECK_COUNTRY, assertTrue(InputMethodUtils.containsSubtypeOf(imi, LOCALE_IN, CHECK_COUNTRY, SUBTYPE_MODE_KEYBOARD)); assertTrue(InputMethodUtils.containsSubtypeOf(imi, LOCALE_ID, !CHECK_COUNTRY, SUBTYPE_MODE_KEYBOARD)); // TODO: This should be true but the current behavior is broken. assertFalse(InputMethodUtils.containsSubtypeOf(imi, LOCALE_ID, CHECK_COUNTRY, assertTrue(InputMethodUtils.containsSubtypeOf(imi, LOCALE_ID, CHECK_COUNTRY, SUBTYPE_MODE_KEYBOARD)); } } Loading Loading
core/java/android/view/inputmethod/InputMethodSubtype.java +3 −17 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import android.os.Parcelable; import android.text.TextUtils; import android.util.Slog; import com.android.internal.inputmethod.InputMethodUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; Loading Loading @@ -379,7 +381,7 @@ public final class InputMethodSubtype implements Parcelable { */ public CharSequence getDisplayName( Context context, String packageName, ApplicationInfo appInfo) { final Locale locale = constructLocaleFromString(mSubtypeLocale); final Locale locale = InputMethodUtils.constructLocaleFromString(mSubtypeLocale); final String localeStr = locale != null ? locale.getDisplayName() : mSubtypeLocale; if (mSubtypeNameResId == 0) { return localeStr; Loading Loading @@ -503,22 +505,6 @@ public final class InputMethodSubtype implements Parcelable { } }; private static Locale constructLocaleFromString(String localeStr) { if (TextUtils.isEmpty(localeStr)) return null; String[] localeParams = localeStr.split("_", 3); // The length of localeStr is guaranteed to always return a 1 <= value <= 3 // because localeStr is not empty. if (localeParams.length == 1) { return new Locale(localeParams[0]); } else if (localeParams.length == 2) { return new Locale(localeParams[0], localeParams[1]); } else if (localeParams.length == 3) { return new Locale(localeParams[0], localeParams[1], localeParams[2]); } return null; } private static int hashCodeInternal(String locale, String mode, String extraValue, boolean isAuxiliary, boolean overridesImplicitlyEnabledSubtype, boolean isAsciiCapable) { Loading
core/java/com/android/internal/inputmethod/InputMethodUtils.java +23 −4 Original line number Diff line number Diff line Loading @@ -411,6 +411,24 @@ public class InputMethodUtils { return false; } public static Locale constructLocaleFromString(String localeStr) { if (TextUtils.isEmpty(localeStr)) { return null; } // TODO: Use {@link Locale#toLanguageTag()} and {@link Locale#forLanguageTag(languageTag)}. String[] localeParams = localeStr.split("_", 3); // The length of localeStr is guaranteed to always return a 1 <= value <= 3 // because localeStr is not empty. if (localeParams.length == 1) { return new Locale(localeParams[0]); } else if (localeParams.length == 2) { return new Locale(localeParams[0], localeParams[1]); } else if (localeParams.length == 3) { return new Locale(localeParams[0], localeParams[1], localeParams[2]); } return null; } public static boolean containsSubtypeOf(final InputMethodInfo imi, @Nullable final Locale locale, final boolean checkCountry, final String mode) { if (locale == null) { Loading @@ -420,15 +438,16 @@ public class InputMethodUtils { for (int i = 0; i < N; ++i) { final InputMethodSubtype subtype = imi.getSubtypeAt(i); if (checkCountry) { // TODO: Use {@link Locale#toLanguageTag()} and // {@link Locale#forLanguageTag(languageTag)} instead. if (!TextUtils.equals(subtype.getLocale(), locale.toString())) { final Locale subtypeLocale = constructLocaleFromString(subtype.getLocale()); if (subtypeLocale == null || !TextUtils.equals(subtypeLocale.getLanguage(), locale.getLanguage()) || !TextUtils.equals(subtypeLocale.getCountry(), locale.getCountry())) { continue; } } else { final Locale subtypeLocale = new Locale(getLanguageFromLocaleString( subtype.getLocale())); if (!subtypeLocale.getLanguage().equals(locale.getLanguage())) { if (!TextUtils.equals(subtypeLocale.getLanguage(), locale.getLanguage())) { continue; } } Loading
core/tests/inputmethodtests/src/android/os/InputMethodTest.java +2 −4 Original line number Diff line number Diff line Loading @@ -554,13 +554,11 @@ public class InputMethodTest extends InstrumentationTestCase { subtypes); assertTrue(InputMethodUtils.containsSubtypeOf(imi, LOCALE_IN, !CHECK_COUNTRY, SUBTYPE_MODE_KEYBOARD)); // TODO: This should be true but the current behavior is broken. assertFalse(InputMethodUtils.containsSubtypeOf(imi, LOCALE_IN, CHECK_COUNTRY, assertTrue(InputMethodUtils.containsSubtypeOf(imi, LOCALE_IN, CHECK_COUNTRY, SUBTYPE_MODE_KEYBOARD)); assertTrue(InputMethodUtils.containsSubtypeOf(imi, LOCALE_ID, !CHECK_COUNTRY, SUBTYPE_MODE_KEYBOARD)); // TODO: This should be true but the current behavior is broken. assertFalse(InputMethodUtils.containsSubtypeOf(imi, LOCALE_ID, CHECK_COUNTRY, assertTrue(InputMethodUtils.containsSubtypeOf(imi, LOCALE_ID, CHECK_COUNTRY, SUBTYPE_MODE_KEYBOARD)); } } Loading