Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09cb0a05 authored by Kholoud Mohamed's avatar Kholoud Mohamed Committed by Automerger Merge Worker
Browse files

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

Merge "Prevent uninstalling the device management role" into tm-qpr-dev am: 2c11df7f am: 94740ca9

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20691226



Change-Id: Ie1cf541c26bde15fc92776087755437942cad1b9
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 35abba49 94740ca9
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -3266,6 +3266,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 {
@@ -3292,6 +3293,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) {
@@ -3299,6 +3303,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) {