diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityStack.java | 22 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/RootWindowContainer.java | 3 |
2 files changed, 20 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index db4c3ea4cf06..e9768a26f571 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -2443,7 +2443,7 @@ class ActivityStack extends Task { forAllActivities(ActivityRecord::removeLaunchTickRunnable); } - private void updateTransitLocked(int transit, ActivityOptions options) { + private void updateTransitLocked(int transit, ActivityOptions options, boolean forceOverride) { if (options != null) { ActivityRecord r = topRunningActivity(); if (r != null && !r.isState(RESUMED)) { @@ -2452,7 +2452,8 @@ class ActivityStack extends Task { ActivityOptions.abort(options); } } - getDisplay().mDisplayContent.prepareAppTransition(transit, false); + getDisplay().mDisplayContent.prepareAppTransition(transit, false, + 0 /* flags */, forceOverride); } final void moveTaskToFront(Task tr, boolean noAnimation, ActivityOptions options, @@ -2472,8 +2473,17 @@ class ActivityStack extends Task { // nothing to do! if (noAnimation) { ActivityOptions.abort(options); + } else if (isSingleTaskInstance()) { + // When a task is moved front on the display which can only contain one task, start + // a special transition. + // {@link AppTransitionController#handleAppTransitionReady} later picks up the + // transition, and schedules + // {@link ITaskStackListener#onSingleTaskDisplayDrawn} callback which is triggered + // after contents are drawn on the display. + updateTransitLocked(TRANSIT_SHOW_SINGLE_TASK_DISPLAY, options, + true /* forceOverride */); } else { - updateTransitLocked(TRANSIT_TASK_TO_FRONT, options); + updateTransitLocked(TRANSIT_TASK_TO_FRONT, options, false /* forceOverride */); } return; } @@ -2519,9 +2529,13 @@ class ActivityStack extends Task { mStackSupervisor.mNoAnimActivities.add(r); } ActivityOptions.abort(options); + } else if (isSingleTaskInstance()) { + updateTransitLocked(TRANSIT_SHOW_SINGLE_TASK_DISPLAY, options, + true /* forceOverride */); } else { - updateTransitLocked(TRANSIT_TASK_TO_FRONT, options); + updateTransitLocked(TRANSIT_TASK_TO_FRONT, options, false /* forceOverride */); } + // If a new task is moved to the front, then mark the existing top activity as // supporting diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index c7ffc067427d..4700864c03bc 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -2375,7 +2375,8 @@ class RootWindowContainer extends WindowContainer<DisplayContent> // triggered after contents are drawn on the display. if (display.isSingleTaskInstance()) { display.mDisplayContent.prepareAppTransition( - TRANSIT_SHOW_SINGLE_TASK_DISPLAY, false); + TRANSIT_SHOW_SINGLE_TASK_DISPLAY, false, + 0 /* flags */, true /* forceOverride*/); } stack.awakeFromSleepingLocked(); if (display.isSingleTaskInstance()) { |