Loading services/core/java/com/android/server/wm/RootWindowContainer.java +7 −1 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 { Loading services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java +10 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
services/core/java/com/android/server/wm/RootWindowContainer.java +7 −1 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 { Loading
services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java +10 −4 Original line number Diff line number Diff line Loading @@ -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; Loading