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

Commit 4cc42828 authored by Irem Uguz's avatar Irem Uguz Committed by Android (Google) Code Review
Browse files

Merge "Return ResolvedPolicy from ResolutionMechanism::resolve" into main

parents 46170435 7ba3fdeb
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ import java.util.Objects;
final class FlagUnion extends ResolutionMechanism<Integer> {

    @Override
    IntegerPolicyValue resolve(
    ResolvedPolicy<Integer> resolve(
            @NonNull LinkedHashMap<EnforcingAdmin, PolicyValue<Integer>> adminPolicies) {
        Objects.requireNonNull(adminPolicies);
        if (adminPolicies.isEmpty()) {
@@ -34,10 +34,12 @@ final class FlagUnion extends ResolutionMechanism<Integer> {
        }

        Integer unionOfPolicies = 0;
        for (PolicyValue<Integer> policy : adminPolicies.values()) {
            unionOfPolicies |= policy.getValue();
        for (PolicyValue<Integer> policyValue : adminPolicies.values()) {
            unionOfPolicies |= policyValue.getValue();
        }
        return new IntegerPolicyValue(unionOfPolicies);
        return new ResolvedPolicy<>(new IntegerPolicyValue(unionOfPolicies),
                // Since it's union, all admins contribute to the final value.
                adminPolicies.keySet());
    }

    @Override
+4 −6
Original line number Diff line number Diff line
@@ -20,18 +20,16 @@ package com.android.server.devicepolicy;
import android.annotation.NonNull;
import android.app.admin.PolicyValue;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

final class MostRecent<V> extends ResolutionMechanism<V> {

    @Override
    PolicyValue<V> resolve(@NonNull LinkedHashMap<EnforcingAdmin, PolicyValue<V>> adminPolicies) {
        List<Map.Entry<EnforcingAdmin, PolicyValue<V>>> policiesList = new ArrayList<>(
                adminPolicies.entrySet());
        return policiesList.isEmpty() ? null : policiesList.get(policiesList.size() - 1).getValue();
    ResolvedPolicy<V> resolve(
            @NonNull LinkedHashMap<EnforcingAdmin, PolicyValue<V>> adminPolicies) {
        Map.Entry<EnforcingAdmin, PolicyValue<V>> lastEntry = adminPolicies.lastEntry();
        return lastEntry == null ? null : new ResolvedPolicy<V>(lastEntry);
    }

    @Override
+23 −3
Original line number Diff line number Diff line
@@ -19,9 +19,11 @@ package com.android.server.devicepolicy;
import android.annotation.NonNull;
import android.app.admin.PolicyValue;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

final class MostRestrictive<V> extends ResolutionMechanism<V> {

@@ -32,8 +34,26 @@ final class MostRestrictive<V> extends ResolutionMechanism<V> {
    }

    @Override
    PolicyValue<V> resolve(@NonNull LinkedHashMap<EnforcingAdmin, PolicyValue<V>> adminPolicies) {
        return resolve(new ArrayList<>(adminPolicies.values()));
    ResolvedPolicy<V> resolve(
            @NonNull LinkedHashMap<EnforcingAdmin, PolicyValue<V>> adminPolicies) {
        if (adminPolicies.isEmpty()) {
            return null;
        }
        // Check for the policy values in order of most to least restrictive to find the most
        // restrictive value set by admins. The most restrictive value will be applied as the
        // resolved policy value and the admin who has set it will be returned as the
        // contributing admin. If there are multiple admins who has set the most restrictive
        // value, they all will be added to the contributing admins set.
        for (PolicyValue<V> value : mMostToLeastRestrictive) {
            Set<EnforcingAdmin> admins = adminPolicies.entrySet().stream().filter(
                    e -> e.getValue().equals(value)).map(Map.Entry::getKey).collect(
                    Collectors.toSet());
            if (!admins.isEmpty()) {
                return new ResolvedPolicy<>(value, admins);
            }
        }
        // Return first set policy if none can be found in known values
        return new ResolvedPolicy<>(adminPolicies.firstEntry());
    }

    @Override
+7 −5
Original line number Diff line number Diff line
@@ -17,8 +17,8 @@
package com.android.server.devicepolicy;

import android.annotation.NonNull;
import android.app.admin.PolicyValue;
import android.app.admin.PackageSetPolicyValue;
import android.app.admin.PolicyValue;
import android.app.admin.StringSetUnion;

import java.util.HashSet;
@@ -29,17 +29,19 @@ import java.util.Set;
final class PackageSetUnion extends ResolutionMechanism<Set<String>> {

    @Override
    PolicyValue<Set<String>> resolve(
    ResolvedPolicy<Set<String>> resolve(
            @NonNull LinkedHashMap<EnforcingAdmin, PolicyValue<Set<String>>> adminPolicies) {
        Objects.requireNonNull(adminPolicies);
        if (adminPolicies.isEmpty()) {
            return null;
        }
        Set<String> unionOfPolicies = new HashSet<>();
        for (PolicyValue<Set<String>> policy : adminPolicies.values()) {
            unionOfPolicies.addAll(policy.getValue());
        for (PolicyValue<Set<String>> policyValue : adminPolicies.values()) {
            unionOfPolicies.addAll(policyValue.getValue());
        }
        return new PackageSetPolicyValue(unionOfPolicies);
        return new ResolvedPolicy<>(new PackageSetPolicyValue(unionOfPolicies),
                // Since it's union, all admins contribute to the final value.
                adminPolicies.keySet());
    }

    @Override
+2 −1
Original line number Diff line number Diff line
@@ -616,7 +616,8 @@ final class PolicyDefinition<V> {
    }

    @Nullable
    PolicyValue<V> resolvePolicy(LinkedHashMap<EnforcingAdmin, PolicyValue<V>> adminsPolicy) {
    ResolvedPolicy<V> resolvePolicy(
            LinkedHashMap<EnforcingAdmin, PolicyValue<V>> adminsPolicy) {
        return mResolutionMechanism.resolve(adminsPolicy);
    }

Loading