Merge "Fix IME callback not unregistered when IME is up during an IMM client switch." into tm-dev

This commit is contained in:
Shan Huang
2022-06-02 06:00:39 +00:00
committed by Android (Google) Code Review

View File

@@ -806,11 +806,6 @@ public class InputMethodService extends AbstractInputMethodService {
@NonNull EditorInfo editorInfo, boolean restarting,
@NonNull IBinder startInputToken, @InputMethodNavButtonFlags int navButtonFlags,
@NonNull ImeOnBackInvokedDispatcher imeDispatcher) {
mImeDispatcher = imeDispatcher;
if (mWindow != null) {
mWindow.getOnBackInvokedDispatcher().setImeOnBackInvokedDispatcher(
imeDispatcher);
}
mPrivOps.reportStartInputAsync(startInputToken);
mNavigationBarController.onNavButtonFlagsChanged(navButtonFlags);
if (restarting) {
@@ -818,6 +813,15 @@ public class InputMethodService extends AbstractInputMethodService {
} else {
startInput(inputConnection, editorInfo);
}
// Update the IME dispatcher last, so that the previously registered back callback
// (if any) can be unregistered using the old dispatcher if {@link #doFinishInput()}
// is called from {@link #startInput(InputConnection, EditorInfo)} or
// {@link #restartInput(InputConnection, EditorInfo)}.
mImeDispatcher = imeDispatcher;
if (mWindow != null) {
mWindow.getOnBackInvokedDispatcher().setImeOnBackInvokedDispatcher(
imeDispatcher);
}
}
/**
@@ -3860,6 +3864,11 @@ public class InputMethodService extends AbstractInputMethodService {
};
private void compatHandleBack() {
if (!mDecorViewVisible) {
Log.e(TAG, "Back callback invoked on a hidden IME. Removing the callback...");
unregisterCompatOnBackInvokedCallback();
return;
}
final KeyEvent downEvent = createBackKeyEvent(
KeyEvent.ACTION_DOWN, false /* isTracking */);
onKeyDown(KeyEvent.KEYCODE_BACK, downEvent);