Loading services/devicepolicy/java/com/android/server/devicepolicy/FlagUnion.java +6 −4 Original line number Diff line number Diff line Loading @@ -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()) { Loading @@ -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 Loading services/devicepolicy/java/com/android/server/devicepolicy/MostRecent.java +4 −6 Original line number Diff line number Diff line Loading @@ -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 Loading services/devicepolicy/java/com/android/server/devicepolicy/MostRestrictive.java +23 −3 Original line number Diff line number Diff line Loading @@ -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> { Loading @@ -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 Loading services/devicepolicy/java/com/android/server/devicepolicy/PackageSetUnion.java +7 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java +2 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
services/devicepolicy/java/com/android/server/devicepolicy/FlagUnion.java +6 −4 Original line number Diff line number Diff line Loading @@ -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()) { Loading @@ -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 Loading
services/devicepolicy/java/com/android/server/devicepolicy/MostRecent.java +4 −6 Original line number Diff line number Diff line Loading @@ -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 Loading
services/devicepolicy/java/com/android/server/devicepolicy/MostRestrictive.java +23 −3 Original line number Diff line number Diff line Loading @@ -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> { Loading @@ -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 Loading
services/devicepolicy/java/com/android/server/devicepolicy/PackageSetUnion.java +7 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading
services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java +2 −1 Original line number Diff line number Diff line Loading @@ -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