diff --git a/core/java/android/inputmethodservice/IInputMethodWrapper.java b/core/java/android/inputmethodservice/IInputMethodWrapper.java index 849690d2124a3..e960df112ae3a 100644 --- a/core/java/android/inputmethodservice/IInputMethodWrapper.java +++ b/core/java/android/inputmethodservice/IInputMethodWrapper.java @@ -40,7 +40,6 @@ import android.view.inputmethod.InputMethodSubtype; 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 @@ class IInputMethodWrapper extends IInputMethod.Stub 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 @@ class IInputMethodWrapper extends IInputMethod.Stub @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 3a879751f14b3..c02f870edbc26 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -145,7 +145,6 @@ import com.android.internal.annotations.GuardedBy; 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 @@ public class InputMethodService extends AbstractInputMethodService { */ @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 fc225fe69d962..95add29788799 100644 --- a/core/java/android/view/inputmethod/InputMethod.java +++ b/core/java/android/view/inputmethod/InputMethod.java @@ -32,7 +32,6 @@ import android.view.View; 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 @@ public interface InputMethod { * 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 88983ce803d7d..8bab5c31217d8 100644 --- a/core/java/com/android/internal/inputmethod/IInputMethod.aidl +++ b/core/java/com/android/internal/inputmethod/IInputMethod.aidl @@ -35,8 +35,16 @@ import com.android.internal.inputmethod.InlineSuggestionsRequestInfo; * 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 5327d0f918342..6c75dbf033d68 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 @@ final class IInputMethodInvoker { } @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); }