Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 282cf086 authored by Iris Yang's avatar Iris Yang
Browse files

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
parent f61e7bb4
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -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<RunningTaskInfo> itr = mOrderedTaskList.descendingIterator();