Prevent uninstalling the device management role

Bug: 249047613
Test: manual
Change-Id: I071e049a01f8e638a289a8b6082fc9a4494ca6dd
This commit is contained in:
Kholoud Mohamed
2022-12-09 09:54:15 +00:00
parent b2ab9d9433
commit ebd8e686dd

View File

@@ -3211,6 +3211,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
return isPackageDeviceAdmin(packageName, UserHandle.USER_ALL);
}
// TODO(b/261957226): centralise this logic in DPM
boolean isPackageDeviceAdmin(String packageName, int userId) {
final IDevicePolicyManager dpm = getDevicePolicyManager();
try {
@@ -3237,6 +3238,9 @@ public class PackageManagerService implements PackageSender, TestUtilityService
if (dpm.packageHasActiveAdmins(packageName, users[i])) {
return true;
}
if (isDeviceManagementRoleHolder(packageName, users[i])) {
return true;
}
}
}
} catch (RemoteException e) {
@@ -3244,6 +3248,24 @@ public class PackageManagerService implements PackageSender, TestUtilityService
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. */
private IDevicePolicyManager getDevicePolicyManager() {
if (mDevicePolicyManager == null) {