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

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

Don't execute pending onStartInputView if EditorInfos are equivalent

Bug: 5722732
Bug: 5722867
Change-Id: I8347c258b286c3329f318d50adf205e78e49c722
parent 68d600a5
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.inputmethod.keyboard;

import android.text.TextUtils;
import android.view.inputmethod.EditorInfo;

import com.android.inputmethod.compat.EditorInfoCompatUtils;
@@ -177,6 +178,14 @@ public class KeyboardId {
        );
    }

    public static boolean equivalentEditorInfoForKeyboard(EditorInfo a, EditorInfo b) {
        if (a == null && b == null) return true;
        if (a == null || b == null) return false;
        return a.inputType == b.inputType
                && a.imeOptions == b.imeOptions
                && TextUtils.equals(a.privateImeOptions, b.privateImeOptions);
    }

    public static String modeName(int mode) {
        switch (mode) {
        case MODE_TEXT: return "text";
+13 −17
Original line number Diff line number Diff line
@@ -125,23 +125,9 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
            mIsValid = true;
        }

        public void restore(boolean forceRestore) {
            if (!mIsValid) {
                if (forceRestore) {
        public void restore() {
            if (!mIsValid || mIsAlphabetMode) {
                setAlphabetKeyboard();
                }
                return;
            }
            mIsValid = false;

            if (mIsAlphabetMode) {
                setAlphabetKeyboard();
                if (mIsShiftLocked) {
                    setShiftLocked(true);
                }
                if (mIsShifted) {
                    setShifted(MANUAL_SHIFT);
                }
            } else {
                if (mIsShifted) {
                    setSymbolsShiftedKeyboard();
@@ -149,6 +135,16 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
                    setSymbolsKeyboard();
                }
            }

            if (!mIsValid) return;
            mIsValid = false;

            if (mIsAlphabetMode) {
                setShiftLocked(mIsShiftLocked);
                if (!mIsShiftLocked) {
                    setShifted(mIsShifted ? MANUAL_SHIFT : UNSHIFT);
                }
            }
        }
    }

@@ -204,7 +200,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
            mSymbolsShiftedKeyboardId = getKeyboardId(editorInfo, true, true, settingsValues);
            mState.onLoadKeyboard();
            mLayoutSwitchBackSymbols = mResources.getString(R.string.layout_switch_back_symbols);
            mSavedKeyboardState.restore(mCurrentId == null);
            mSavedKeyboardState.restore();
        } catch (RuntimeException e) {
            Log.w(TAG, "loading keyboard failed: " + mMainKeyboardId, e);
            LatinImeLogger.logOnException(mMainKeyboardId.toString(), e);
+3 −1
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ import com.android.inputmethod.deprecated.VoiceProxy;
import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardActionListener;
import com.android.inputmethod.keyboard.KeyboardId;
import com.android.inputmethod.keyboard.KeyboardSwitcher;
import com.android.inputmethod.keyboard.KeyboardView;
import com.android.inputmethod.keyboard.LatinKeyboard;
@@ -442,7 +443,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
        }

        public void onStartInputView(EditorInfo editorInfo, boolean restarting) {
            if (hasMessages(MSG_PENDING_IMS_CALLBACK) && editorInfo == mAppliedEditorInfo) {
            if (hasMessages(MSG_PENDING_IMS_CALLBACK)
                    && KeyboardId.equivalentEditorInfoForKeyboard(editorInfo, mAppliedEditorInfo)) {
                // Typically this is the second onStartInputView after orientation changed.
                resetPendingImsCallback();
            } else {