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

Commit 1e95f1e5 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Get the enforcing users from the DevicePolicyEngine." into udc-dev am: 69badb5b

parents 0d0b0927 69badb5b
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager.EnforcingUser;

import java.util.List;
import java.util.Set;
@@ -326,4 +327,10 @@ public abstract class DevicePolicyManagerInternal {
     */
    public abstract List<Bundle> getApplicationRestrictionsPerAdminForUser(
            String packageName, @UserIdInt int userId);

    /**
     *  Returns a list of users who set a user restriction on a given user.
     */
    public abstract List<EnforcingUser> getUserRestrictionSources(String restriction,
                @UserIdInt int userId);
}
+4 −2
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.os.Build;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager.EnforcingUser;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
@@ -118,12 +119,13 @@ public class RestrictedLockUtilsInternal extends RestrictedLockUtils {
            return enforcedAdmin;
        }

        final int restrictionSource = enforcingUsers.get(0).getUserRestrictionSource();
        final EnforcingUser enforcingUser = enforcingUsers.get(0);
        final int restrictionSource = enforcingUser.getUserRestrictionSource();
        if (restrictionSource == UserManager.RESTRICTION_SOURCE_SYSTEM) {
            return null;
        }

        final EnforcedAdmin admin = getProfileOrDeviceOwner(context, userHandle);
        final EnforcedAdmin admin = getProfileOrDeviceOwner(context, enforcingUser.getUserHandle());
        if (admin != null) {
            return admin;
        }
+2 −3
Original line number Diff line number Diff line
@@ -2854,9 +2854,8 @@ public class UserManagerService extends IUserManager.Stub {
                    UserHandle.USER_NULL, UserManager.RESTRICTION_SOURCE_SYSTEM));
        }

        synchronized (mRestrictionsLock) {
            result.addAll(mDevicePolicyUserRestrictions.getEnforcingUsers(restrictionKey, userId));
        }
        result.addAll(getDevicePolicyManagerInternal()
                .getUserRestrictionSources(restrictionKey, userId));
        return result;
    }

+16 −0
Original line number Diff line number Diff line
@@ -604,6 +604,22 @@ final class DevicePolicyEngine {
        }
    }

    /**
     * Retrieves the values set for the provided {@code policyDefinition} by each admin.
     */
    @NonNull
    <V> LinkedHashMap<EnforcingAdmin, PolicyValue<V>> getGlobalPoliciesSetByAdmins(
            @NonNull PolicyDefinition<V> policyDefinition) {
        Objects.requireNonNull(policyDefinition);

        synchronized (mLock) {
            if (!hasGlobalPolicyLocked(policyDefinition)) {
                return new LinkedHashMap<>();
            }
            return getGlobalPolicyStateLocked(policyDefinition).getPoliciesSetByAdmins();
        }
    }

    /**
     * Returns the policies set by the given admin that share the same
     * {@link PolicyKey#getIdentifier()} as the provided {@code policyDefinition}.
+34 −0
Original line number Diff line number Diff line
@@ -410,6 +410,7 @@ import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager.EnforcingUser;
import android.os.UserManager.UserRestrictionSource;
import android.os.storage.StorageManager;
import android.permission.AdminPermissionControlParams;
@@ -16346,6 +16347,39 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                return List.of(bundle);
            });
        }
        public List<EnforcingUser> getUserRestrictionSources(String restriction,
                @UserIdInt int userId) {
            PolicyDefinition<Boolean> policy =
                    PolicyDefinition.getPolicyDefinitionForUserRestriction(restriction);
            Set<EnforcingAdmin> localAdmins =
                    mDevicePolicyEngine.getLocalPoliciesSetByAdmins(policy, userId).keySet();
            Set<EnforcingAdmin> globalAdmins =
                    mDevicePolicyEngine.getGlobalPoliciesSetByAdmins(policy).keySet();
            List<EnforcingUser> enforcingUsers = new ArrayList();
            enforcingUsers.addAll(getEnforcingUsers(localAdmins));
            enforcingUsers.addAll(getEnforcingUsers(globalAdmins));
            return enforcingUsers;
        }
        private List<EnforcingUser> getEnforcingUsers(Set<EnforcingAdmin> admins) {
            List<EnforcingUser> enforcingUsers = new ArrayList();
            ComponentName deviceOwner = mOwners.getDeviceOwnerComponent();
            for (EnforcingAdmin admin : admins) {
                if (deviceOwner != null
                        && deviceOwner.getPackageName().equals(admin.getPackageName())) {
                    enforcingUsers.add(new EnforcingUser(admin.getUserId(),
                            UserManager.RESTRICTION_SOURCE_DEVICE_OWNER));
                } else {
                    enforcingUsers.add(new EnforcingUser(admin.getUserId(),
                            UserManager.RESTRICTION_SOURCE_PROFILE_OWNER));
                }
            }
            return enforcingUsers;
        }
    }
    private Intent createShowAdminSupportIntent(int userId) {