summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/RootWindowContainer.java8
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java14
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;