Only remove visible recent tasks for the current user

Bug: 128389239
Test: atest WmTests:RecentTasksTest
Change-Id: I13d1fcff8cda0e3a7ddbdb54790f6c24b6763657
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 9a8824f..98c37e6 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -2084,7 +2084,7 @@
         synchronized (mGlobalLock) {
             final long ident = Binder.clearCallingIdentity();
             try {
-                getRecentTasks().removeAllVisibleTasks();
+                getRecentTasks().removeAllVisibleTasks(mAmInternal.getCurrentUserId());
             } finally {
                 Binder.restoreCallingIdentity(ident);
             }
diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java
index 24b0213..d6c7b21 100644
--- a/services/core/java/com/android/server/wm/RecentTasks.java
+++ b/services/core/java/com/android/server/wm/RecentTasks.java
@@ -653,10 +653,10 @@
         }
     }
 
-    void removeAllVisibleTasks() {
+    void removeAllVisibleTasks(int userId) {
         for (int i = mTasks.size() - 1; i >= 0; --i) {
             final TaskRecord tr = mTasks.get(i);
-            if (isVisibleRecentTask(tr)) {
+            if (tr.userId == userId && isVisibleRecentTask(tr)) {
                 mTasks.remove(i);
                 notifyTaskRemoved(tr, true /* wasTrimmed */, true /* killProcess */);
             }
diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
index 08e6ce4..af04858 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
@@ -625,7 +625,7 @@
         // excludedTask is not trimmed.
         assertTrimmed(mTasks.get(0));
 
-        mRecentTasks.removeAllVisibleTasks();
+        mRecentTasks.removeAllVisibleTasks(TEST_USER_0_ID);
 
         // Only visible tasks removed.
         assertTrimmed(mTasks.get(0), mTasks.get(1), mTasks.get(2), mTasks.get(3));
@@ -849,11 +849,31 @@
         mRecentTasks.add(t7);
 
         // Remove all the visible tasks and ensure that they are removed
-        mRecentTasks.removeAllVisibleTasks();
+        mRecentTasks.removeAllVisibleTasks(TEST_USER_0_ID);
         assertTrimmed(t1, t2, t3, t4, t5, t6, t7);
     }
 
     @Test
+    public void testRemoveAllVisibleTasksPerUser() {
+        mRecentTasks.setParameters(-1 /* min */, 3 /* max */, 100 /* ms */);
+
+        // Create a visible task per user
+        TaskRecord t1 = createTaskBuilder(".Task1")
+                .setUserId(TEST_USER_0_ID)
+                .build();
+        mRecentTasks.add(t1);
+
+        TaskRecord t2 = createTaskBuilder(".Task1")
+                .setUserId(TEST_USER_1_ID)
+                .build();
+        mRecentTasks.add(t2);
+
+        // Remove all the visible tasks and ensure that they are removed
+        mRecentTasks.removeAllVisibleTasks(TEST_USER_0_ID);
+        assertTrimmed(t1);
+    }
+
+    @Test
     public void testNotRestoreRecentTaskApis() {
         final TaskRecord task = createTaskBuilder(".Task").build();
         final int taskId = task.taskId;