From beafcf1562b8115f5d289f5587699a6a3e40e612 Mon Sep 17 00:00:00 2001 From: Jeremy Sim Date: Fri, 19 May 2023 15:56:47 -0700 Subject: Fix bug with drag-to-split involving work profiles This patch fixes a bug where the user would unexpectedly create a split with the work profile version of an app when intending to split with the personal profile version. The bug occurred because RecentTasksController#findTaskInBackground only checked for ComponentName equality, not for userId equality. So when dragging to split, it would accidentally find the background (work) version of the task instead of creating a new (personal) one. Fixed by adding a check for userId equality. Fixes: 283021596 Test: Manual Change-Id: I128f93267af57a74f5a6237d4ad3b841ca194499 --- .../src/com/android/wm/shell/recents/RecentTasksController.java | 5 +++-- .../src/com/android/wm/shell/splitscreen/SplitScreenController.java | 2 +- .../com/android/wm/shell/splitscreen/SplitScreenControllerTests.java | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java index 5c9709c756f7..f35eda6caef0 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java @@ -371,7 +371,8 @@ public class RecentTasksController implements TaskStackListenerCallback, * Find the background task that match the given component. */ @Nullable - public ActivityManager.RecentTaskInfo findTaskInBackground(ComponentName componentName) { + public ActivityManager.RecentTaskInfo findTaskInBackground(ComponentName componentName, + int userId) { if (componentName == null) { return null; } @@ -383,7 +384,7 @@ public class RecentTasksController implements TaskStackListenerCallback, if (task.isVisible) { continue; } - if (componentName.equals(task.baseIntent.getComponent())) { + if (componentName.equals(task.baseIntent.getComponent()) && userId == task.userId) { return task; } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java index 34701f1db7b7..ea33a1f1b56d 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java @@ -723,7 +723,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, // in the background with priority. final ActivityManager.RecentTaskInfo taskInfo = mRecentTasksOptional .map(recentTasks -> recentTasks.findTaskInBackground( - intent.getIntent().getComponent())) + intent.getIntent().getComponent(), userId1)) .orElse(null); if (taskInfo != null) { startTask(taskInfo.taskId, position, options); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitScreenControllerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitScreenControllerTests.java index 9189d3dd0327..fb17d8799bda 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitScreenControllerTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitScreenControllerTests.java @@ -223,7 +223,7 @@ public class SplitScreenControllerTests extends ShellTestCase { doReturn(topRunningTask).when(mRecentTasks).getTopRunningTask(); // Put the same component into a task in the background ActivityManager.RecentTaskInfo sameTaskInfo = new ActivityManager.RecentTaskInfo(); - doReturn(sameTaskInfo).when(mRecentTasks).findTaskInBackground(any()); + doReturn(sameTaskInfo).when(mRecentTasks).findTaskInBackground(any(), anyInt()); mSplitScreenController.startIntent(pendingIntent, mContext.getUserId(), null, SPLIT_POSITION_TOP_OR_LEFT, null); @@ -247,7 +247,7 @@ public class SplitScreenControllerTests extends ShellTestCase { SPLIT_POSITION_BOTTOM_OR_RIGHT); // Put the same component into a task in the background doReturn(new ActivityManager.RecentTaskInfo()).when(mRecentTasks) - .findTaskInBackground(any()); + .findTaskInBackground(any(), anyInt()); mSplitScreenController.startIntent(pendingIntent, mContext.getUserId(), null, SPLIT_POSITION_TOP_OR_LEFT, null); -- cgit v1.2.3-59-g8ed1b