summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Taran Singh <tarandeep@google.com> 2021-05-20 20:04:43 +0000
committer Taran Singh <tarandeep@google.com> 2021-05-20 20:16:58 +0000
commitd661177926ad0ec26943efd5697c10058e6094ff (patch)
treeca0623af36f5f711775f95398562838454118112
parent13bd292dd503a97a7e51bb31f4b7831afd400f36 (diff)
Don't cache IME surface in fullscreen mode
Dont cache IME surface when IME was in fullscreen mode. This is done in order to fix IME closing when it is used with RecyclerView. There can be a special case where RecyclerView detaches the view holding mServedView when IME is in fullscreen mode While exact reason is still a mystery, short term solution is to not cache IME when it was in fullscreen mode. Fix: 187772544 Bug: 188818557 Bug: 167948123 Test: Manually using steps in bug Change-Id: I1194d08a00622f1dfa232209a70dcb0797ba192b
-rw-r--r--core/java/android/inputmethodservice/InputMethodService.java15
1 files changed, 13 insertions, 2 deletions
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index f0d410f46f81..881e0cfb58d7 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -481,6 +481,7 @@ public class InputMethodService extends AbstractInputMethodService {
boolean mFullscreenApplied;
boolean mIsFullscreen;
+ private boolean mLastWasInFullscreenMode;
@UnsupportedAppUsage
View mExtractView;
boolean mExtractViewHidden;
@@ -920,8 +921,17 @@ public class InputMethodService extends AbstractInputMethodService {
if (mHandler == null) {
mHandler = new Handler(getMainLooper());
}
- mImeSurfaceScheduledForRemoval = true;
- mHandler.postDelayed(() -> removeImeSurface(), TIMEOUT_SURFACE_REMOVAL_MILLIS);
+
+ if (mLastWasInFullscreenMode) {
+ // Caching surface / delaying surface removal can cause mServedView to detach in certain
+ // cases in RecyclerView (b/187772544).
+ // TODO(b/188818557): Re-enable IME surface caching for fullscreen mode once detaching
+ // view issues is resolved in RecyclerView.
+ removeImeSurface();
+ } else {
+ mImeSurfaceScheduledForRemoval = true;
+ mHandler.postDelayed(() -> removeImeSurface(), TIMEOUT_SURFACE_REMOVAL_MILLIS);
+ }
}
private void removeImeSurface() {
@@ -2350,6 +2360,7 @@ public class InputMethodService extends AbstractInputMethodService {
onWindowHidden();
mDecorViewWasVisible = false;
}
+ mLastWasInFullscreenMode = mIsFullscreen;
updateFullscreenMode();
}