From 5c313cb3006624e318f31d6222d179d6e9996cf3 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Thu, 7 Oct 2021 23:14:55 +0800 Subject: [PATCH] Allowing system uid to embed Task on secondary user Settings app was unable to embed task on secondary user because the uid of Settings was composed with user_id and app_id, which was not 1000. Allowing task embedding for system uid on all users. Also specify the user id while starting activity in TaskFragments. Bug: 201738029 Test: start Settings on secondary user Change-Id: I404379ed049f15abf53084d381c169d3d4cb1166 --- .../java/com/android/server/wm/ActivityStartController.java | 3 +++ services/core/java/com/android/server/wm/ActivityStarter.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/ActivityStartController.java b/services/core/java/com/android/server/wm/ActivityStartController.java index b71ad2ea71021..6ad2f7cad3c2e 100644 --- a/services/core/java/com/android/server/wm/ActivityStartController.java +++ b/services/core/java/com/android/server/wm/ActivityStartController.java @@ -501,6 +501,8 @@ public class ActivityStartController { int startActivityInTaskFragment(@NonNull TaskFragment taskFragment, @NonNull Intent activityIntent, @Nullable Bundle activityOptions, @Nullable IBinder resultTo) { + final ActivityRecord caller = + resultTo != null ? ActivityRecord.forTokenLocked(resultTo) : null; return obtainStarter(activityIntent, "startActivityInTaskFragment") .setActivityOptions(activityOptions) .setInTaskFragment(taskFragment) @@ -508,6 +510,7 @@ public class ActivityStartController { .setRequestCode(-1) .setCallingUid(Binder.getCallingUid()) .setCallingPid(Binder.getCallingPid()) + .setUserId(caller != null ? caller.mUserId : mService.getCurrentUserId()) .execute(); } diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index 170789569b3fb..47467abf459b8 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -1979,7 +1979,7 @@ class ActivityStarter { // Allowing the embedding if the task is owned by system. final int hostUid = hostTask.effectiveUid; - if (hostUid == Process.SYSTEM_UID) { + if (UserHandle.getAppId(hostUid) == Process.SYSTEM_UID) { return true; }