diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 5f03f89624876..46a4f8a266731 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -3804,7 +3804,11 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } boolean shouldImeAttachedToApp() { - return isImeControlledByApp() + // Force attaching IME to the display when magnifying, or it would be magnified with + // target app together. + final boolean allowAttachToApp = (mMagnificationSpec == null); + + return allowAttachToApp && isImeControlledByApp() && mImeLayeringTarget != null && mImeLayeringTarget.mActivityRecord != null && mImeLayeringTarget.getWindowingMode() == WINDOWING_MODE_FULLSCREEN @@ -4143,14 +4147,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp */ @VisibleForTesting SurfaceControl computeImeParent() { - // Force attaching IME to the display when magnifying, or it would be magnified with - // target app together. - final boolean allowAttachToApp = (mMagnificationSpec == null); - // Attach it to app if the target is part of an app and such app is covering the entire // screen. If it's not covering the entire screen the IME might extend beyond the apps // bounds. - if (allowAttachToApp && shouldImeAttachedToApp()) { + if (shouldImeAttachedToApp()) { if (mImeLayeringTarget.mActivityRecord != mImeInputTarget.mActivityRecord) { // Do not change parent if the window hasn't requested IME. return null; diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 6afa2e0f690dd..ad4734f0526c1 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -5681,7 +5681,7 @@ class WindowState extends WindowContainer implements WindowManagerP // elevating the IME and windows above it's target above the docked divider in // split-screen, or make the popupMenu to be above the IME when the parent window is the // IME layering target in bubble/freeform mode. - if (mDisplayContent.isImeAttachedToApp()) { + if (mDisplayContent.shouldImeAttachedToApp()) { return false; }