diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 6993940a35c59..9195b1043e9c6 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -3842,7 +3842,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // 4. Update the IME control target to apply any inset change and animation. // 5. Reparent the IME container surface to either the input target app, or the IME window // parent. - updateImeControlTarget(); + updateImeControlTarget(true /* forceUpdateImeParent */); } @VisibleForTesting @@ -3974,12 +3974,17 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } void updateImeControlTarget() { + updateImeControlTarget(false /* forceUpdateImeParent */); + } + + void updateImeControlTarget(boolean forceUpdateImeParent) { InsetsControlTarget prevImeControlTarget = mImeControlTarget; mImeControlTarget = computeImeControlTarget(); mInsetsStateController.onImeControlTargetChanged(mImeControlTarget); - // Update Ime parent when IME insets leash created, which is the best time that default - // IME visibility has been settled down after IME control target changed. - if (prevImeControlTarget != mImeControlTarget) { + // Update Ime parent when IME insets leash created or the new IME layering target might + // updated from setImeLayeringTarget, which is the best time that default IME visibility + // has been settled down after IME control target changed. + if (prevImeControlTarget != mImeControlTarget || forceUpdateImeParent) { updateImeParent(); }