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

Commit df0236b9 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:...

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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23214183



Change-Id: Ifb649fb9143c5a94a1848ecaaaa1ff0fad5f47a0
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 3f6b12d0 1e95f1e5
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) {