From 08abd0f05f5451df7150d7fd718ca5c49aa486d7 Mon Sep 17 00:00:00 2001 From: arangelov Date: Fri, 24 Jan 2020 17:09:56 +0000 Subject: [PATCH] Allow cross-profile interaction when called from the system process. This is done by allowing INTERACT_ACROSS_USERS_FULL to interact cross-profile and make system_server use INTERACT_ACROSS_USERS_FULL. Bug: 148279634 Test: manually verified the icons are loading cross-profile Test: atest ManagedProfileTest#testCanGetWorkShortcutIconDrawableFromPersonalProfile Test: atest ManagedProfileTest#testCanGetPersonalShortcutIconDrawableFromWorkProfile Change-Id: I8da69a7cabd00bc3422cdd53af35604c248029af --- core/java/android/content/pm/LauncherApps.java | 11 ++++++++--- core/res/AndroidManifest.xml | 1 + .../com/android/server/pm/LauncherAppsService.java | 5 +++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java index cea0b6b5f3ad5..88deec7b083ac 100644 --- a/core/java/android/content/pm/LauncherApps.java +++ b/core/java/android/content/pm/LauncherApps.java @@ -16,6 +16,7 @@ package android.content.pm; +import static android.Manifest.permission; import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.NonNull; @@ -485,11 +486,15 @@ public class LauncherApps { } /** - * Show an error log on logcat, when the calling user is a managed profile, and the target - * user is different from the calling user, in order to help developers to detect it. + * Show an error log on logcat, when the calling user is a managed profile, the target + * user is different from the calling user, and it is not called from a package that has the + * {@link permission.INTERACT_ACROSS_USERS_FULL} permission, in order to help + * developers to detect it. */ private void logErrorForInvalidProfileAccess(@NonNull UserHandle target) { - if (UserHandle.myUserId() != target.getIdentifier() && mUserManager.isManagedProfile()) { + if (UserHandle.myUserId() != target.getIdentifier() && mUserManager.isManagedProfile() + && mContext.checkSelfPermission(permission.INTERACT_ACROSS_USERS_FULL) + != PackageManager.PERMISSION_GRANTED) { Log.w(TAG, "Accessing other profiles/users from managed profile is no longer allowed."); } } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 181a32d062331..6206b57d97b38 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -2377,6 +2377,7 @@ @hide --> +