From 6aedc9d95af36ea7f32534fa115c9a02fba98c40 Mon Sep 17 00:00:00 2001 From: Jeff Chang Date: Thu, 25 Aug 2022 19:37:17 +0800 Subject: [PATCH] Find activity in task with same user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FLAG_ACTIVITY_REORDER_TO_FRONT will cause the launched activity to be brought to the front of its task's history if it is already running. Without considering the userId information might bring the different user’s activity to front. Same reason as clear-top operation. This CL considers the userId to find the existing activity with the same user. Bug: 243459513 Bug: 237742126 Test: atest ActivityStarterTests Change-Id: I21e8fa1d65b2b456016210a3534c493a9607b4ba --- .../java/com/android/server/wm/ActivityStarter.java | 3 ++- services/core/java/com/android/server/wm/Task.java | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index f9e59c87a67f0..0c97e1c42a6d2 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -2379,7 +2379,8 @@ class ActivityStarter { // already be running somewhere in the history, and we want to shuffle it to // the front of the root task if so. final ActivityRecord act = - targetTask.findActivityInHistory(mStartActivity.mActivityComponent); + targetTask.findActivityInHistory(mStartActivity.mActivityComponent, + mStartActivity.mUserId); if (act != null) { final Task task = act.getTask(); task.moveActivityToFrontLocked(act); diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index e1334dc0ab88a..c44ae0916181e 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -1636,7 +1636,7 @@ class Task extends TaskFragment { * or {@code null} if none was found. */ private ActivityRecord clearTopActivities(ActivityRecord newR, int launchFlags) { - final ActivityRecord r = findActivityInHistory(newR.mActivityComponent); + final ActivityRecord r = findActivityInHistory(newR.mActivityComponent, newR.mUserId); if (r == null) return null; final PooledPredicate f = PooledLambda.obtainPredicate(Task::finishActivityAbove, @@ -1752,17 +1752,18 @@ class Task extends TaskFragment { * Find the activity in the history task within the given task. Returns * the index within the history at which it's found, or < 0 if not found. */ - ActivityRecord findActivityInHistory(ComponentName component) { + ActivityRecord findActivityInHistory(ComponentName component, int userId) { final PooledPredicate p = PooledLambda.obtainPredicate(Task::matchesActivityInHistory, - PooledLambda.__(ActivityRecord.class), component); + PooledLambda.__(ActivityRecord.class), component, userId); final ActivityRecord r = getActivity(p); p.recycle(); return r; } private static boolean matchesActivityInHistory( - ActivityRecord r, ComponentName activityComponent) { - return !r.finishing && r.mActivityComponent.equals(activityComponent); + ActivityRecord r, ComponentName activityComponent, int userId) { + return !r.finishing && r.mActivityComponent.equals(activityComponent) + && r.mUserId == userId; } /** Updates the last task description values. */