From cd8958e685c82612060eed08eb53ebffced152ed Mon Sep 17 00:00:00 2001 From: Issei Suzuki Date: Thu, 1 Dec 2022 12:58:29 +0000 Subject: 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 --- services/core/java/com/android/server/wm/Transition.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index ec3962c282f6..e90a52f774a1 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -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(); } -- cgit v1.2.3-59-g8ed1b