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

Commit 28860b75 authored by Alan Treadway's avatar Alan Treadway
Browse files

Fix for being able to setup Managed User from system user.

Also move feature flag check to ensure it is used in all cases.

Change-Id: If42787c5bc9ab824449c70f90fb827cf2da7507f
parent 8b40491b
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -6823,6 +6823,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
    public boolean isProvisioningAllowed(String action) {
        final int callingUserId = mInjector.userHandleGetCallingUserId();
        if (DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE.equals(action)) {
            if (!hasFeatureManagedUsers()) {
                return false;
            }
            synchronized (this) {
                if (mOwners.hasDeviceOwner()) {
                    if (!mInjector.userManagerIsSplitSystemUser()) {
@@ -6845,13 +6848,6 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                // Managed user cannot have a managed profile.
                return false;
            }
            try {
                if (!mIPackageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
                    return false;
                }
            } catch (RemoteException e) {
                return false;
            }
            final long ident = mInjector.binderClearCallingIdentity();
            try {
                if (!mUserManager.canAddMoreManagedProfiles(callingUserId, true)) {
@@ -6864,10 +6860,17 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        } else if (DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE.equals(action)) {
            return isDeviceOwnerProvisioningAllowed(callingUserId);
        } else if (DevicePolicyManager.ACTION_PROVISION_MANAGED_USER.equals(action)) {
            if (!hasFeatureManagedUsers()) {
                return false;
            }
            if (!mInjector.userManagerIsSplitSystemUser()) {
                // ACTION_PROVISION_MANAGED_USER only supported on split-user systems.
                return false;
            }
            if (callingUserId == UserHandle.USER_SYSTEM) {
                // System user cannot be a managed user.
                return false;
            }
            if (hasUserSetupCompleted(callingUserId)) {
                return false;
            }
@@ -6901,6 +6904,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        return true;
    }

    private boolean hasFeatureManagedUsers() {
        try {
            return mIPackageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS);
        } catch (RemoteException e) {
            return false;
        }
    }

    @Override
    public String getWifiMacAddress() {
        // Make sure caller has DO.