From 282cf0867f1728d305ece77ec74b83a33d6884a9 Mon Sep 17 00:00:00 2001 From: Iris Yang Date: Wed, 15 Jun 2022 21:19:51 +0800 Subject: [PATCH] Keep the default display's top running task in the top of running list While we move a task to virtual display, we will receive onTaskMovedToFront() callback to add the task(on virtual display) into the running list. It cause the first item of Recents is virtual display's task but the thumbnail view is showing default display's task snapshot. This change is to keep default display's top task in the first while adding a virtual display's task into the running task list. Fix: 235797788 Test: 1.Launch app1 on default display, launch app2 on virtual display, enter Recents, observed the recent animation and overview is showing app1. 2.Launch app1 on default display, swipe app1 to home, launch app2 on virtual display, enter Recents, observed the overview is showing app2. https://drive.google.com/file/d/1XkGNupJknmFKqjE3c97s6ieCKN5v-n_z/view?resourcekey=0-NLDIaK2EV2tG2ItccUdxDw Change-Id: Ibb740986782eadf02672081cbd716fed04be6468 --- .../com/android/quickstep/TopTaskTracker.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/quickstep/src/com/android/quickstep/TopTaskTracker.java b/quickstep/src/com/android/quickstep/TopTaskTracker.java index 42fa86d970..cfcba4c30e 100644 --- a/quickstep/src/com/android/quickstep/TopTaskTracker.java +++ b/quickstep/src/com/android/quickstep/TopTaskTracker.java @@ -20,6 +20,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.content.Intent.ACTION_CHOOSER; import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS; +import static android.view.Display.DEFAULT_DISPLAY; import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_TOP_OR_LEFT; @@ -31,9 +32,9 @@ import androidx.annotation.UiThread; import com.android.launcher3.util.MainThreadInitializedObject; import com.android.launcher3.util.SplitConfigurationOptions; +import com.android.launcher3.util.SplitConfigurationOptions.SplitStageInfo; import com.android.launcher3.util.SplitConfigurationOptions.StagePosition; import com.android.launcher3.util.SplitConfigurationOptions.StageType; -import com.android.launcher3.util.SplitConfigurationOptions.SplitStageInfo; import com.android.launcher3.util.TraceHelper; import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.recents.model.Task.TaskKey; @@ -85,6 +86,19 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta public void onTaskMovedToFront(RunningTaskInfo taskInfo) { mOrderedTaskList.removeIf(rto -> rto.taskId == taskInfo.taskId); mOrderedTaskList.addFirst(taskInfo); + + // Keep the home display's top running task in the first while adding a non-home + // display's task to the list, to avoid showing non-home display's task upon going to + // Recents animation. + if (taskInfo.displayId != DEFAULT_DISPLAY) { + final RunningTaskInfo topTaskOnHomeDisplay = mOrderedTaskList.stream() + .filter(rto -> rto.displayId == DEFAULT_DISPLAY).findFirst().orElse(null); + if (topTaskOnHomeDisplay != null) { + mOrderedTaskList.removeIf(rto -> rto.taskId == topTaskOnHomeDisplay.taskId); + mOrderedTaskList.addFirst(topTaskOnHomeDisplay); + } + } + if (mOrderedTaskList.size() >= HISTORY_SIZE) { // If we grow in size, remove the last taskInfo which is not part of the split task. Iterator itr = mOrderedTaskList.descendingIterator();