From e870d13d34ee9f6b0691e35e2b83604b8f74d3ad Mon Sep 17 00:00:00 2001 From: Chris Li Date: Tue, 27 Apr 2021 11:03:10 -0700 Subject: [PATCH] Fix NPE for checking immersive confirmation window root feature This may happen when the immersive mode change is triggered from the window removal. In this case, it will not be attached to a root. Bug: 186072738 Test: manual Change-Id: I546f9f651e3f6a26f506ed7269683b9bffa32926 --- services/core/java/com/android/server/wm/DisplayPolicy.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index 30f69dd79f5e2..37e15c71c9249 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -92,6 +92,7 @@ import static android.view.WindowManagerPolicyConstants.NAV_BAR_BOTTOM; import static android.view.WindowManagerPolicyConstants.NAV_BAR_INVALID; import static android.view.WindowManagerPolicyConstants.NAV_BAR_LEFT; import static android.view.WindowManagerPolicyConstants.NAV_BAR_RIGHT; +import static android.window.DisplayAreaOrganizer.FEATURE_UNDEFINED; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_SCREEN_ON; import static com.android.server.policy.PhoneWindowManager.TOAST_WINDOW_TIMEOUT; @@ -2667,7 +2668,8 @@ public class DisplayPolicy { if (oldImmersiveMode != newImmersiveMode) { mLastImmersiveMode = newImmersiveMode; // The immersive confirmation window should be attached to the immersive window root. - final int rootDisplayAreaId = win.getRootDisplayArea().mFeatureId; + final RootDisplayArea root = win.getRootDisplayArea(); + final int rootDisplayAreaId = root == null ? FEATURE_UNDEFINED : root.mFeatureId; mImmersiveModeConfirmation.immersiveModeChangedLw(rootDisplayAreaId, newImmersiveMode, mService.mPolicy.isUserSetupComplete(), isNavBarEmpty(disableFlags));