diff options
| author | 2024-12-19 07:44:50 -0800 | |
|---|---|---|
| committer | 2024-12-19 07:44:50 -0800 | |
| commit | df1a141e44682a9dd7d75c2f124041d6dc26b4bf (patch) | |
| tree | fd8eaa4ab192ee2d02b423fd122224669e71e58e | |
| parent | e46f40f32e46e348eb5bcd1eaeeb34f24f6d797a (diff) | |
| parent | cb1c539c356e19d3ad2c44552fd8a3b376fc2472 (diff) | |
Merge "Restore all user visible tasks on user switch." into main
| -rw-r--r-- | services/core/java/com/android/server/wm/RootWindowContainer.java | 8 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java | 14 |
2 files changed, 17 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 865d5facc4a4..4f36476c674f 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -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 { diff --git a/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java index 699ed0263756..7e62b89d35bb 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java @@ -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; |