diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java index 81d69a4fa6119..649114105e1da 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java @@ -202,6 +202,7 @@ public class TaskViewTransitions implements Transitions.TransitionHandler { } void setTaskViewVisible(TaskViewTaskController taskView, boolean visible) { + if (mTaskViews.get(taskView) == null) return; if (mTaskViews.get(taskView).mVisible == visible) return; if (taskView.getTaskInfo() == null) { // Nothing to update, task is not yet available @@ -220,17 +221,19 @@ public class TaskViewTransitions implements Transitions.TransitionHandler { void updateBoundsState(TaskViewTaskController taskView, Rect boundsOnScreen) { TaskViewRequestedState state = mTaskViews.get(taskView); + if (state == null) return; state.mBounds.set(boundsOnScreen); } void updateVisibilityState(TaskViewTaskController taskView, boolean visible) { TaskViewRequestedState state = mTaskViews.get(taskView); + if (state == null) return; state.mVisible = visible; } void setTaskBounds(TaskViewTaskController taskView, Rect boundsOnScreen) { TaskViewRequestedState state = mTaskViews.get(taskView); - if (Objects.equals(boundsOnScreen, state.mBounds)) { + if (state == null || Objects.equals(boundsOnScreen, state.mBounds)) { return; } state.mBounds.set(boundsOnScreen); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java index 45590951dd1d0..9d566860c1cdc 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java @@ -179,4 +179,23 @@ public class TaskViewTransitionsTest extends ShellTestCase { mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_CHANGE); assertThat(pendingBounds2).isNull(); } + + @Test + public void testSetTaskVisibility_taskRemoved_noNPE() { + mTaskViewTransitions.removeTaskView(mTaskViewTaskController); + + assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS); + + mTaskViewTransitions.setTaskViewVisible(mTaskViewTaskController, false); + } + + @Test + public void testSetTaskBounds_taskRemoved_noNPE() { + mTaskViewTransitions.removeTaskView(mTaskViewTaskController); + + assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS); + + mTaskViewTransitions.setTaskBounds(mTaskViewTaskController, + new Rect(0, 0, 100, 100)); + } }