Merge "Revert "Merge restartInput into startInput in internal IPC""
diff --git a/core/java/android/inputmethodservice/IInputMethodWrapper.java b/core/java/android/inputmethodservice/IInputMethodWrapper.java
index bdc301c..167d5a0 100644
--- a/core/java/android/inputmethodservice/IInputMethodWrapper.java
+++ b/core/java/android/inputmethodservice/IInputMethodWrapper.java
@@ -61,6 +61,7 @@
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;
@@ -165,17 +166,24 @@
case DO_START_INPUT: {
SomeArgs args = (SomeArgs)msg.obj;
int missingMethods = msg.arg1;
- boolean restarting = msg.arg2 != 0;
IInputContext inputContext = (IInputContext)args.arg1;
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);
- }
+ 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;
}
@@ -257,9 +265,17 @@
@Override
public void startInput(IInputContext inputContext,
@InputConnectionInspector.MissingMethodFlags final int missingMethods,
- EditorInfo attribute, boolean restarting) {
- mCaller.executeOrSendMessage(mCaller.obtainMessageIIOO(DO_START_INPUT,
- missingMethods, restarting ? 1 : 0, inputContext, attribute));
+ 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));
}
@Override
diff --git a/core/java/com/android/internal/view/IInputMethod.aidl b/core/java/com/android/internal/view/IInputMethod.aidl
index 9870612..6ab1ec7 100644
--- a/core/java/com/android/internal/view/IInputMethod.aidl
+++ b/core/java/com/android/internal/view/IInputMethod.aidl
@@ -38,8 +38,9 @@
void unbindInput();
- void startInput(in IInputContext inputContext, int missingMethods, in EditorInfo attribute,
- boolean restarting);
+ void startInput(in IInputContext inputContext, int missingMethods, in EditorInfo attribute);
+
+ void restartInput(in IInputContext inputContext, int missingMethods, in EditorInfo attribute);
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 b6f0f4c..2b3d8d4 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -175,6 +175,7 @@
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;
@@ -1339,9 +1340,15 @@
mBoundToMethod = true;
}
final SessionState session = mCurClient.curSession;
- executeOrSendMessage(session.method, mCaller.obtainMessageIIOOO(
- MSG_START_INPUT, initial ? 0 : 1 /* restarting */, mCurInputContextMissingMethods,
- session, mCurInputContext, mCurAttribute));
+ 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));
+ }
if (mShowRequested) {
if (DEBUG) Slog.v(TAG, "Attach new input asks to show input");
showCurrentInputLocked(getAppShowFlags(), null);
@@ -2890,13 +2897,25 @@
case MSG_START_INPUT: {
int missingMethods = msg.arg1;
- boolean restarting = msg.arg2 != 0;
args = (SomeArgs) msg.obj;
try {
SessionState session = (SessionState) args.arg1;
setEnabledSessionInMainThread(session);
session.method.startInput((IInputContext) args.arg2, missingMethods,
- (EditorInfo) args.arg3, restarting);
+ (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);
} catch (RemoteException e) {
}
args.recycle();