diff options
author | Yohei Yukawa <yukawa@google.com> | 2015-02-21 02:15:48 +0900 |
---|---|---|
committer | Yohei Yukawa <yukawa@google.com> | 2015-02-21 02:26:40 +0900 |
commit | f487e0e395a4e49f28c6448339d57357667756c6 (patch) | |
tree | 558357392e163697d020f9026eeb5ed03127f019 /core/java | |
parent | e55524ef0482bfcf77bf1344f7fda9ef7263d32f (diff) | |
download | frameworks_base-f487e0e395a4e49f28c6448339d57357667756c6.zip frameworks_base-f487e0e395a4e49f28c6448339d57357667756c6.tar.gz frameworks_base-f487e0e395a4e49f28c6448339d57357667756c6.tar.bz2 |
Normalize deprecated 2-letter language code when necessary.
This is a follow up CL for I7d932e60311b80c05be8f02c9e803f18da0e0054,
which revealed that we could not use deprecated 2-letter code like "in"
to query subtype which has new language codes like "id".
This CL addresses the above issue by normalizing the language code
with Locale#Locale(String, String) before comparing one to another.
Change-Id: I26e3aa0333aa3c76c80a3c1c9090cc2b368c8e10
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/view/inputmethod/InputMethodSubtype.java | 20 | ||||
-rw-r--r-- | core/java/com/android/internal/inputmethod/InputMethodUtils.java | 27 |
2 files changed, 26 insertions, 21 deletions
diff --git a/core/java/android/view/inputmethod/InputMethodSubtype.java b/core/java/android/view/inputmethod/InputMethodSubtype.java index 1671faa..c2f3777 100644 --- a/core/java/android/view/inputmethod/InputMethodSubtype.java +++ b/core/java/android/view/inputmethod/InputMethodSubtype.java @@ -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; @@ -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; @@ -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) { diff --git a/core/java/com/android/internal/inputmethod/InputMethodUtils.java b/core/java/com/android/internal/inputmethod/InputMethodUtils.java index 9ae9fa7..9aa36d3 100644 --- a/core/java/com/android/internal/inputmethod/InputMethodUtils.java +++ b/core/java/com/android/internal/inputmethod/InputMethodUtils.java @@ -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) { @@ -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; } } |