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

Commit e43a10f2 authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

Add RemoteInputConnectionImpl#finishComposingTextFromImm()

This is a preparation CL to make InputConnection tasks cancellable.

Currently

  RemoteInputConnectionImpl#finishComposingText()

is the only method that can be called by both RemoteInputConnection as
a Binder call and InputMethodManager as a direct invocation.  This is
not convenient because a common header data structure is going to be
added to every IPC defined in IInputContext in order to implement
InputConnection task cancelation.

Thus, this CL introduces

  RemoteInputConnectionImpl#finishComposingTextFromImm()

to decouple this code path from subsequent CLs.

There should be no observable behavior change yet in this CL.

Bug: 195115071
Test: presubmit
Change-Id: I07290af2595c7a556cb5daa8a4c0f9c4a7daa49c
parent df08d493
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -696,7 +696,7 @@ public final class InputMethodManager {
        @Override
        public void finishComposingText() {
            if (mServedInputConnection != null) {
                mServedInputConnection.finishComposingText();
                mServedInputConnection.finishComposingTextFromImm();
            }
        }

@@ -919,7 +919,7 @@ public final class InputMethodManager {
                            mRestartOnNextWindowFocus = true;
                            // Note that finishComposingText() is allowed to run
                            // even when we are not active.
                            mFallbackInputConnection.finishComposingText();
                            mFallbackInputConnection.finishComposingTextFromImm();
                        }
                        // Check focus again in case that "onWindowFocus" is called before
                        // handling this message.
+28 −0
Original line number Diff line number Diff line
@@ -430,6 +430,34 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub {
        });
    }

    /**
     * Dispatches {@link InputConnection#finishComposingText()}.
     *
     * <p>This method is intended to be called only from {@link InputMethodManager}.</p>
     */
    public void finishComposingTextFromImm() {
        dispatchWithTracing("finishComposingTextFromImm", () -> {
            if (isFinished()) {
                // In this case, #finishComposingText() is guaranteed to be called already.
                // There should be no negative impact if we ignore this call silently.
                if (DEBUG) {
                    Log.w(TAG, "Bug 35301295: Redundant finishComposingTextFromImm.");
                }
                return;
            }
            InputConnection ic = getInputConnection();
            // Note we do NOT check isActive() here, because this is safe
            // for an IME to call at any time, and we need to allow it
            // through to clean up our state after the IME has switched to
            // another client.
            if (ic == null) {
                Log.w(TAG, "finishComposingTextFromImm on inactive InputConnection");
                return;
            }
            ic.finishComposingText();
        });
    }

    @Override
    public void finishComposingText() {
        dispatchWithTracing("finishComposingText", () -> {