diff options
| -rw-r--r-- | core/java/android/telephony/SubscriptionPlan.java | 18 | ||||
| -rw-r--r-- | services/core/java/com/android/server/net/NetworkPolicyManagerService.java | 20 |
2 files changed, 16 insertions, 22 deletions
diff --git a/core/java/android/telephony/SubscriptionPlan.java b/core/java/android/telephony/SubscriptionPlan.java index 28a5c2086ede..ff2f4ad5378c 100644 --- a/core/java/android/telephony/SubscriptionPlan.java +++ b/core/java/android/telephony/SubscriptionPlan.java @@ -228,24 +228,6 @@ public final class SubscriptionPlan implements Parcelable { } /** - * Return the networkTypes array converted to a {@link TelephonyManager.NetworkTypeBitMask} - * @hide - */ - public long getNetworkTypesBitMask() { - // calculate bitmask the first time and save for future calls - if (networkTypesBitMask == 0) { - if (networkTypes == null) { - networkTypesBitMask = ~0; - } else { - for (int networkType : networkTypes) { - networkTypesBitMask |= TelephonyManager.getBitMaskForNetworkType(networkType); - } - } - } - return networkTypesBitMask; - } - - /** * Return an iterator that will return all valid data usage cycles based on * any recurrence rules. The iterator starts from the currently active cycle * and walks backwards through time. diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 99562eb28886..a2984ae4ae4f 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -3106,17 +3106,16 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return; } - long applicableNetworkTypes = 0; + final ArraySet<Integer> applicableNetworkTypes = new ArraySet<Integer>(); boolean allNetworks = false; for (SubscriptionPlan plan : plans) { if (plan.getNetworkTypes() == null) { allNetworks = true; } else { - if ((applicableNetworkTypes & plan.getNetworkTypesBitMask()) != 0) { + final int[] networkTypes = plan.getNetworkTypes(); + if (!addAll(applicableNetworkTypes, networkTypes)) { throw new IllegalArgumentException( "Multiple subscription plans defined for a single network type."); - } else { - applicableNetworkTypes |= plan.getNetworkTypesBitMask(); } } } @@ -3128,6 +3127,19 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } } + /** + * Adds all of the {@code elements} to the {@code set}. + * + * @return {@code false} if any element is not added because the set already have the value. + */ + private static boolean addAll(@NonNull Set<Integer> set, @NonNull int... elements) { + boolean result = true; + for (int element : elements) { + result &= set.add(element); + } + return result; + } + @Override public SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage) { enforceSubscriptionPlanAccess(subId, Binder.getCallingUid(), callingPackage); |