diff options
| author | 2022-05-12 23:22:07 +0000 | |
|---|---|---|
| committer | 2022-05-12 23:22:07 +0000 | |
| commit | bd7ac0c64654ba373be94a46eb6a93b6876d1e64 (patch) | |
| tree | d97c499fec96d66425c72a06143a74f28bd15ca6 | |
| parent | e320ce441d0f03f30d3ca5d95afeaf532ce60932 (diff) | |
| parent | c16b5740556d39e9cb2323ffdc164475bd757883 (diff) | |
Merge "Fix IME callback not being re-registered on screen off / on." into tm-dev
| -rw-r--r-- | core/java/android/inputmethodservice/InputMethodService.java | 6 | ||||
| -rw-r--r-- | core/java/android/window/ImeOnBackInvokedDispatcher.java | 6 |
2 files changed, 11 insertions, 1 deletions
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index 25296bc0a8b9..200fe22edaad 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -1625,7 +1625,6 @@ public class InputMethodService extends AbstractInputMethodService { // when IME developers are doing something unsupported. InputMethodPrivilegedOperationsRegistry.remove(mToken); } - unregisterCompatOnBackInvokedCallback(); mImeDispatcher = null; } @@ -2788,6 +2787,11 @@ public class InputMethodService extends AbstractInputMethodService { if (mInkWindow != null) { finishStylusHandwriting(); } + // Back callback is typically unregistered in {@link #hideWindow()}, but it's possible + // for {@link #doFinishInput()} to be called without {@link #hideWindow()} so we also + // unregister here. + // TODO(b/232341407): Add CTS to verify back behavior after screen on / off. + unregisterCompatOnBackInvokedCallback(); } void doStartInput(InputConnection ic, EditorInfo attribute, boolean restarting) { diff --git a/core/java/android/window/ImeOnBackInvokedDispatcher.java b/core/java/android/window/ImeOnBackInvokedDispatcher.java index d5763aa25884..8bdf233b81c8 100644 --- a/core/java/android/window/ImeOnBackInvokedDispatcher.java +++ b/core/java/android/window/ImeOnBackInvokedDispatcher.java @@ -158,6 +158,12 @@ public class ImeOnBackInvokedDispatcher implements OnBackInvokedDispatcher, Parc /** Clears all registered callbacks on the instance. */ public void clear() { + // Unregister previously registered callbacks if there's any. + if (getReceivingDispatcher() != null) { + for (OnBackInvokedCallback callback : mImeCallbackMap.values()) { + getReceivingDispatcher().unregisterOnBackInvokedCallback(callback); + } + } mImeCallbackMap.clear(); } |