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 cbc1bdfa0e9ea..f1b322ed24ba0 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 6ce36f1a3eb6e..6661c30723d27 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 e925ce5c2dac8..3ec6ab41033a5 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(); @@ -2527,7 +2527,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); } }