Merge "Don't cache IME surface in fullscreen mode" into sc-dev am: e81d43c1e1

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14665440

Change-Id: Idc2d4a4b36bffc6dc0ab89c6304cf31357a7ff51
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index f0d410f..881e0cf 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -481,6 +481,7 @@
 
     boolean mFullscreenApplied;
     boolean mIsFullscreen;
+    private boolean mLastWasInFullscreenMode;
     @UnsupportedAppUsage
     View mExtractView;
     boolean mExtractViewHidden;
@@ -920,8 +921,17 @@
         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 @@
             onWindowHidden();
             mDecorViewWasVisible = false;
         }
+        mLastWasInFullscreenMode = mIsFullscreen;
         updateFullscreenMode();
     }