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

Commit 5dde6e33 authored by Kenny Guy's avatar Kenny Guy
Browse files

Uninstall for all users should check device admins.

Uninstall for all users should check whether package
is admin for any user not just user 0.

Bug: 17657954
Change-Id: Ia116248b5889fc02dd46816a132e03c8e62662c9
parent cbd333b2
Loading
Loading
Loading
Loading
+20 −7
Original line number Diff line number Diff line
@@ -10442,10 +10442,22 @@ public class PackageManagerService extends IPackageManager.Stub {
        IDevicePolicyManager dpm = IDevicePolicyManager.Stub.asInterface(
                ServiceManager.getService(Context.DEVICE_POLICY_SERVICE));
        try {
            if (dpm != null && (dpm.packageHasActiveAdmins(packageName, userId)
                    || dpm.isDeviceOwner(packageName))) {
            if (dpm != null) {
                if (dpm.isDeviceOwner(packageName)) {
                    return true;
                }
                int[] users;
                if (userId == UserHandle.USER_ALL) {
                    users = sUserManager.getUserIds();
                } else {
                    users = new int[]{userId};
                }
                for (int i = 0; i < users.length; ++i) {
                    if (dpm.packageHasActiveAdmins(packageName, users[i])) {
                        return true;
                    }
                }
            }
        } catch (RemoteException e) {
        }
        return false;
@@ -10469,7 +10481,10 @@ public class PackageManagerService extends IPackageManager.Stub {
        final PackageRemovedInfo info = new PackageRemovedInfo();
        final boolean res;
        if (isPackageDeviceAdmin(packageName, userId)) {
        final UserHandle removeForUser = (flags & PackageManager.DELETE_ALL_USERS) != 0
                ? UserHandle.ALL : new UserHandle(userId);
        if (isPackageDeviceAdmin(packageName, removeForUser.getIdentifier())) {
            Slog.w(TAG, "Not removing package " + packageName + ": has active device admin");
            return PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER;
        }
@@ -10492,9 +10507,7 @@ public class PackageManagerService extends IPackageManager.Stub {
        synchronized (mInstallLock) {
            if (DEBUG_REMOVE) Slog.d(TAG, "deletePackageX: pkg=" + packageName + " user=" + userId);
            res = deletePackageLI(packageName,
                    (flags & PackageManager.DELETE_ALL_USERS) != 0
                            ? UserHandle.ALL : new UserHandle(userId),
            res = deletePackageLI(packageName, removeForUser,
                    true, allUsers, perUserInstalled,
                    flags | REMOVE_CHATTY, info, true);
            systemUpdate = info.isRemovedPackageSystemUpdate;