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

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

Fix language switch key behavior (DO NOT MERGE)

Bug: 7075923
Change-Id: If139411db4aa65eed64337bf2a79387cfcd04496
parent 7648b37d
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -52,6 +52,10 @@ public final class InputMethodManagerCompatWrapper {
        sInstance.mImm = ImfUtils.getInputMethodManager(context);
    }

    public InputMethodSubtype getCurrentInputMethodSubtype() {
        return mImm.getCurrentInputMethodSubtype();
    }

    public InputMethodSubtype getLastInputMethodSubtype() {
        return mImm.getLastInputMethodSubtype();
    }
@@ -65,6 +69,10 @@ public final class InputMethodManagerCompatWrapper {
                onlyCurrentIme);
    }

    public void setInputMethodAndSubtype(IBinder token, String id, InputMethodSubtype subtype) {
        mImm.setInputMethodAndSubtype(token, id, subtype);
    }

    public void showInputMethodPicker() {
        mImm.showInputMethodPicker();
    }
+31 −16
Original line number Diff line number Diff line
@@ -141,7 +141,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
    private SharedPreferences mPrefs;
    /* package for tests */ final KeyboardSwitcher mKeyboardSwitcher;
    private final SubtypeSwitcher mSubtypeSwitcher;
    private boolean mShouldSwitchToLastSubtype = true;
    private final SubtypeState mSubtypeState = new SubtypeState();

    private boolean mIsMainDictionaryAvailable;
    private UserBinaryDictionary mUserDictionary;
@@ -365,6 +365,34 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
        }
    }

    static final class SubtypeState {
        private InputMethodSubtype mLastActiveSubtype;
        private boolean mCurrentSubtypeUsed;

        public void currentSubtypeUsed() {
            mCurrentSubtypeUsed = true;
        }

        public void switchSubtype(final IBinder token, final InputMethodManagerCompatWrapper imm,
                final Context context) {
            final InputMethodSubtype currentSubtype = imm.getCurrentInputMethodSubtype();
            final InputMethodSubtype lastActiveSubtype = mLastActiveSubtype;
            final boolean currentSubtypeUsed = mCurrentSubtypeUsed;
            if (currentSubtypeUsed) {
                mLastActiveSubtype = currentSubtype;
                mCurrentSubtypeUsed = false;
            }
            if (currentSubtypeUsed
                    && ImfUtils.checkIfSubtypeBelongsToThisImeAndEnabled(context, lastActiveSubtype)
                    && !currentSubtype.equals(lastActiveSubtype)) {
                final String id = ImfUtils.getInputMethodIdOfThisIme(context);
                imm.setInputMethodAndSubtype(token, id, lastActiveSubtype);
                return;
            }
            imm.switchToNextInputMethod(token, true /* onlyCurrentIme */);
        }
    }

    public LatinIME() {
        super();
        mSubtypeSwitcher = SubtypeSwitcher.getInstance();
@@ -887,6 +915,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
        // Make a note of the cursor position
        mLastSelectionStart = newSelStart;
        mLastSelectionEnd = newSelEnd;
        mSubtypeState.currentSubtypeUsed();
    }

    /**
@@ -1235,19 +1264,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
            mImm.switchToNextInputMethod(token, false /* onlyCurrentIme */);
            return;
        }
        if (mShouldSwitchToLastSubtype) {
            final InputMethodSubtype lastSubtype = mImm.getLastInputMethodSubtype();
            final boolean lastSubtypeBelongsToThisIme =
                    ImfUtils.checkIfSubtypeBelongsToThisImeAndEnabled(this, lastSubtype);
            if (lastSubtypeBelongsToThisIme && mImm.switchToLastInputMethod(token)) {
                mShouldSwitchToLastSubtype = false;
            } else {
                mImm.switchToNextInputMethod(token, true /* onlyCurrentIme */);
                mShouldSwitchToLastSubtype = true;
            }
        } else {
            mImm.switchToNextInputMethod(token, true /* onlyCurrentIme */);
        }
        mSubtypeState.switchSubtype(token, mImm, this);
    }

    private void sendDownUpKeyEventForBackwardCompatibility(final int code) {
@@ -1316,7 +1333,6 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
            handleBackspace(spaceState);
            mDeleteCount++;
            mExpectingUpdateSelection = true;
            mShouldSwitchToLastSubtype = true;
            LatinImeLogger.logOnDelete(x, y);
            break;
        case Keyboard.CODE_SHIFT:
@@ -1372,7 +1388,6 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
                handleCharacter(primaryCode, keyX, keyY, spaceState);
            }
            mExpectingUpdateSelection = true;
            mShouldSwitchToLastSubtype = true;
            break;
        }
        switcher.onCodeInput(primaryCode);