diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java index d8a4ecbbc650e..1cd94b40f6604 100644 --- a/services/core/java/com/android/server/wm/RecentTasks.java +++ b/services/core/java/com/android/server/wm/RecentTasks.java @@ -1387,9 +1387,7 @@ class RecentTasks { return false; } - /** - * @return whether the given task can be trimmed even if it is outside the visible range. - */ + /** @return whether the given task can be trimmed even if it is outside the visible range. */ protected boolean isTrimmable(Task task) { final ActivityStack stack = task.getStack(); @@ -1404,9 +1402,13 @@ class RecentTasks { return false; } + final ActivityStack rootHomeTask = stack.getDisplayArea().getRootHomeTask(); + // Home stack does not exist. Don't trim the task. + if (rootHomeTask == null) { + return false; + } // Trim tasks that are behind the home task. - final TaskDisplayArea taskDisplayArea = stack.getDisplayArea(); - return task.compareTo(taskDisplayArea.getRootHomeTask()) < 0; + return task.compareTo(rootHomeTask) < 0; } /** Remove the tasks that user may not be able to return. */ diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java index d6ddcd0cc9f92..94c38ea107e4a 100644 --- a/services/core/java/com/android/server/wm/RecentsAnimationController.java +++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java @@ -406,8 +406,9 @@ public class RecentsAnimationController implements DeathRecipient { } // Save the minimized home height - mMinimizedHomeBounds = mDisplayContent.getDefaultTaskDisplayArea().getRootHomeTask() - .getBounds(); + final ActivityStack rootHomeTask = + mDisplayContent.getDefaultTaskDisplayArea().getRootHomeTask(); + mMinimizedHomeBounds = rootHomeTask != null ? rootHomeTask.getBounds() : null; mService.mWindowPlacerLocked.performSurfacePlacement(); diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index 37a4c1f6849b5..6a7a5f9f87540 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -195,7 +195,7 @@ final class TaskDisplayArea extends DisplayArea { return mChildren.indexOf(stack); } - ActivityStack getRootHomeTask() { + @Nullable ActivityStack getRootHomeTask() { return mRootHomeTask; } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index a948ecef48e77..03e53e4f816d2 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -1509,7 +1509,7 @@ class WindowState extends WindowContainer implements WindowManagerP return mActivityRecord != null ? mActivityRecord.getTask() : null; } - ActivityStack getRootTask() { + @Nullable ActivityStack getRootTask() { final Task task = getTask(); if (task != null) { return (ActivityStack) task.getRootTask(); @@ -2532,7 +2532,7 @@ class WindowState extends WindowContainer implements WindowManagerP final Task task = getTask(); if (task != null) { task.getDimBounds(mTmpRect); - } else { + } else if (getRootTask() != null) { getRootTask().getDimBounds(mTmpRect); } }