Merge "Fix IME callback not unregistered when IME is up during an IMM client switch." into tm-dev am: 4357250002
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18699773 Change-Id: I085f908212468627d7d7c501f714372a23a75663 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user