From f7526b58960608887b064670bb42f41aa28b8f41 Mon Sep 17 00:00:00 2001 From: Yohei Yukawa Date: Sat, 11 Feb 2017 20:57:10 -0800 Subject: [PATCH] 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 1a5838e966eab7a9f0dca71cabbc9922babb995e 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 --- .../IInputMethodWrapper.java | 44 ++++++------------- .../android/internal/view/IInputMethod.aidl | 5 +-- .../server/InputMethodManagerService.java | 36 ++++----------- 3 files changed, 25 insertions(+), 60 deletions(-) diff --git a/core/java/android/inputmethodservice/IInputMethodWrapper.java b/core/java/android/inputmethodservice/IInputMethodWrapper.java index 167d5a09a2dc4..bc407504a20db 100644 --- a/core/java/android/inputmethodservice/IInputMethodWrapper.java +++ b/core/java/android/inputmethodservice/IInputMethodWrapper.java @@ -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); - 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); + if (restarting) { + inputMethod.restartInput(ic, info); + } else { + inputMethod.startInput(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 diff --git a/core/java/com/android/internal/view/IInputMethod.aidl b/core/java/com/android/internal/view/IInputMethod.aidl index 6ab1ec797a22c..9870612dfac51 100644 --- a/core/java/com/android/internal/view/IInputMethod.aidl +++ b/core/java/com/android/internal/view/IInputMethod.aidl @@ -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); diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index 2b3d8d4e1fb14..b9c47e759bda1 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -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; + 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.startInput((IInputContext) args.arg2, missingMethods, - (EditorInfo) args.arg3); - } catch (RemoteException e) { - } - args.recycle(); - return true; - } - case MSG_RESTART_INPUT: { - int missingMethods = msg.arg1; - args = (SomeArgs) msg.obj; - 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();