Merge "Fix seeing a weird window animation above TaskFragment transition" into tm-dev am: 710a8ae8aa

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17504686

Change-Id: I47c71c7cd9af3fa00efefc16b670d1f59624d4ea
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Ming-Shin Lu
2022-03-31 13:08:32 +00:00
committed by Automerger Merge Worker
3 changed files with 12 additions and 1 deletions

View File

@@ -5635,6 +5635,13 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
return false; 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 (isChildWindow()) {
// If we are a child of the input method target we need this promotion. // If we are a child of the input method target we need this promotion.
if (getParentWindow().isImeLayeringTarget()) { if (getParentWindow().isImeLayeringTarget()) {

View File

@@ -854,12 +854,13 @@ public class WindowStateTests extends WindowTestsBase {
assertTrue(mAtm.mActiveUids.hasNonAppVisibleWindow(uid)); assertTrue(mAtm.mActiveUids.hasNonAppVisibleWindow(uid));
} }
@UseTestDisplay(addWindows = W_ACTIVITY) @UseTestDisplay(addWindows = {W_ACTIVITY, W_INPUT_METHOD})
@Test @Test
public void testNeedsRelativeLayeringToIme_notAttached() { public void testNeedsRelativeLayeringToIme_notAttached() {
WindowState sameTokenWindow = createWindow(null, TYPE_BASE_APPLICATION, mAppWindow.mToken, WindowState sameTokenWindow = createWindow(null, TYPE_BASE_APPLICATION, mAppWindow.mToken,
"SameTokenWindow"); "SameTokenWindow");
mDisplayContent.setImeLayeringTarget(mAppWindow); mDisplayContent.setImeLayeringTarget(mAppWindow);
makeWindowVisible(mImeWindow);
sameTokenWindow.mActivityRecord.getRootTask().setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); sameTokenWindow.mActivityRecord.getRootTask().setWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
assertTrue(sameTokenWindow.needsRelativeLayeringToIme()); assertTrue(sameTokenWindow.needsRelativeLayeringToIme());
sameTokenWindow.removeImmediately(); sameTokenWindow.removeImmediately();
@@ -872,6 +873,7 @@ public class WindowStateTests extends WindowTestsBase {
WindowState sameTokenWindow = createWindow(null, TYPE_APPLICATION_STARTING, WindowState sameTokenWindow = createWindow(null, TYPE_APPLICATION_STARTING,
mAppWindow.mToken, "SameTokenWindow"); mAppWindow.mToken, "SameTokenWindow");
mDisplayContent.setImeLayeringTarget(mAppWindow); mDisplayContent.setImeLayeringTarget(mAppWindow);
makeWindowVisible(mImeWindow);
sameTokenWindow.mActivityRecord.getRootTask().setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); sameTokenWindow.mActivityRecord.getRootTask().setWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
assertFalse(sameTokenWindow.needsRelativeLayeringToIme()); assertFalse(sameTokenWindow.needsRelativeLayeringToIme());
} }

View File

@@ -274,6 +274,7 @@ public class ZOrderingTests extends WindowTestsBase {
"imeAppTargetChildBelowWindow"); "imeAppTargetChildBelowWindow");
mDisplayContent.setImeLayeringTarget(imeAppTarget); mDisplayContent.setImeLayeringTarget(imeAppTarget);
makeWindowVisible(mImeWindow);
mDisplayContent.assignChildLayers(mTransaction); mDisplayContent.assignChildLayers(mTransaction);
// Ime should be above all app windows except for child windows that are z-ordered above it // 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); WINDOWING_MODE_MULTI_WINDOW);
mDisplayContent.setImeLayeringTarget(mAppWindow); mDisplayContent.setImeLayeringTarget(mAppWindow);
mDisplayContent.setImeInputTarget(mAppWindow); mDisplayContent.setImeInputTarget(mAppWindow);
makeWindowVisible(mImeWindow);
// Create a popupWindow // Create a popupWindow
assertWindowHigher(mImeWindow, mAppWindow); assertWindowHigher(mImeWindow, mAppWindow);