diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 7bc551b2aacc6..b76582fcf3b95 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -2179,14 +2179,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { : null; mTaskSupervisor.findTaskToMoveToFront(task, flags, realOptions, "moveTaskToFront", false /* forceNonResizable */); - - final ActivityRecord topActivity = task.getTopNonFinishingActivity(); - if (topActivity != null) { - - // We are reshowing a task, use a starting window to hide the initial draw delay - // so the transition can start earlier. - topActivity.showStartingWindow(true /* taskSwitch */); - } } finally { Binder.restoreCallingIdentity(origId); } diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java index 863faa190692c..84740683f6aa1 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java @@ -1434,10 +1434,10 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { mUserLeaving = true; } - task.mTransitionController.requestTransitionIfNeeded(TRANSIT_TO_FRONT, - 0 /* flags */, task, task /* readyGroupRef */, - options != null ? options.getRemoteTransition() : null, - null /* displayChange */); + final Transition newTransition = task.mTransitionController.isShellTransitionsEnabled() + ? task.mTransitionController.isCollecting() ? null + : task.mTransitionController.createTransition(TRANSIT_TO_FRONT) : null; + task.mTransitionController.collect(task); reason = reason + " findTaskToMoveToFront"; boolean reparented = false; if (task.isResizeable() && canUseActivityOptionsLaunchBounds(options)) { @@ -1480,6 +1480,17 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { handleNonResizableTaskIfNeeded(task, WINDOWING_MODE_UNDEFINED, mRootWindowContainer.getDefaultTaskDisplayArea(), currentRootTask, forceNonResizeable); + if (r != null) { + // Use a starting window to reduce the transition latency for reshowing the task. + // Note that with shell transition, this should be executed before requesting + // transition to avoid delaying the starting window. + r.showStartingWindow(true /* taskSwitch */); + } + if (newTransition != null) { + task.mTransitionController.requestStartTransition(newTransition, task, + options != null ? options.getRemoteTransition() : null, + null /* displayChange */); + } } finally { mUserLeaving = false; }