diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java index 18067d4387835..de65f2f23381a 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java @@ -373,7 +373,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener if (stack.getTaskCount() > 0) { // Only preload the icon (but not the thumbnail since it may not have been taken for // the pausing activity) - preloadIcon(runningTask); + preloadIcon(runningTask.id); // At this point, we don't know anything about the stack state. So only calculate // the dimensions of the thumbnail that we need for the transition into Recents, but @@ -667,10 +667,10 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener /** * Preloads the icon of a task. */ - private void preloadIcon(ActivityManager.RunningTaskInfo task) { + private void preloadIcon(int runningTaskId) { // Ensure that we load the running task's icon RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options(); - launchOpts.runningTaskId = task.id; + launchOpts.runningTaskId = runningTaskId; launchOpts.loadThumbnails = false; launchOpts.onlyLoadForCache = true; Recents.getTaskLoader().loadTasks(mContext, sInstanceLoadPlan, launchOpts); @@ -702,7 +702,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener private ActivityOptions getThumbnailTransitionActivityOptions( ActivityManager.RunningTaskInfo runningTask, TaskStackView stackView, Rect windowOverrideRect) { - if (runningTask.stackId == FREEFORM_WORKSPACE_STACK_ID) { + if (runningTask != null && runningTask.stackId == FREEFORM_WORKSPACE_STACK_ID) { ArrayList specs = new ArrayList<>(); ArrayList tasks = stackView.getStack().getStackTasks(); TaskStackLayoutAlgorithm stackLayout = stackView.getStackAlgorithm(); @@ -813,6 +813,10 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener RecentsTaskLoader loader = Recents.getTaskLoader(); RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState(); + int runningTaskId = !mLaunchedWhileDocking && (runningTask != null) + ? runningTask.id + : -1; + // In the case where alt-tab is triggered, we never get a preloadRecents() call, so we // should always preload the tasks now. If we are dragging in recents, reload them as // the stacks might have changed. @@ -821,7 +825,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener sInstanceLoadPlan = loader.createLoadPlan(mContext); } if (mLaunchedWhileDocking || mTriggeredFromAltTab || !sInstanceLoadPlan.hasTasks()) { - loader.preloadTasks(sInstanceLoadPlan, runningTask.id, !isHomeStackVisible); + loader.preloadTasks(sInstanceLoadPlan, runningTaskId, !isHomeStackVisible); } TaskStack stack = sInstanceLoadPlan.getTaskStack(); @@ -833,12 +837,12 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener launchState.launchedFromApp = useThumbnailTransition || mLaunchedWhileDocking; launchState.launchedViaDockGesture = mLaunchedWhileDocking; launchState.launchedViaDragGesture = mDraggingInRecents; - launchState.launchedToTaskId = (runningTask != null) ? runningTask.id : -1; + launchState.launchedToTaskId = runningTaskId; launchState.launchedWithAltTab = mTriggeredFromAltTab; // Preload the icon (this will be a null-op if we have preloaded the icon already in // preloadRecents()) - preloadIcon(runningTask); + preloadIcon(runningTaskId); // Update the header bar if necessary Rect windowOverrideRect = getWindowRectOverride(growTarget);