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

Commit f7526b58 authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

Merge restartInput into startInput in internal IPC

This is the 2nd attempt to merge restartInput into startInput in
internal IPC after fixing the mistake in new parameter order in
the previous CL [1].

As a preparation to start tracking all the event flows that
cause InputMethodManagerService#setImeWindowStatus(), this CL
merges an internal IPC method IInputMethod#restartInput() into
IInputMethod#startInput() in favor of simplicity.

This is a refactoring CL that should have no behavior change.

 [1]: Ifda6f74ac1b1370d9e9a9fe60354b692121fdcb9
      1a5838e9

Test: Set true to InputMethodService#DEBUG and make sure startInput()
      and restartInput() are called in the following scenario.
      1. Complete the setup wizard.
      2. adb shell am start -a android.app.action.SET_NEW_PASSWORD
      3. Proceed to "Choose your password" page
      4. Make sure startInput() gets called.
      5. Type "aaaa" then hit "CONTINUE" button.
      6. Make sure restartInput() gets called.
Bug: 35079353
Change-Id: I476d0cf8cbb0a0134941854f9337d9ad15e66a71
parent 9a49f85a
Loading
Loading
Loading
Loading
+14 −30
Original line number Diff line number Diff line
@@ -61,7 +61,6 @@ class IInputMethodWrapper extends IInputMethod.Stub
    private static final int DO_SET_INPUT_CONTEXT = 20;
    private static final int DO_UNSET_INPUT_CONTEXT = 30;
    private static final int DO_START_INPUT = 32;
    private static final int DO_RESTART_INPUT = 34;
    private static final int DO_CREATE_SESSION = 40;
    private static final int DO_SET_SESSION_ENABLED = 45;
    private static final int DO_REVOKE_SESSION = 50;
@@ -164,26 +163,19 @@ class IInputMethodWrapper extends IInputMethod.Stub
                inputMethod.unbindInput();
                return;
            case DO_START_INPUT: {
                SomeArgs args = (SomeArgs)msg.obj;
                int missingMethods = msg.arg1;
                IInputContext inputContext = (IInputContext)args.arg1;
                InputConnection ic = inputContext != null
                final SomeArgs args = (SomeArgs) msg.obj;
                final int missingMethods = msg.arg1;
                final boolean restarting = msg.arg2 != 0;
                final IInputContext inputContext = (IInputContext) args.arg1;
                final EditorInfo info = (EditorInfo) args.arg2;
                final InputConnection ic = inputContext != null
                        ? new InputConnectionWrapper(mTarget, inputContext, missingMethods) : null;
                EditorInfo info = (EditorInfo)args.arg2;
                info.makeCompatible(mTargetSdkVersion);
                if (restarting) {
                    inputMethod.restartInput(ic, info);
                } else {
                    inputMethod.startInput(ic, info);
                args.recycle();
                return;
                }
            case DO_RESTART_INPUT: {
                SomeArgs args = (SomeArgs)msg.obj;
                int missingMethods = msg.arg1;
                IInputContext inputContext = (IInputContext)args.arg1;
                InputConnection ic = inputContext != null
                        ? new InputConnectionWrapper(mTarget, inputContext, missingMethods) : null;
                EditorInfo info = (EditorInfo)args.arg2;
                info.makeCompatible(mTargetSdkVersion);
                inputMethod.restartInput(ic, info);
                args.recycle();
                return;
            }
@@ -265,17 +257,9 @@ class IInputMethodWrapper extends IInputMethod.Stub
    @Override
    public void startInput(IInputContext inputContext,
            @InputConnectionInspector.MissingMethodFlags final int missingMethods,
            EditorInfo attribute) {
        mCaller.executeOrSendMessage(mCaller.obtainMessageIOO(DO_START_INPUT,
                missingMethods, inputContext, attribute));
    }

    @Override
    public void restartInput(IInputContext inputContext,
            @InputConnectionInspector.MissingMethodFlags final int missingMethods,
            EditorInfo attribute) {
        mCaller.executeOrSendMessage(mCaller.obtainMessageIOO(DO_RESTART_INPUT,
                missingMethods, inputContext, attribute));
            EditorInfo attribute, boolean restarting) {
        mCaller.executeOrSendMessage(mCaller.obtainMessageIIOO(DO_START_INPUT,
                missingMethods, restarting ? 1 : 0, inputContext, attribute));
    }

    @Override
+2 −3
Original line number Diff line number Diff line
@@ -38,9 +38,8 @@ oneway interface IInputMethod {

    void unbindInput();

    void startInput(in IInputContext inputContext, int missingMethods, in EditorInfo attribute);

    void restartInput(in IInputContext inputContext, int missingMethods, in EditorInfo attribute);
    void startInput(in IInputContext inputContext, int missingMethods, in EditorInfo attribute,
            boolean restarting);

    void createSession(in InputChannel channel, IInputSessionCallback callback);

+9 −27
Original line number Diff line number Diff line
@@ -175,7 +175,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
    static final int MSG_CREATE_SESSION = 1050;

    static final int MSG_START_INPUT = 2000;
    static final int MSG_RESTART_INPUT = 2010;

    static final int MSG_UNBIND_CLIENT = 3000;
    static final int MSG_BIND_CLIENT = 3010;
@@ -1340,15 +1339,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
            mBoundToMethod = true;
        }
        final SessionState session = mCurClient.curSession;
        if (initial) {
            executeOrSendMessage(session.method, mCaller.obtainMessageIOOO(
                    MSG_START_INPUT, mCurInputContextMissingMethods, session, mCurInputContext,
                    mCurAttribute));
        } else {
            executeOrSendMessage(session.method, mCaller.obtainMessageIOOO(
                    MSG_RESTART_INPUT, mCurInputContextMissingMethods, session, mCurInputContext,
                    mCurAttribute));
        }
        executeOrSendMessage(session.method, mCaller.obtainMessageIIOOO(
                MSG_START_INPUT, mCurInputContextMissingMethods, initial ? 0 : 1 /* restarting */,
                session, mCurInputContext, mCurAttribute));
        if (mShowRequested) {
            if (DEBUG) Slog.v(TAG, "Attach new input asks to show input");
            showCurrentInputLocked(getAppShowFlags(), null);
@@ -2896,26 +2889,15 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
            // ---------------------------------------------------------

            case MSG_START_INPUT: {
                int missingMethods = msg.arg1;
                args = (SomeArgs) msg.obj;
                try {
                    SessionState session = (SessionState) args.arg1;
                    setEnabledSessionInMainThread(session);
                    session.method.startInput((IInputContext) args.arg2, missingMethods,
                            (EditorInfo) args.arg3);
                } catch (RemoteException e) {
                }
                args.recycle();
                return true;
            }
            case MSG_RESTART_INPUT: {
                int missingMethods = msg.arg1;
                final int missingMethods = msg.arg1;
                final boolean restarting = msg.arg2 != 0;
                args = (SomeArgs) msg.obj;
                final SessionState session = (SessionState) args.arg1;
                final IInputContext inputContext = (IInputContext) args.arg2;
                final EditorInfo editorInfo = (EditorInfo) args.arg3;
                try {
                    SessionState session = (SessionState) args.arg1;
                    setEnabledSessionInMainThread(session);
                    session.method.restartInput((IInputContext) args.arg2, missingMethods,
                            (EditorInfo) args.arg3);
                    session.method.startInput(inputContext, missingMethods, editorInfo, restarting);
                } catch (RemoteException e) {
                }
                args.recycle();