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

Commit 69badb5b authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Get the enforcing users from the DevicePolicyEngine." into udc-dev

parents 0f26a22c ae197558
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) {