Map "sr-Latn" to "sr_ZZ" for internal use.

We want to expose Serbian (Latin) layout as "sr-Latn" to the system,
while our internal logic may not be ready to deal with "sr-Latn" yet.

As a temporary workaround, we remap "sr-Latn" into "sr_ZZ" for our
internal use.

Bug: 27348943
Change-Id: I93ff0c75b3687bb1b913f451b9eb5f2820beefbc
main
Yohei Yukawa 2016-03-04 13:07:17 -08:00
parent 4b46e71163
commit 31a3f07c21
1 changed files with 24 additions and 1 deletions

View File

@ -18,14 +18,17 @@ package com.android.inputmethod.latin;
import static com.android.inputmethod.latin.common.Constants.Subtype.KEYBOARD_MODE; import static com.android.inputmethod.latin.common.Constants.Subtype.KEYBOARD_MODE;
import android.os.Build;
import android.util.Log; import android.util.Log;
import android.view.inputmethod.InputMethodSubtype; import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.compat.BuildCompatUtils;
import com.android.inputmethod.compat.InputMethodSubtypeCompatUtils; import com.android.inputmethod.compat.InputMethodSubtypeCompatUtils;
import com.android.inputmethod.latin.common.Constants; import com.android.inputmethod.latin.common.Constants;
import com.android.inputmethod.latin.common.LocaleUtils; import com.android.inputmethod.latin.common.LocaleUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils; import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
import java.util.HashMap;
import java.util.Locale; import java.util.Locale;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@ -40,14 +43,29 @@ import javax.annotation.Nullable;
public class RichInputMethodSubtype { public class RichInputMethodSubtype {
private static final String TAG = RichInputMethodSubtype.class.getSimpleName(); private static final String TAG = RichInputMethodSubtype.class.getSimpleName();
private static final HashMap<Locale, Locale> sLocaleMap = initializeLocaleMap();
private static final HashMap<Locale, Locale> initializeLocaleMap() {
final HashMap<Locale, Locale> map = new HashMap<>();
if (BuildCompatUtils.EFFECTIVE_SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// Locale#forLanguageTag is available on API Level 21+.
// TODO: Remove this workaround once when we become able to deal with "sr-Latn".
map.put(Locale.forLanguageTag("sr-Latn"), new Locale("sr_ZZ"));
}
return map;
}
@Nonnull @Nonnull
private final InputMethodSubtype mSubtype; private final InputMethodSubtype mSubtype;
@Nonnull @Nonnull
private final Locale mLocale; private final Locale mLocale;
@Nonnull
private final Locale mOriginalLocale;
public RichInputMethodSubtype(@Nonnull final InputMethodSubtype subtype) { public RichInputMethodSubtype(@Nonnull final InputMethodSubtype subtype) {
mSubtype = subtype; mSubtype = subtype;
mLocale = InputMethodSubtypeCompatUtils.getLocaleObject(mSubtype); mOriginalLocale = InputMethodSubtypeCompatUtils.getLocaleObject(mSubtype);
final Locale mappedLocale = sLocaleMap.get(mOriginalLocale);
mLocale = mappedLocale != null ? mappedLocale : mOriginalLocale;
} }
// Extra values are determined by the primary subtype. This is probably right, but // Extra values are determined by the primary subtype. This is probably right, but
@ -128,6 +146,11 @@ public class RichInputMethodSubtype {
return mLocale; return mLocale;
} }
@Nonnull
public Locale getOriginalLocale() {
return mOriginalLocale;
}
public boolean isRtlSubtype() { public boolean isRtlSubtype() {
// The subtype is considered RTL if the language of the main subtype is RTL. // The subtype is considered RTL if the language of the main subtype is RTL.
return LocaleUtils.isRtlLanguage(mLocale); return LocaleUtils.isRtlLanguage(mLocale);