Introduce IInputMethodManager.InitParams
IInputMethod#initializeInternal() is a hot-spot where we keep adding
new parameters recently. Introducing a dedicated parameter object
would allow us to add further parameters with fewer lines of changes.
This is a mechanical refactoring. There should be no developer
observable behavior change.
Bug: 234882948
Test: presubmit
Change-Id: I98a5424385804ec190885ba53973935f9db66b88
diff --git a/core/java/android/inputmethodservice/IInputMethodWrapper.java b/core/java/android/inputmethodservice/IInputMethodWrapper.java
index 849690d..e960df1 100644
--- a/core/java/android/inputmethodservice/IInputMethodWrapper.java
+++ b/core/java/android/inputmethodservice/IInputMethodWrapper.java
@@ -40,7 +40,6 @@
import com.android.internal.inputmethod.CancellationGroup;
import com.android.internal.inputmethod.IInlineSuggestionsRequestCallback;
import com.android.internal.inputmethod.IInputMethod;
-import com.android.internal.inputmethod.IInputMethodPrivilegedOperations;
import com.android.internal.inputmethod.IInputMethodSession;
import com.android.internal.inputmethod.IInputMethodSessionCallback;
import com.android.internal.inputmethod.IRemoteInputConnection;
@@ -172,17 +171,9 @@
args.recycle();
return;
}
- case DO_INITIALIZE_INTERNAL: {
- SomeArgs args = (SomeArgs) msg.obj;
- try {
- inputMethod.initializeInternal((IBinder) args.arg1,
- (IInputMethodPrivilegedOperations) args.arg2, msg.arg1,
- (boolean) args.arg3, msg.arg2);
- } finally {
- args.recycle();
- }
+ case DO_INITIALIZE_INTERNAL:
+ inputMethod.initializeInternal((IInputMethod.InitParams) msg.obj);
return;
- }
case DO_SET_INPUT_CONTEXT: {
inputMethod.bindInput((InputBinding)msg.obj);
return;
@@ -293,11 +284,8 @@
@BinderThread
@Override
- public void initializeInternal(IBinder token, IInputMethodPrivilegedOperations privOps,
- int configChanges, boolean stylusHwSupported,
- @InputMethodNavButtonFlags int navButtonFlags) {
- mCaller.executeOrSendMessage(mCaller.obtainMessageIIOOO(DO_INITIALIZE_INTERNAL,
- configChanges, navButtonFlags, token, privOps, stylusHwSupported));
+ public void initializeInternal(@NonNull IInputMethod.InitParams params) {
+ mCaller.executeOrSendMessage(mCaller.obtainMessageO(DO_INITIALIZE_INTERNAL, params));
}
@BinderThread
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 3a87975..c02f870 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -145,7 +145,6 @@
import com.android.internal.inputmethod.IInlineSuggestionsRequestCallback;
import com.android.internal.inputmethod.IInputContentUriToken;
import com.android.internal.inputmethod.IInputMethod;
-import com.android.internal.inputmethod.IInputMethodPrivilegedOperations;
import com.android.internal.inputmethod.IRemoteInputConnection;
import com.android.internal.inputmethod.ImeTracing;
import com.android.internal.inputmethod.InlineSuggestionsRequestInfo;
@@ -699,23 +698,21 @@
*/
@MainThread
@Override
- public final void initializeInternal(@NonNull IBinder token,
- IInputMethodPrivilegedOperations privilegedOperations, int configChanges,
- boolean stylusHwSupported, @InputMethodNavButtonFlags int navButtonFlags) {
+ public final void initializeInternal(@NonNull IInputMethod.InitParams params) {
if (mDestroyed) {
Log.i(TAG, "The InputMethodService has already onDestroyed()."
+ "Ignore the initialization.");
return;
}
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "IMS.initializeInternal");
- mConfigTracker.onInitialize(configChanges);
- mPrivOps.set(privilegedOperations);
- InputMethodPrivilegedOperationsRegistry.put(token, mPrivOps);
- if (stylusHwSupported) {
+ mConfigTracker.onInitialize(params.configChanges);
+ mPrivOps.set(params.privilegedOperations);
+ InputMethodPrivilegedOperationsRegistry.put(params.token, mPrivOps);
+ if (params.stylusHandWritingSupported) {
mInkWindow = new InkWindow(mWindow.getContext());
}
- mNavigationBarController.onNavButtonFlagsChanged(navButtonFlags);
- attachToken(token);
+ mNavigationBarController.onNavButtonFlagsChanged(params.navigationBarFlags);
+ attachToken(params.token);
Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
}
diff --git a/core/java/android/view/inputmethod/InputMethod.java b/core/java/android/view/inputmethod/InputMethod.java
index fc225fe..95add29 100644
--- a/core/java/android/view/inputmethod/InputMethod.java
+++ b/core/java/android/view/inputmethod/InputMethod.java
@@ -32,7 +32,6 @@
import com.android.internal.inputmethod.IInlineSuggestionsRequestCallback;
import com.android.internal.inputmethod.IInputMethod;
-import com.android.internal.inputmethod.IInputMethodPrivilegedOperations;
import com.android.internal.inputmethod.InlineSuggestionsRequestInfo;
import com.android.internal.inputmethod.InputMethodNavButtonFlags;
@@ -100,21 +99,12 @@
* unique token for the session it has with the system service as well as
* IPC endpoint to do some other privileged operations.
*
- * @param token special token for the system to identify
- * {@link InputMethodService}
- * @param privilegedOperations IPC endpoint to do some privileged
- * operations that are allowed only to the
- * current IME.
- * @param configChanges {@link InputMethodInfo#getConfigChanges()} declared by IME.
- * @param stylusHwSupported {@link InputMethodInfo#supportsStylusHandwriting()} declared by IME.
- * @param navButtonFlags The initial state of {@link InputMethodNavButtonFlags}.
+ * @param params Contains parameters to initialize the {@link InputMethodService}.
* @hide
*/
@MainThread
- default void initializeInternal(IBinder token,
- IInputMethodPrivilegedOperations privilegedOperations, int configChanges,
- boolean stylusHwSupported, @InputMethodNavButtonFlags int navButtonFlags) {
- attachToken(token);
+ default void initializeInternal(@NonNull IInputMethod.InitParams params) {
+ attachToken(params.token);
}
/**
diff --git a/core/java/com/android/internal/inputmethod/IInputMethod.aidl b/core/java/com/android/internal/inputmethod/IInputMethod.aidl
index 88983ce..8bab5c3 100644
--- a/core/java/com/android/internal/inputmethod/IInputMethod.aidl
+++ b/core/java/com/android/internal/inputmethod/IInputMethod.aidl
@@ -35,8 +35,16 @@
* Top-level interface to an input method component (implemented in a Service).
*/
oneway interface IInputMethod {
- void initializeInternal(IBinder token, IInputMethodPrivilegedOperations privOps,
- int configChanges, boolean stylusHwSupported, int navigationBarFlags);
+
+ parcelable InitParams {
+ IBinder token;
+ IInputMethodPrivilegedOperations privilegedOperations;
+ int configChanges;
+ boolean stylusHandWritingSupported;
+ int navigationBarFlags;
+ }
+
+ void initializeInternal(in InitParams params);
void onCreateInlineSuggestionsRequest(in InlineSuggestionsRequestInfo requestInfo,
in IInlineSuggestionsRequestCallback cb);
diff --git a/services/core/java/com/android/server/inputmethod/IInputMethodInvoker.java b/services/core/java/com/android/server/inputmethod/IInputMethodInvoker.java
index 5327d0f..6c75dbf 100644
--- a/services/core/java/com/android/server/inputmethod/IInputMethodInvoker.java
+++ b/services/core/java/com/android/server/inputmethod/IInputMethodInvoker.java
@@ -108,12 +108,17 @@
}
@AnyThread
- void initializeInternal(IBinder token, IInputMethodPrivilegedOperations privOps,
- int configChanges, boolean stylusHwSupported,
- @InputMethodNavButtonFlags int navButtonFlags) {
+ void initializeInternal(IBinder token, IInputMethodPrivilegedOperations privilegedOperations,
+ int configChanges, boolean stylusHandWritingSupported,
+ @InputMethodNavButtonFlags int navigationBarFlags) {
+ final IInputMethod.InitParams params = new IInputMethod.InitParams();
+ params.token = token;
+ params.privilegedOperations = privilegedOperations;
+ params.configChanges = configChanges;
+ params.stylusHandWritingSupported = stylusHandWritingSupported;
+ params.navigationBarFlags = navigationBarFlags;
try {
- mTarget.initializeInternal(token, privOps, configChanges, stylusHwSupported,
- navButtonFlags);
+ mTarget.initializeInternal(params);
} catch (RemoteException e) {
logRemoteException(e);
}