Merge "Prevent uninstalling the device management role" into tm-qpr-dev

This commit is contained in:
Kholoud Mohamed
2022-12-14 12:16:59 +00:00
committed by Android (Google) Code Review

View File

@@ -3211,6 +3211,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
return isPackageDeviceAdmin(packageName, UserHandle.USER_ALL); return isPackageDeviceAdmin(packageName, UserHandle.USER_ALL);
} }
// TODO(b/261957226): centralise this logic in DPM
boolean isPackageDeviceAdmin(String packageName, int userId) { boolean isPackageDeviceAdmin(String packageName, int userId) {
final IDevicePolicyManager dpm = getDevicePolicyManager(); final IDevicePolicyManager dpm = getDevicePolicyManager();
try { try {
@@ -3237,6 +3238,9 @@ public class PackageManagerService implements PackageSender, TestUtilityService
if (dpm.packageHasActiveAdmins(packageName, users[i])) { if (dpm.packageHasActiveAdmins(packageName, users[i])) {
return true; return true;
} }
if (isDeviceManagementRoleHolder(packageName, users[i])) {
return true;
}
} }
} }
} catch (RemoteException e) { } catch (RemoteException e) {
@@ -3244,6 +3248,24 @@ public class PackageManagerService implements PackageSender, TestUtilityService
return false; return false;
} }
private boolean isDeviceManagementRoleHolder(String packageName, int userId) {
return Objects.equals(packageName, getDevicePolicyManagementRoleHolderPackageName(userId));
}
@Nullable
private String getDevicePolicyManagementRoleHolderPackageName(int userId) {
return Binder.withCleanCallingIdentity(() -> {
RoleManager roleManager = mContext.getSystemService(RoleManager.class);
List<String> roleHolders =
roleManager.getRoleHoldersAsUser(
RoleManager.ROLE_DEVICE_POLICY_MANAGEMENT, UserHandle.of(userId));
if (roleHolders.isEmpty()) {
return null;
}
return roleHolders.get(0);
});
}
/** Returns the device policy manager interface. */ /** Returns the device policy manager interface. */
private IDevicePolicyManager getDevicePolicyManager() { private IDevicePolicyManager getDevicePolicyManager() {
if (mDevicePolicyManager == null) { if (mDevicePolicyManager == null) {