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

Commit 4826c3ff authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka Committed by Android (Google) Code Review
Browse files

Merge "Fix language switch key behavior (DO NOT MERGE)" into jb-mr1.1-dev

parents aef0acdb d62be285
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);