aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod
diff options
context:
space:
mode:
authorYohei Yukawa <yukawa@google.com>2016-01-21 23:50:32 -0800
committerYohei Yukawa <yukawa@google.com>2016-01-21 23:50:32 -0800
commit995ce45572b9b427c45feac7b0032baba8f3ee7a (patch)
treef07fc7cbb189b23e4815590aa9cefd07c5add97e /java/src/com/android/inputmethod
parentf6997344e6e31ee6e7b95aec6853e0ded00d4083 (diff)
downloadlatinime-995ce45572b9b427c45feac7b0032baba8f3ee7a.tar.gz
latinime-995ce45572b9b427c45feac7b0032baba8f3ee7a.tar.xz
latinime-995ce45572b9b427c45feac7b0032baba8f3ee7a.zip
Use "languageTag" in RichInputMethodSubtype.
With this CL, RichInputMethodSubtype#getLocale() starts returning a Locale object that is initialized with "languageTag" when it is specified. No behavior change is intended when "languageTag" attribute is not available or specified. Bug: 22858221 Change-Id: I23f2e479b8e284ce589c6950b071ba84c5dd8ce1
Diffstat (limited to 'java/src/com/android/inputmethod')
-rw-r--r--java/src/com/android/inputmethod/compat/InputMethodSubtypeCompatUtils.java18
-rw-r--r--java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java2
2 files changed, 19 insertions, 1 deletions
diff --git a/java/src/com/android/inputmethod/compat/InputMethodSubtypeCompatUtils.java b/java/src/com/android/inputmethod/compat/InputMethodSubtypeCompatUtils.java
index 58ad4bd4c..d123a1799 100644
--- a/java/src/com/android/inputmethod/compat/InputMethodSubtypeCompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/InputMethodSubtypeCompatUtils.java
@@ -17,14 +17,17 @@
package com.android.inputmethod.compat;
import android.os.Build;
+import android.text.TextUtils;
import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.RichInputMethodSubtype;
import com.android.inputmethod.latin.common.Constants;
+import com.android.inputmethod.latin.common.LocaleUtils;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
+import java.util.Locale;
import javax.annotation.Nonnull;
@@ -78,6 +81,21 @@ public final class InputMethodSubtypeCompatUtils {
|| subtype.containsExtraValueKey(Constants.Subtype.ExtraValue.ASCII_CAPABLE);
}
+ // Note that InputMethodSubtype.getLanguageTag() is expected to be available in Android N+.
+ private static final Method GET_LANGUAGE_TAG =
+ CompatUtils.getMethod(InputMethodSubtype.class, "getLanguageTag");
+
+ public static Locale getLocaleObject(final InputMethodSubtype subtype) {
+ // Locale.forLanguageTag() is available only in Android L and later.
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ final String languageTag = (String) CompatUtils.invoke(subtype, null, GET_LANGUAGE_TAG);
+ if (!TextUtils.isEmpty(languageTag)) {
+ return Locale.forLanguageTag(languageTag);
+ }
+ }
+ return LocaleUtils.constructLocaleFromString(subtype.getLocale());
+ }
+
@UsedForTesting
public static boolean isAsciiCapableWithAPI(final InputMethodSubtype subtype) {
return (Boolean)CompatUtils.invoke(subtype, false, METHOD_isAsciiCapable);
diff --git a/java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java b/java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java
index 9d7849ffc..71aaf5e01 100644
--- a/java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java
+++ b/java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java
@@ -47,7 +47,7 @@ public class RichInputMethodSubtype {
public RichInputMethodSubtype(@Nonnull final InputMethodSubtype subtype) {
mSubtype = subtype;
- mLocale = LocaleUtils.constructLocaleFromString(mSubtype.getLocale());
+ mLocale = InputMethodSubtypeCompatUtils.getLocaleObject(mSubtype);
}
// Extra values are determined by the primary subtype. This is probably right, but