Fix WM shell crash when targets belong to a different display.

When showWhenLocked activity is launched on a second display, it's
possible that a window container for a wallpaper on the default display
and the showWhenLocked activity on the second display are both collected
for app transition.

This is a workaround to prevent NPE for such cases.

Bug: 260997053
Test: atest MultiDisplayLockedKeyguardTests
Change-Id: I9dbd0928aa785a6d547b8e19841748280ba982c9
This commit is contained in:
Issei Suzuki
2022-12-01 12:58:29 +00:00
parent 2b46e4671b
commit cd8958e685

View File

@@ -1645,8 +1645,11 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
WindowContainer<?> ancestor = findCommonAncestor(sortedTargets, changes, topApp);
// make leash based on highest (z-order) direct child of ancestor with a participant.
WindowContainer leashReference = sortedTargets.get(0);
// Make leash based on highest (z-order) direct child of ancestor with a participant.
// TODO(b/261418859): Handle the case when the target contains window containers which
// belong to a different display. As a workaround we use topApp, from which wallpaper
// window container is removed, instead of sortedTargets here.
WindowContainer leashReference = topApp;
while (leashReference.getParent() != ancestor) {
leashReference = leashReference.getParent();
}