SubscriptionPlan: remove getNetworkTypesBitMask
To avoid using hidden API TelephonyManager#getBitMaskForNetworkType
Bug: 140908357
Test: make
Change-Id: Ibb04fd43117d4b7cf9f768e6ccf9a8f605a2f5e8
diff --git a/core/java/android/telephony/SubscriptionPlan.java b/core/java/android/telephony/SubscriptionPlan.java
index 28a5c20..ff2f4ad 100644
--- a/core/java/android/telephony/SubscriptionPlan.java
+++ b/core/java/android/telephony/SubscriptionPlan.java
@@ -228,24 +228,6 @@
}
/**
- * 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 99562eb..a2984ae 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 @@
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 @@
}
}
+ /**
+ * 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);