summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jay Thomas Sullivan <jaysullivan@google.com> 2023-10-27 14:05:17 -0700
committer Jay Thomas Sullivan <jaysullivan@google.com> 2023-10-31 15:25:11 -0700
commit7454eaa359377a1d9fc599df194694d06684263f (patch)
tree37b410ff062fcee866cd2a30567f0a90a41c36ac
parentc043473fb4f728c0de4c5451989564bf697593e8 (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.java86
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) {