Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 31a3f07c authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

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
parent 4b46e711
Loading
Loading
Loading
Loading
+24 −1
Original line number Original line Diff line number Diff line
@@ -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);