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: I93ff0c75b3687bb1b913f451b9eb5f2820beefbcmain
parent
4b46e71163
commit
31a3f07c21
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue