diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index d5a0d05b0f845..a094c816320a2 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -28,6 +28,7 @@ import static android.view.Display.TYPE_INTERNAL; import static android.view.InsetsState.ITYPE_BOTTOM_DISPLAY_CUTOUT; import static android.view.InsetsState.ITYPE_BOTTOM_GESTURES; import static android.view.InsetsState.ITYPE_BOTTOM_TAPPABLE_ELEMENT; +import static android.view.InsetsState.ITYPE_IME; import static android.view.InsetsState.ITYPE_LEFT_DISPLAY_CUTOUT; import static android.view.InsetsState.ITYPE_LEFT_GESTURES; import static android.view.InsetsState.ITYPE_NAVIGATION_BAR; @@ -1469,8 +1470,14 @@ public class DisplayPolicy { */ public void beginLayoutLw(DisplayFrames displayFrames, int uiMode) { displayFrames.onBeginLayout(); - updateInsetsStateForDisplayCutout(displayFrames, - mDisplayContent.getInsetsStateController().getRawInsetsState()); + final InsetsState insetsState = + mDisplayContent.getInsetsStateController().getRawInsetsState(); + + // Reset the frame of IME so that the layout of windows above IME won't get influenced. + // Once we layout the IME, frames will be set again on the source. + insetsState.getSource(ITYPE_IME).setFrame(0, 0, 0, 0); + + updateInsetsStateForDisplayCutout(displayFrames, insetsState); mSystemGestures.screenWidth = displayFrames.mUnrestricted.width(); mSystemGestures.screenHeight = displayFrames.mUnrestricted.height();