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
This commit is contained in:
Yohei Yukawa
2021-10-20 22:48:19 -07:00
parent df08d4937e
commit e43a10f257
2 changed files with 30 additions and 2 deletions

View File

@@ -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.

View File

@@ -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", () -> {