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

Commit 67bea2ef authored by Craig Mautner's avatar Craig Mautner Committed by Android (Google) Code Review
Browse files

Merge "Remove WindowManager messages from remote queue." into jb-mr2-dev

parents 34f37e74 ca0ac718
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -284,6 +284,12 @@ class IInputMethodWrapper extends IInputMethod.Stub
                flags, resultReceiver));
    }

    @Override
    public void removeSoftInputMessages() {
        mCaller.removeMessages(DO_SHOW_SOFT_INPUT);
        mCaller.removeMessages(DO_HIDE_SOFT_INPUT);
    }

    public void changeInputMethodSubtype(InputMethodSubtype subtype) {
        mCaller.executeOrSendMessage(mCaller.obtainMessageO(DO_CHANGE_INPUTMETHOD_SUBTYPE,
                subtype));
+14 −12
Original line number Diff line number Diff line
@@ -33,26 +33,28 @@ import com.android.internal.view.IInputMethodSession;
 * Service).
 * {@hide}
 */
oneway interface IInputMethod {
    void attachToken(IBinder token);
interface IInputMethod {
    oneway void attachToken(IBinder token);
    
    void bindInput(in InputBinding binding);
    oneway void bindInput(in InputBinding binding);
    
    void unbindInput();
    oneway void unbindInput();

    void startInput(in IInputContext inputContext, in EditorInfo attribute);
    oneway void startInput(in IInputContext inputContext, in EditorInfo attribute);

    void restartInput(in IInputContext inputContext, in EditorInfo attribute);
    oneway void restartInput(in IInputContext inputContext, in EditorInfo attribute);

    void createSession(IInputMethodCallback callback);
    oneway void createSession(IInputMethodCallback callback);
    
    void setSessionEnabled(IInputMethodSession session, boolean enabled);
    oneway void setSessionEnabled(IInputMethodSession session, boolean enabled);
    
    void revokeSession(IInputMethodSession session);
    oneway void revokeSession(IInputMethodSession session);
    
    void showSoftInput(int flags, in ResultReceiver resultReceiver);
    oneway void showSoftInput(int flags, in ResultReceiver resultReceiver);
    
    void hideSoftInput(int flags, in ResultReceiver resultReceiver);
    oneway void hideSoftInput(int flags, in ResultReceiver resultReceiver);

    void changeInputMethodSubtype(in InputMethodSubtype subtype);
    void removeSoftInputMessages();

    oneway void changeInputMethodSubtype(in InputMethodSubtype subtype);
}
+12 −7
Original line number Diff line number Diff line
@@ -1199,7 +1199,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
            mCurId = info.getId();
            mCurToken = new Binder();
            try {
                if (DEBUG) Slog.v(TAG, "Adding window token: " + mCurToken);
                if (true || DEBUG) Slog.v(TAG, "Adding window token: " + mCurToken);
                mIWindowManager.addWindowToken(mCurToken,
                        WindowManager.LayoutParams.TYPE_INPUT_METHOD);
            } catch (RemoteException e) {
@@ -1237,14 +1237,21 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
    public void onServiceConnected(ComponentName name, IBinder service) {
        synchronized (mMethodMap) {
            if (mCurIntent != null && name.equals(mCurIntent.getComponent())) {
                IInputMethod prevMethod = mCurMethod;
                mCurMethod = IInputMethod.Stub.asInterface(service);
                if (mCurToken == null) {
                    Slog.w(TAG, "Service connected without a token!");
                    unbindCurrentMethodLocked(false, false);
                    return;
                }
                // Remove commands relating to the previous service. Otherwise WindowManagerService
                // will reject the command because the token attached to these messages is invalid.
                // Remove messages relating to the previous service. Otherwise WindowManagerService
                // will throw a BadTokenException because the old token is being removed.
                if (prevMethod != null) {
                    try {
                        prevMethod.removeSoftInputMessages();
                    } catch (RemoteException e) {
                    }
                }
                mCaller.removeMessages(MSG_SHOW_SOFT_INPUT);
                mCaller.removeMessages(MSG_HIDE_SOFT_INPUT);
                if (true || DEBUG) Slog.v(TAG, "Initiating attach with token: " + mCurToken);
@@ -2309,8 +2316,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                try {
                    if (true || DEBUG) Slog.v(TAG, "Calling " + args.arg1 + ".showSoftInput("
                            + msg.arg1 + ", " + args.arg2 + ")");
                    ((IInputMethod)args.arg1).showSoftInput(msg.arg1,
                            (ResultReceiver)args.arg2);
                    ((IInputMethod)args.arg1).showSoftInput(msg.arg1, (ResultReceiver)args.arg2);
                } catch (RemoteException e) {
                }
                args.recycle();
@@ -2320,8 +2326,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                try {
                    if (true || DEBUG) Slog.v(TAG, "Calling " + args.arg1 + ".hideSoftInput(0, "
                            + args.arg2 + ")");
                    ((IInputMethod)args.arg1).hideSoftInput(0,
                            (ResultReceiver)args.arg2);
                    ((IInputMethod)args.arg1).hideSoftInput(0, (ResultReceiver)args.arg2);
                } catch (RemoteException e) {
                }
                args.recycle();