diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java | 13 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 3 |
2 files changed, 13 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java index bc95481dcee9..11f09d0f1343 100644 --- a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java +++ b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java @@ -56,8 +56,6 @@ class ImeInsetsSourceProvider extends InsetsSourceProvider { if (mIsImeLayoutDrawn && mShowImeRunner != null) { // Show IME if InputMethodService requested to be shown and it's layout has finished. mShowImeRunner.run(); - mIsImeLayoutDrawn = false; - mShowImeRunner = null; } } @@ -74,10 +72,19 @@ class ImeInsetsSourceProvider extends InsetsSourceProvider { mDisplayContent.mInputMethodTarget.showInsets( WindowInsets.Type.ime(), true /* fromIme */); } - mImeTargetFromIme = null; + abortShowImePostLayout(); }; } + /** + * Abort any pending request to show IME post layout. + */ + void abortShowImePostLayout() { + mImeTargetFromIme = null; + mIsImeLayoutDrawn = false; + mShowImeRunner = null; + } + private boolean isImeTargetFromDisplayContentAndImeSame() { // IMMS#mLastImeTargetWindow always considers focused window as // IME target, however DisplayContent#computeImeTarget() can compute diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 63ce1b1c7ad7..caa2c0199e49 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -7331,6 +7331,9 @@ public class WindowManagerService extends IWindowManager.Stub synchronized (mGlobalLock) { final DisplayContent dc = mRoot.getDisplayContent(displayId); if (dc != null && dc.mInputMethodTarget != null) { + // If there was a pending IME show(), reset it as IME has been + // requested to be hidden. + dc.getInsetsStateController().getImeSourceProvider().abortShowImePostLayout(); dc.mInputMethodTarget.hideInsets(WindowInsets.Type.ime(), true /* fromIme */); } } |