Merge "Fix IME layering target above IME surface" into sc-v2-dev am: 175672ccef

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

Change-Id: I5a350fbfb5bfb77e2c90b426002c3fb23d697444
This commit is contained in:
TreeHugger Robot
2022-01-10 17:04:03 +00:00
committed by Automerger Merge Worker
2 changed files with 23 additions and 1 deletions

View File

@@ -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;

View File

@@ -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() {