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

Commit d81479a3 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Implement KeyboardLocale InputMethodSubtype extra key

The locale is specified by KeyboardLocale extra key in method.xml,
LatinIME will use the specified locale for keyboard layout.

Bug: 5238658
Change-Id: I8e6cb66c73a7ac1bf611d9910b42fa9cff38eba0
parent b91b3a3e
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -332,11 +332,11 @@
    <!-- Title of the item to change the keyboard theme [CHAR LIMIT=20]-->
    <string name="keyboard_layout">Keyboard theme</string>

    <!-- Description for German QWERTY keyboard subtype [CHAR LIMIT=35] -->
    <!-- Description for German QWERTY keyboard subtype [CHAR LIMIT=22] -->
    <string name="subtype_de_qwerty">German QWERTY</string>
    <!-- Description for English (United Kingdom) keyboard subtype [CHAR LIMIT=35] -->
    <!-- Description for English (United Kingdom) keyboard subtype [CHAR LIMIT=22] -->
    <string name="subtype_en_GB">English (UK)</string>
    <!-- Description for English (United States) keyboard subtype [CHAR LIMIT=35] -->
    <!-- Description for English (United States) keyboard subtype [CHAR LIMIT=22] -->
    <string name="subtype_en_US">English (US)</string>

    <!-- Title of an option for usability study mode -->
+3 −3
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@
<!-- The attributes in this XML file provide configuration information -->
<!-- for the Input Method Manager. -->

<!-- Keyboard: en_US, en_GB, ar, cs, da, de, de_ZZ, es, es_US, fi, fr, fr_CA, fr_CH, hr, hu, it, iw, nb, nl, pl, pt, ru, sr, sv, tr -->
<!-- Keyboard: en_US, en_GB, ar, cs, da, de, de(QWERTY), es, es_US, fi, fr, fr_CA, fr_CH, hr, hu, it, iw, nb, nl, pl, pt, ru, sr, sv, tr -->
<!-- TODO: use <lang>_keyboard icon instead of a common keyboard icon. -->
<!-- If IME doesn't have an applicable subtype, the first subtype will be used as a default
     subtype.-->
@@ -64,9 +64,9 @@
    />
    <subtype android:icon="@drawable/ic_subtype_keyboard"
            android:label="@string/subtype_de_qwerty"
            android:imeSubtypeLocale="de_ZZ"
            android:imeSubtypeLocale="de"
            android:imeSubtypeMode="keyboard"
            android:imeSubtypeExtraValue="AsciiCapable"
            android:imeSubtypeExtraValue="AsciiCapable,KeyboardLocale=de_ZZ"
    />
    <subtype android:icon="@drawable/ic_subtype_keyboard"
            android:label="@string/subtype_generic"
+5 −4
Original line number Diff line number Diff line
@@ -73,16 +73,17 @@ public class InputMethodServiceCompatWrapper extends InputMethodService {
    // This call is required to let LatinIME itself know a subtype changed
    // event when the API level is 10 or previous.
    @SuppressWarnings("unused")
    public void notifyOnCurrentInputMethodSubtypeChanged(InputMethodSubtypeCompatWrapper subtype) {
    public void notifyOnCurrentInputMethodSubtypeChanged(
            InputMethodSubtypeCompatWrapper newSubtype) {
        // Do nothing when the API level is 11 or later
        // and FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES is not true
        if (CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED && !InputMethodManagerCompatWrapper.
                FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES) {
            return;
        }
        if (subtype == null) {
            subtype = mImm.getCurrentInputMethodSubtype();
        }
        final InputMethodSubtypeCompatWrapper subtype = (newSubtype == null)
                ? mImm.getCurrentInputMethodSubtype()
                : newSubtype;
        if (subtype != null) {
            if (!InputMethodManagerCompatWrapper.FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES
                    && !subtype.isDummy()) return;
+6 −0
Original line number Diff line number Diff line
@@ -118,6 +118,12 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
     */
    public static final String SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE = "AsciiCapable";

    /**
     * The subtype extra value used to indicate that the subtype keyboard layout should be loaded
     * from the specified locale.
     */
    public static final String SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE = "KeyboardLocale";

    private static final int EXTENDED_TOUCHABLE_REGION_HEIGHT = 100;

    // How many continuous deletes at which to start deleting at a higher speed.
+11 −5
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ public class SubtypeSwitcher {
        mEnabledLanguagesOfCurrentInputMethod.clear();
        mEnabledKeyboardSubtypesOfCurrentInputMethod.clear();
        for (InputMethodSubtypeCompatWrapper ims : mAllEnabledSubtypesOfCurrentInputMethod) {
            final String locale = ims.getLocale();
            final String locale = getSubtypeLocale(ims);
            final String mode = ims.getMode();
            mLocaleSplitter.setString(locale);
            if (mLocaleSplitter.hasNext()) {
@@ -167,7 +167,7 @@ public class SubtypeSwitcher {
            Log.d(TAG, "Update shortcut IME from : "
                    + (mShortcutInputMethodInfo == null
                            ? "<null>" : mShortcutInputMethodInfo.getId()) + ", "
                    + (mShortcutSubtype == null ? "<null>" : (mShortcutSubtype.getLocale()
                    + (mShortcutSubtype == null ? "<null>" : (getSubtypeLocale(mShortcutSubtype)
                            + ", " + mShortcutSubtype.getMode())));
        }
        // TODO: Update an icon for shortcut IME
@@ -189,11 +189,17 @@ public class SubtypeSwitcher {
            Log.d(TAG, "Update shortcut IME to : "
                    + (mShortcutInputMethodInfo == null
                            ? "<null>" : mShortcutInputMethodInfo.getId()) + ", "
                    + (mShortcutSubtype == null ? "<null>" : (mShortcutSubtype.getLocale()
                    + (mShortcutSubtype == null ? "<null>" : (getSubtypeLocale(mShortcutSubtype)
                            + ", " + mShortcutSubtype.getMode())));
        }
    }

    private static String getSubtypeLocale(InputMethodSubtypeCompatWrapper subtype) {
        final String keyboardLocale = subtype.getExtraValueOf(
                LatinIME.SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE);
        return keyboardLocale != null ? keyboardLocale : subtype.getLocale();
    }

    // Update the current subtype. LatinIME.onCurrentInputMethodSubtypeChanged calls this function.
    public void updateSubtype(InputMethodSubtypeCompatWrapper newSubtype) {
        final String newLocale;
@@ -206,7 +212,7 @@ public class SubtypeSwitcher {
            newLocale = "en_US";
            newMode = KEYBOARD_MODE;
        } else {
            newLocale = newSubtype.getLocale();
            newLocale = getSubtypeLocale(newSubtype);
            newMode = newSubtype.getMode();
        }
        if (DBG) {
@@ -332,7 +338,7 @@ public class SubtypeSwitcher {
            final String imiPackageName = imi.getPackageName();
            if (DBG) {
                Log.d(TAG, "Update icons of IME: " + imiPackageName + ","
                        + subtype.getLocale() + "," + subtype.getMode());
                        + getSubtypeLocale(subtype) + "," + subtype.getMode());
            }
            if (subtype != null) {
                return pm.getDrawable(imiPackageName, subtype.getIconResId(),