From c4a038ad28009eb5840cf9f6aefbd2c873cee02e Mon Sep 17 00:00:00 2001 From: Winson Date: Thu, 26 May 2016 16:42:15 -0700 Subject: [PATCH] Prevent setting the launch task id when docking. - In this case, recents is the last running task instead of the previously fullscreen app (likely due to some preparation for the docking), and we should not set the task to launch/cancel window transitions for. Bug: 28943422 Change-Id: I3c381d3fa33a69adb7d8b606633433a898841526 --- .../android/systemui/recents/RecentsImpl.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java index cfc6c52e608b5..b20f46f6b1f54 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java @@ -372,7 +372,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 @@ -664,10 +664,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); @@ -699,7 +699,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(); @@ -810,6 +810,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. @@ -818,7 +822,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(); @@ -830,12 +834,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);