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

Commit 1de53e53 authored by Wilson Wu's avatar Wilson Wu
Browse files

Fix delayed hide soft input when switch user

The user switch task may cost some time and delay
to send the hide soft input action. It likely happended
when system is busy(e.g. starting winscope trace).

1. Try to fix this by sending the hide soft input action
   before user switch task.
2. Remove the mSystemReady checking since user switch task
   should be always posted afterward.

Bug: 176291101
Test: atest CtsInputMethodTestCases
Change-Id: I1689e7a7a30ed717520e9d3c160e1727202ee15b
parent b0ee36ed
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -1625,6 +1625,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
            }
            mHandler.removeCallbacks(mUserSwitchHandlerTask);
        }
        // Hide soft input before user switch task since switch task may block main handler a while
        // and delayed the MSG_HIDE_SOFT_INPUT.
        hideCurrentInputLocked(
                mCurFocusedWindow, 0, null, SoftInputShowHideReason.HIDE_SWITCH_USER);
        final UserSwitchHandlerTask task = new UserSwitchHandlerTask(this, userId,
                clientToBeReset);
        mUserSwitchHandlerTask = task;
@@ -1750,11 +1754,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
        final boolean initialUserSwitch = TextUtils.isEmpty(defaultImiId);
        mLastSystemLocales = mRes.getConfiguration().getLocales();

        // TODO: Is it really possible that switchUserLocked() happens before system ready?
        if (mSystemReady) {
            hideCurrentInputLocked(
                    mCurFocusedWindow, 0, null, SoftInputShowHideReason.HIDE_SWITCH_USER);

        // The mSystemReady flag is set during boot phase,
        // and user switch would not happen at that time.
        resetCurrentMethodAndClient(UnbindReason.SWITCH_USER);
        buildInputMethodListLocked(initialUserSwitch);
        if (TextUtils.isEmpty(mSettings.getSelectedInputMethod())) {
@@ -1763,7 +1764,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
            resetDefaultImeLocked(mContext);
        }
        updateFromSettingsLocked(true);
        }

        if (initialUserSwitch) {
            InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed(mIPackageManager,