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

Commit cd6f4e95 authored by Pavel Grafov's avatar Pavel Grafov Committed by Android (Google) Code Review
Browse files

Merge "Allow uninstalling DMRH when not used for management" into tm-qpr-dev

parents 8dc6ee3e d4543936
Loading
Loading
Loading
Loading
+20 −6
Original line number Diff line number Diff line
@@ -3229,17 +3229,31 @@ public class PackageManagerService implements PackageSender, TestUtilityService
                    return true;
                }
                // Does it contain a device admin for any user?
                int[] users;
                int[] allUsers = mUserManager.getUserIds();
                int[] targetUsers;
                if (userId == UserHandle.USER_ALL) {
                    users = mUserManager.getUserIds();
                    targetUsers = allUsers;
                } else {
                    users = new int[]{userId};
                    targetUsers = new int[]{userId};
                }
                for (int i = 0; i < users.length; ++i) {
                    if (dpm.packageHasActiveAdmins(packageName, users[i])) {

                for (int i = 0; i < targetUsers.length; ++i) {
                    if (dpm.packageHasActiveAdmins(packageName, targetUsers[i])) {
                        return true;
                    }
                    if (isDeviceManagementRoleHolder(packageName, users[i])) {
                }

                // If a package is DMRH on a managed user, it should also be treated as an admin on
                // that user. If that package is also a system package, it should also be protected
                // on other users otherwise "uninstall updates" on an unmanaged user may break
                // management on other users because apk version is shared between all users.
                var packageState = snapshotComputer().getPackageStateInternal(packageName);
                if (packageState == null) {
                    return false;
                }
                for (int user : packageState.isSystem() ? allUsers : targetUsers) {
                    if (mProtectedPackages.getDeviceOwnerOrProfileOwnerPackage(user) != null
                            && isDeviceManagementRoleHolder(packageName, user)) {
                        return true;
                    }
                }