diff options
3 files changed, 12 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 3200291ad263..654c4602fe39 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -5635,6 +5635,13 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return false; } + // We don't need to set the window to be relatively above IME if the IME is not visible. + // In case seeing the window is animating above the app transition layer because its + // relative layer is above the IME container on the display area but actually not necessary. + if (!getDisplayContent().getImeContainer().isVisible()) { + return false; + } + if (isChildWindow()) { // If we are a child of the input method target we need this promotion. if (getParentWindow().isImeLayeringTarget()) { diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java index c81e7a25d183..b6998d84afa3 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java @@ -854,12 +854,13 @@ public class WindowStateTests extends WindowTestsBase { assertTrue(mAtm.mActiveUids.hasNonAppVisibleWindow(uid)); } - @UseTestDisplay(addWindows = W_ACTIVITY) + @UseTestDisplay(addWindows = {W_ACTIVITY, W_INPUT_METHOD}) @Test public void testNeedsRelativeLayeringToIme_notAttached() { WindowState sameTokenWindow = createWindow(null, TYPE_BASE_APPLICATION, mAppWindow.mToken, "SameTokenWindow"); mDisplayContent.setImeLayeringTarget(mAppWindow); + makeWindowVisible(mImeWindow); sameTokenWindow.mActivityRecord.getRootTask().setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); assertTrue(sameTokenWindow.needsRelativeLayeringToIme()); sameTokenWindow.removeImmediately(); @@ -872,6 +873,7 @@ public class WindowStateTests extends WindowTestsBase { WindowState sameTokenWindow = createWindow(null, TYPE_APPLICATION_STARTING, mAppWindow.mToken, "SameTokenWindow"); mDisplayContent.setImeLayeringTarget(mAppWindow); + makeWindowVisible(mImeWindow); sameTokenWindow.mActivityRecord.getRootTask().setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); assertFalse(sameTokenWindow.needsRelativeLayeringToIme()); } 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 0f223ca037ee..2df1d23c0497 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java @@ -274,6 +274,7 @@ public class ZOrderingTests extends WindowTestsBase { "imeAppTargetChildBelowWindow"); mDisplayContent.setImeLayeringTarget(imeAppTarget); + makeWindowVisible(mImeWindow); mDisplayContent.assignChildLayers(mTransaction); // Ime should be above all app windows except for child windows that are z-ordered above it @@ -599,6 +600,7 @@ public class ZOrderingTests extends WindowTestsBase { WINDOWING_MODE_MULTI_WINDOW); mDisplayContent.setImeLayeringTarget(mAppWindow); mDisplayContent.setImeInputTarget(mAppWindow); + makeWindowVisible(mImeWindow); // Create a popupWindow assertWindowHigher(mImeWindow, mAppWindow); |