diff options
3 files changed, 23 insertions, 15 deletions
diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/Permissions.java b/PermissionController/role-controller/java/com/android/role/controller/model/Permissions.java index 76de27651..8167953c8 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/Permissions.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/Permissions.java @@ -179,9 +179,10 @@ public class Permissions { boolean permissionOrAppOpChanged = false; - PackageManager packageManager = context.getPackageManager(); + Context userContext = UserUtils.getUserContext(context, user); + PackageManager userPackageManager = userContext.getPackageManager(); Set<String> whitelistedRestrictedPermissions = new ArraySet<>( - packageManager.getWhitelistedRestrictedPermissions(packageName, + userPackageManager.getWhitelistedRestrictedPermissions(packageName, PackageManager.FLAG_PERMISSION_WHITELIST_SYSTEM)); int sortedPermissionsToGrantLength = sortedPermissionsToGrant.length; @@ -190,7 +191,7 @@ public class Permissions { if (isRestrictedPermission(permission, context) && whitelistedRestrictedPermissions.add(permission)) { - packageManager.addWhitelistedRestrictedPermission(packageName, permission, + userPackageManager.addWhitelistedRestrictedPermission(packageName, permission, PackageManager.FLAG_PERMISSION_WHITELIST_SYSTEM); } @@ -437,9 +438,10 @@ public class Permissions { } } - PackageManager packageManager = context.getPackageManager(); + Context userContext = UserUtils.getUserContext(context, user); + PackageManager userPackageManager = userContext.getPackageManager(); Set<String> whitelistedRestrictedPermissions = - packageManager.getWhitelistedRestrictedPermissions(packageName, + userPackageManager.getWhitelistedRestrictedPermissions(packageName, PackageManager.FLAG_PERMISSION_WHITELIST_SYSTEM | PackageManager.FLAG_PERMISSION_WHITELIST_UPGRADE | PackageManager.FLAG_PERMISSION_WHITELIST_INSTALLER); @@ -457,7 +459,7 @@ public class Permissions { // Remove from the system whitelist only if not granted by default. if (!isPermissionGrantedByDefaultAsUser(packageName, permission, user, context) && whitelistedRestrictedPermissions.remove(permission)) { - packageManager.removeWhitelistedRestrictedPermission(packageName, permission, + userPackageManager.removeWhitelistedRestrictedPermission(packageName, permission, PackageManager.FLAG_PERMISSION_WHITELIST_SYSTEM); } } diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/PreferredActivity.java b/PermissionController/role-controller/java/com/android/role/controller/model/PreferredActivity.java index 438bdbdea..7ea7de046 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/PreferredActivity.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/PreferredActivity.java @@ -22,10 +22,12 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; -import android.os.Process; +import android.os.UserHandle; import androidx.annotation.NonNull; +import com.android.role.controller.util.UserUtils; + import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -68,18 +70,21 @@ public class PreferredActivity { * Configure this preferred activity specification for an application. * * @param packageName the package name of the application + * @param user the user of the application * @param context the {@code Context} to retrieve system services */ - public void configure(@NonNull String packageName, @NonNull Context context) { + public void configureAsUser(@NonNull String packageName, @NonNull UserHandle user, + @NonNull Context context) { ComponentName packageActivity = mActivity.getQualifyingComponentForPackageAsUser( - packageName, Process.myUserHandle(), context); + packageName, user, context); if (packageActivity == null) { // We might be running into some race condition here, but we can't do anything about it. // This should be handled by a future reconciliation started by the package change. return; } - PackageManager packageManager = context.getPackageManager(); + Context userContext = UserUtils.getUserContext(context, user); + PackageManager userPackageManager = userContext.getPackageManager(); int intentFilterDatasSize = mIntentFilterDatas.size(); for (int i = 0; i < intentFilterDatasSize; i++) { IntentFilterData intentFilterData = mIntentFilterDatas.get(i); @@ -93,7 +98,7 @@ public class PreferredActivity { ? IntentFilter.MATCH_CATEGORY_SCHEME : IntentFilter.MATCH_CATEGORY_EMPTY; Intent intent = intentFilterData.createIntent(); - List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, + List<ResolveInfo> resolveInfos = userPackageManager.queryIntentActivities(intent, PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE | PackageManager.MATCH_DEFAULT_ONLY); @@ -108,7 +113,7 @@ public class PreferredActivity { set.add(componentName); } - packageManager.replacePreferredActivity(intentFilter, match, set, packageActivity); + userPackageManager.replacePreferredActivity(intentFilter, match, set, packageActivity); } } diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/Role.java b/PermissionController/role-controller/java/com/android/role/controller/model/Role.java index 456929965..1d5e2d65a 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/Role.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/Role.java @@ -801,7 +801,7 @@ public class Role { int preferredActivitiesSize = mPreferredActivities.size(); for (int i = 0; i < preferredActivitiesSize; i++) { PreferredActivity preferredActivity = mPreferredActivities.get(i); - preferredActivity.configure(packageName, context); + preferredActivity.configureAsUser(packageName, Process.myUserHandle(), context); } if (mBehavior != null) { @@ -825,8 +825,9 @@ public class Role { */ public void revoke(@NonNull String packageName, boolean dontKillApp, boolean overrideSystemFixedPermissions, @NonNull Context context) { - RoleManager roleManager = context.getSystemService(RoleManager.class); - List<String> otherRoleNames = roleManager.getHeldRolesFromController(packageName); + Context userContext = UserUtils.getUserContext(context, Process.myUserHandle()); + RoleManager userRoleManager = userContext.getSystemService(RoleManager.class); + List<String> otherRoleNames = userRoleManager.getHeldRolesFromController(packageName); otherRoleNames.remove(mName); List<String> permissionsToRevoke = Permissions.filterBySdkVersion(mPermissions); |