From 45dc5fd65ddbbf060ab676437d445beb60ee2af1 Mon Sep 17 00:00:00 2001 From: Massimo Carli Date: Wed, 31 May 2023 14:58:52 +0000 Subject: [PATCH] Fix NPE on TaskFragment We need to deregister the WindowContainerListener at an earlier stage to avoid a translucent activity to have a reference to an opaque one without a parent TaskFragment which causes getTaskFragment() to return null. Fixes: 278899220 Test: atest WmTests:SizeCompatTests Change-Id: I06bef5f386cffdc7e89e7e39bd33b1eb3c0ff6b8 --- services/core/java/com/android/server/wm/ActivityRecord.java | 3 +-- .../wmtests/src/com/android/server/wm/SizeCompatTests.java | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 2b2100e56f443..9f16a84415331 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -4281,6 +4281,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A mTaskSupervisor.getActivityMetricsLogger().notifyActivityRemoved(this); mTaskSupervisor.mStoppingActivities.remove(this); + mLetterboxUiController.destroy(); waitingToShow = false; // Defer removal of this activity when either a child is animating, or app transition is on @@ -4350,8 +4351,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A mWmService.updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, true /*updateInputWindows*/); } - mLetterboxUiController.destroy(); - if (!delayed) { updateReportedVisibilityLocked(); } diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java index 2dd34eb5ac4d7..705ad43fc61f8 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java @@ -406,7 +406,6 @@ public class SizeCompatTests extends WindowTestsBase { clearInvocations(translucentActivity.mLetterboxUiController); // We destroy the first opaque activity - mActivity.setState(DESTROYED, "testing"); mActivity.removeImmediately(); // Check that updateInheritedLetterbox() is invoked again