From b081c4279138f349cdf2525c37995eae7fe14912 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Thu, 25 Feb 2021 15:58:32 +0100 Subject: [PATCH] Fix unexpected IME show because of stale requestedVisibleAwaitingControl Fixes an issue where the IME would unexpectedly open whenever the controls change because requestedVisibleAwaitingControl might be stale. To fix this, we clear the flag whenever it has been applied after gaining control, when we hide the IME. Fixes: 181218935 Test: atest 'WindowInsetsControllerTests#testShowImeOnCreate_doesntCauseImeToReappearWhenDialogIsShown' Change-Id: I251707fc72c908829f2e69d5b1667e71123fbd0f --- core/java/android/view/ImeInsetsSourceConsumer.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/ImeInsetsSourceConsumer.java b/core/java/android/view/ImeInsetsSourceConsumer.java index f4d5a7b695eba..07d8a1b7312b6 100644 --- a/core/java/android/view/ImeInsetsSourceConsumer.java +++ b/core/java/android/view/ImeInsetsSourceConsumer.java @@ -68,8 +68,14 @@ public final class ImeInsetsSourceConsumer extends InsetsSourceConsumer { } @Override - void hide(boolean animationFinished, @AnimationType int animationType) { + public void hide() { super.hide(); + mIsRequestedVisibleAwaitingControl = false; + } + + @Override + void hide(boolean animationFinished, @AnimationType int animationType) { + hide(); if (animationFinished) { // remove IME surface as IME has finished hide animation. @@ -126,6 +132,9 @@ public final class ImeInsetsSourceConsumer extends InsetsSourceConsumer { hide(); removeSurface(); } + if (control != null) { + mIsRequestedVisibleAwaitingControl = false; + } } @Override