diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayContent.java | 5 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java | 19 |
2 files changed, 23 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 55ac44598823..40549548da62 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -5009,8 +5009,11 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // exists so it get's layered above the starting window. if (imeTarget != null && !(imeTarget.mActivityRecord != null && imeTarget.mActivityRecord.hasStartingWindow())) { + final WindowToken imeControlTargetToken = + mImeControlTarget != null && mImeControlTarget.getWindow() != null + ? mImeControlTarget.getWindow().mToken : null; final boolean canImeTargetSetRelativeLayer = imeTarget.getSurfaceControl() != null - && imeTarget == mImeControlTarget + && imeTarget.mToken == imeControlTargetToken && !imeTarget.inMultiWindowMode() && imeTarget.mToken.getActivity(app -> app.isAnimating(TRANSITION | PARENTS, ANIMATION_TYPE_ALL & ~ANIMATION_TYPE_RECENTS)) == null; diff --git a/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java b/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java index 049966c7310d..4dffe7e8345b 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java @@ -428,6 +428,25 @@ public class ZOrderingTests extends WindowTestsBase { assertWindowHigher(mImeWindow, imeAppTarget); } + @Test + public void testAssignWindowLayers_ForImeOnPopupImeLayeringTarget() { + final WindowState imeAppTarget = createWindow(null, TYPE_APPLICATION, + mAppWindow.mActivityRecord, "imeAppTarget"); + mDisplayContent.setImeInputTarget(imeAppTarget); + mDisplayContent.setImeLayeringTarget(imeAppTarget); + mDisplayContent.setImeControlTarget(imeAppTarget); + + // Set a popup IME layering target and keeps the original IME control target behinds it. + final WindowState popupImeTargetWin = createWindow(imeAppTarget, + TYPE_APPLICATION_SUB_PANEL, mAppWindow.mActivityRecord, "popupImeTargetWin"); + mDisplayContent.setImeLayeringTarget(popupImeTargetWin); + mDisplayContent.updateImeParent(); + + // Ime should on top of the popup IME layering target window. + mDisplayContent.assignChildLayers(mTransaction); + assertWindowHigher(mImeWindow, popupImeTargetWin); + } + @Test public void testAssignWindowLayers_ForNegativelyZOrderedSubtype() { |