Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit beafcf15 authored by Jeremy Sim's avatar Jeremy Sim
Browse files

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
parent 3376f686
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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;
            }
        }
+1 −1
Original line number Diff line number Diff line
@@ -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);
+2 −2
Original line number Diff line number Diff line
@@ -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);