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

Commit cb1c539c authored by Orhan Uysal's avatar Orhan Uysal
Browse files

Restore all user visible tasks on user switch.

Also make sure that there is only one entry for tasks being added for
non-current users.

Test: Manually test that an activity that's marked as visible for all
users and runs on User 0, is restored on user switch if it's also
visible previously.
Test: atest RootWindowContainerTest
Bug: 381038076
Flag: com.android.window.flags.enable_top_visible_root_task_per_user_tracking

Change-Id: Ibfa050915a354b7a31e63bcb1f2c510203a0d2f7
parent 695f6d6c
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -1941,7 +1941,8 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
        if (Flags.enableTopVisibleRootTaskPerUserTracking()) {
            final IntArray visibleRootTasks = new IntArray();
            forAllRootTasks(rootTask -> {
                if (mCurrentUser == rootTask.mUserId && rootTask.isVisibleRequested()) {
                if ((mCurrentUser == rootTask.mUserId || rootTask.showForAllUsers())
                        && rootTask.isVisible()) {
                    visibleRootTasks.add(rootTask.getRootTaskId());
                }
            }, /* traverseTopToBottom */ false);
@@ -2045,6 +2046,11 @@ class RootWindowContainer extends WindowContainer<DisplayContent>

            if (Flags.enableTopVisibleRootTaskPerUserTracking()) {
                final IntArray rootTasks = mUserVisibleRootTasks.get(userId, new IntArray());
                // If root task already exists in the list, move it to the top instead.
                final int rootTaskIndex = rootTasks.indexOf(rootTask.getRootTaskId());
                if (rootTaskIndex != -1) {
                    rootTasks.remove(rootTaskIndex);
                }
                rootTasks.add(rootTask.getRootTaskId());
                mUserVisibleRootTasks.put(userId, rootTasks);
            } else {
+10 −4
Original line number Diff line number Diff line
@@ -1348,13 +1348,19 @@ public class RootWindowContainerTests extends WindowTestsBase {
                WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD, true /* onTop */);
        doReturn(rootTask3).when(mRootWindowContainer).getTopDisplayFocusedRootTask();

        // Set up user ids and visibility
        // Set up child tasks inside root tasks and set some of them visible
        final Task task1 = new TaskBuilder(mSupervisor).setOnTop(true).setParentTask(
                rootTask1).build();
        final Task task2 = new TaskBuilder(mSupervisor).setOnTop(true).setParentTask(
                rootTask2).build();
        final Task task3 = new TaskBuilder(mSupervisor).setOnTop(true).setParentTask(
                rootTask3).build();
        rootTask1.mUserId = mRootWindowContainer.mCurrentUser;
        rootTask2.mUserId = mRootWindowContainer.mCurrentUser;
        rootTask3.mUserId = mRootWindowContainer.mCurrentUser;
        rootTask1.mVisibleRequested = false;
        rootTask2.mVisibleRequested = true;
        rootTask3.mVisibleRequested = true;
        doReturn(false).when(task1).isVisible();
        doReturn(true).when(task2).isVisible();
        doReturn(true).when(task3).isVisible();

        // Switch to a different user
        int currentUser = mRootWindowContainer.mCurrentUser;