Merge "Prevent uninstalling the device management role" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
2c11df7fe4
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user