diff options
author | 2023-10-27 14:05:17 -0700 | |
---|---|---|
committer | 2023-10-31 15:25:11 -0700 | |
commit | 7454eaa359377a1d9fc599df194694d06684263f (patch) | |
tree | 37b410ff062fcee866cd2a30567f0a90a41c36ac | |
parent | c043473fb4f728c0de4c5451989564bf697593e8 (diff) |
[Role Logic Move] Lift user from RoleControllerServiceImpl
This change modifies RoleControllerServiceImpl, replacing all
calls to Process.myUserHandle() with an mUser variable. Also, calls to
RoleManager are called with a user-context.
After this change, we're now in a state where all of role-controller
(and RoleControllerServiceImpl) have a single UserHandle object which
is injected throughout the object hierarchy.
Bug: 302563690
Test: atest CtsRoleTestCases
Change-Id: I8112f89693d131ae99756d2ab8334d9e8cfb8b85
-rw-r--r-- | PermissionController/src/com/android/permissioncontroller/role/service/RoleControllerServiceImpl.java | 86 |
1 files changed, 46 insertions, 40 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/role/service/RoleControllerServiceImpl.java b/PermissionController/src/com/android/permissioncontroller/role/service/RoleControllerServiceImpl.java index 2aef8cc08..45f1236bb 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/service/RoleControllerServiceImpl.java +++ b/PermissionController/src/com/android/permissioncontroller/role/service/RoleControllerServiceImpl.java @@ -18,6 +18,7 @@ package com.android.permissioncontroller.role.service; import android.app.role.RoleControllerService; import android.app.role.RoleManager; +import android.content.Context; import android.content.pm.ApplicationInfo; import android.os.Process; import android.os.UserHandle; @@ -33,6 +34,7 @@ import com.android.permissioncontroller.role.utils.PackageUtils; import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils; import com.android.role.controller.model.Role; import com.android.role.controller.model.Roles; +import com.android.role.controller.util.UserUtils; import java.util.ArrayList; import java.util.List; @@ -47,20 +49,24 @@ public class RoleControllerServiceImpl extends RoleControllerService { private static final boolean DEBUG = false; - private RoleManager mRoleManager; + private UserHandle mUser; + + private RoleManager mUserRoleManager; @Override public void onCreate() { super.onCreate(); - mRoleManager = getSystemService(RoleManager.class); + mUser = Process.myUserHandle(); + Context userContext = UserUtils.getUserContext(this, mUser); + mUserRoleManager = userContext.getSystemService(RoleManager.class); } @Override @WorkerThread public boolean onGrantDefaultRoles() { if (DEBUG) { - Log.i(LOG_TAG, "Granting default roles, user: " + UserHandle.myUserId()); + Log.i(LOG_TAG, "Granting default roles, user: " + mUser.myUserId()); } // Gather the available roles for current user. @@ -72,13 +78,13 @@ public class RoleControllerServiceImpl extends RoleControllerService { for (int i = 0; i < roleMapSize; i++) { Role role = roleMap.valueAt(i); - if (!role.isAvailableAsUser(Process.myUserHandle(), this)) { + if (!role.isAvailableAsUser(mUser, this)) { continue; } roles.add(role); String roleName = role.getName(); roleNames.add(roleName); - if (!mRoleManager.isRoleAvailable(roleName)) { + if (!mUserRoleManager.isRoleAvailable(roleName)) { addedRoleNames.add(roleName); } } @@ -86,14 +92,14 @@ public class RoleControllerServiceImpl extends RoleControllerService { // TODO: Clean up holders of roles that will be removed. // Set the available role names in RoleManager. - mRoleManager.setRoleNamesFromController(roleNames); + mUserRoleManager.setRoleNamesFromController(roleNames); int addedRoleNamesSize = addedRoleNames.size(); for (int i = 0; i < addedRoleNamesSize; i++) { String roleName = addedRoleNames.valueAt(i); Role role = roleMap.get(roleName); - role.onRoleAddedAsUser(Process.myUserHandle(), this); + role.onRoleAddedAsUser(mUser, this); } // Go through the holders of all roles. @@ -105,14 +111,14 @@ public class RoleControllerServiceImpl extends RoleControllerService { // For each of the current holders, check if it is still qualified, redo grant if so, or // remove it otherwise. - List<String> currentPackageNames = mRoleManager.getRoleHolders(roleName); + List<String> currentPackageNames = mUserRoleManager.getRoleHolders(roleName); int currentPackageNamesSize = currentPackageNames.size(); for (int currentPackageNamesIndex = 0; currentPackageNamesIndex < currentPackageNamesSize; currentPackageNamesIndex++) { String packageName = currentPackageNames.get(currentPackageNamesIndex); - if (role.isPackageQualifiedAsUser(packageName, Process.myUserHandle(), this)) { + if (role.isPackageQualifiedAsUser(packageName, mUser, this)) { // We should not override user set or fixed permissions because we are only // redoing the grant here. Otherwise, user won't be able to revoke permissions // granted by role. @@ -126,17 +132,17 @@ public class RoleControllerServiceImpl extends RoleControllerService { // If there is no holder for a role now, or the role is static, we need to add default // or fallback holders, if any. - currentPackageNames = mRoleManager.getRoleHolders(roleName); + currentPackageNames = mUserRoleManager.getRoleHolders(roleName); currentPackageNamesSize = currentPackageNames.size(); boolean isStaticRole = role.isStatic(); if (currentPackageNamesSize == 0 || isStaticRole) { List<String> packageNamesToAdd = null; if (addedRoleNames.contains(roleName) || isStaticRole) { - packageNamesToAdd = role.getDefaultHoldersAsUser(Process.myUserHandle(), this); + packageNamesToAdd = role.getDefaultHoldersAsUser(mUser, this); } if (packageNamesToAdd == null || packageNamesToAdd.isEmpty()) { packageNamesToAdd = CollectionUtils.singletonOrEmpty( - role.getFallbackHolderAsUser(Process.myUserHandle(), this)); + role.getFallbackHolderAsUser(mUser, this)); } int packageNamesToAddSize = packageNamesToAdd.size(); @@ -149,8 +155,7 @@ public class RoleControllerServiceImpl extends RoleControllerService { // static roles. continue; } - if (!role.isPackageQualifiedAsUser(packageName, Process.myUserHandle(), - this)) { + if (!role.isPackageQualifiedAsUser(packageName, mUser, this)) { Log.e(LOG_TAG, "Default/fallback role holder package doesn't qualify for" + " the role, package: " + packageName + ", role: " + roleName); continue; @@ -166,7 +171,7 @@ public class RoleControllerServiceImpl extends RoleControllerService { } // Ensure that an exclusive role has at most one holder. - currentPackageNames = mRoleManager.getRoleHolders(roleName); + currentPackageNames = mUserRoleManager.getRoleHolders(roleName); currentPackageNamesSize = currentPackageNames.size(); if (role.isExclusive() && currentPackageNamesSize > 1) { Log.w(LOG_TAG, "Multiple packages holding an exclusive role, role: " @@ -200,12 +205,12 @@ public class RoleControllerServiceImpl extends RoleControllerService { Log.e(LOG_TAG, "Unknown role: " + roleName); return false; } - if (!role.isAvailableAsUser(Process.myUserHandle(), this)) { + if (!role.isAvailableAsUser(mUser, this)) { Log.e(LOG_TAG, "Role is unavailable: " + roleName); return false; } - if (!role.isPackageQualifiedAsUser(packageName, Process.myUserHandle(), this)) { + if (!role.isPackageQualifiedAsUser(packageName, mUser, this)) { Log.e(LOG_TAG, "Package does not qualify for the role, package: " + packageName + ", role: " + roleName); return false; @@ -213,7 +218,7 @@ public class RoleControllerServiceImpl extends RoleControllerService { boolean added = false; if (role.isExclusive()) { - List<String> currentPackageNames = mRoleManager.getRoleHolders(roleName); + List<String> currentPackageNames = mUserRoleManager.getRoleHolders(roleName); int currentPackageNamesSize = currentPackageNames.size(); for (int i = 0; i < currentPackageNamesSize; i++) { String currentPackageName = currentPackageNames.get(i); @@ -240,8 +245,8 @@ public class RoleControllerServiceImpl extends RoleControllerService { return false; } - role.onHolderAddedAsUser(packageName, Process.myUserHandle(), this); - role.onHolderChangedAsUser(Process.myUserHandle(), this); + role.onHolderAddedAsUser(packageName, mUser, this); + role.onHolderChangedAsUser(mUser, this); return true; } @@ -259,7 +264,7 @@ public class RoleControllerServiceImpl extends RoleControllerService { Log.e(LOG_TAG, "Unknown role: " + roleName); return false; } - if (!role.isAvailableAsUser(Process.myUserHandle(), this)) { + if (!role.isAvailableAsUser(mUser, this)) { Log.e(LOG_TAG, "Role is unavailable: " + roleName); return false; } @@ -276,7 +281,7 @@ public class RoleControllerServiceImpl extends RoleControllerService { return false; } - role.onHolderChangedAsUser(Process.myUserHandle(), this); + role.onHolderChangedAsUser(mUser, this); return true; } @@ -293,7 +298,7 @@ public class RoleControllerServiceImpl extends RoleControllerService { Log.e(LOG_TAG, "Unknown role: " + roleName); return false; } - if (!role.isAvailableAsUser(Process.myUserHandle(), this)) { + if (!role.isAvailableAsUser(mUser, this)) { Log.e(LOG_TAG, "Role is unavailable: " + roleName); return false; } @@ -310,7 +315,7 @@ public class RoleControllerServiceImpl extends RoleControllerService { return false; } - role.onHolderChangedAsUser(Process.myUserHandle(), this); + role.onHolderChangedAsUser(mUser, this); return true; } @@ -324,12 +329,11 @@ public class RoleControllerServiceImpl extends RoleControllerService { @WorkerThread private boolean addRoleHolderInternal(@NonNull Role role, @NonNull String packageName, boolean dontKillApp, boolean overrideUser, boolean added) { - UserHandle user = Process.myUserHandle(); - role.grantAsUser(packageName, dontKillApp, overrideUser, user, this); + role.grantAsUser(packageName, dontKillApp, overrideUser, mUser, this); String roleName = role.getName(); if (!added) { - added = mRoleManager.addRoleHolderFromController(roleName, packageName); + added = mUserRoleManager.addRoleHolderFromController(roleName, packageName); } if (!added) { Log.e(LOG_TAG, "Failed to add role holder in RoleManager, package: " + packageName @@ -341,17 +345,18 @@ public class RoleControllerServiceImpl extends RoleControllerService { @WorkerThread private boolean removeRoleHolderInternal(@NonNull Role role, @NonNull String packageName, boolean dontKillApp) { - ApplicationInfo applicationInfo = PackageUtils.getApplicationInfo(packageName, this); + ApplicationInfo applicationInfo = PackageUtils.getApplicationInfoAsUser(packageName, + mUser, this); if (applicationInfo == null) { Log.w(LOG_TAG, "Cannot get ApplicationInfo for package: " + packageName); } if (applicationInfo != null) { - role.revokeAsUser(packageName, dontKillApp, false, Process.myUserHandle(), this); + role.revokeAsUser(packageName, dontKillApp, false, mUser, this); } String roleName = role.getName(); - boolean removed = mRoleManager.removeRoleHolderFromController(roleName, packageName); + boolean removed = mUserRoleManager.removeRoleHolderFromController(roleName, packageName); if (!removed) { Log.e(LOG_TAG, "Failed to remove role holder in RoleManager," + " package: " + packageName + ", role: " + roleName); @@ -362,7 +367,7 @@ public class RoleControllerServiceImpl extends RoleControllerService { @WorkerThread private boolean clearRoleHoldersInternal(@NonNull Role role, boolean dontKillApp) { String roleName = role.getName(); - List<String> packageNames = mRoleManager.getRoleHolders(roleName); + List<String> packageNames = mUserRoleManager.getRoleHolders(roleName); boolean cleared = true; int packageNamesSize = packageNames.size(); @@ -383,17 +388,17 @@ public class RoleControllerServiceImpl extends RoleControllerService { @WorkerThread private boolean addFallbackRoleHolderMaybe(@NonNull Role role) { String roleName = role.getName(); - List<String> currentPackageNames = mRoleManager.getRoleHolders(roleName); + List<String> currentPackageNames = mUserRoleManager.getRoleHolders(roleName); if (!currentPackageNames.isEmpty()) { return true; } - String fallbackPackageName = role.getFallbackHolderAsUser(Process.myUserHandle(), this); + String fallbackPackageName = role.getFallbackHolderAsUser(mUser, this); if (fallbackPackageName == null) { return true; } - if (!role.isPackageQualifiedAsUser(fallbackPackageName, Process.myUserHandle(), this)) { + if (!role.isPackageQualifiedAsUser(fallbackPackageName, mUser, this)) { Log.e(LOG_TAG, "Fallback role holder package doesn't qualify for the role, package: " + fallbackPackageName + ", role: " + roleName); return false; @@ -424,15 +429,16 @@ public class RoleControllerServiceImpl extends RoleControllerService { if (role == null) { return false; } - if (!role.isAvailableAsUser(Process.myUserHandle(), this)) { + if (!role.isAvailableAsUser(mUser, this)) { return false; } - if (!role.isPackageQualifiedAsUser(packageName, Process.myUserHandle(), this)) { + if (!role.isPackageQualifiedAsUser(packageName, mUser, this)) { return false; } - ApplicationInfo applicationInfo = PackageUtils.getApplicationInfo(packageName, this); + ApplicationInfo applicationInfo = PackageUtils.getApplicationInfoAsUser(packageName, + mUser, this); if (applicationInfo == null || !RoleUiBehaviorUtils.isApplicationVisibleAsUser(role, - applicationInfo, Process.myUserHandle(), this)) { + applicationInfo, mUser, this)) { return false; } return true; @@ -444,11 +450,11 @@ public class RoleControllerServiceImpl extends RoleControllerService { if (role == null) { return false; } - if (!role.isAvailableAsUser(Process.myUserHandle(), this)) { + if (!role.isAvailableAsUser(mUser, this)) { return false; } - return RoleUiBehaviorUtils.isVisibleAsUser(role, Process.myUserHandle(), this); + return RoleUiBehaviorUtils.isVisibleAsUser(role, mUser, this); } private static boolean checkFlags(int flags, int allowedFlags) { |