From ba66f0f7612fb5de59d21814a96b589e5faa01ef Mon Sep 17 00:00:00 2001 From: Meng Wang Date: Thu, 19 Dec 2019 12:08:27 -0800 Subject: [PATCH] SubscriptionPlan: remove getNetworkTypesBitMask To avoid using hidden API TelephonyManager#getBitMaskForNetworkType Bug: 140908357 Test: make Change-Id: Ibb04fd43117d4b7cf9f768e6ccf9a8f605a2f5e8 Merged-In: Ibb04fd43117d4b7cf9f768e6ccf9a8f605a2f5e8 --- .../android/telephony/SubscriptionPlan.java | 18 ----------------- .../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 28a5c2086ede3..ff2f4ad5378c3 100644 --- a/core/java/android/telephony/SubscriptionPlan.java +++ b/core/java/android/telephony/SubscriptionPlan.java @@ -227,24 +227,6 @@ public final class SubscriptionPlan implements Parcelable { return networkTypes; } - /** - * 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 diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 0392807bcb374..99f3d8f22baa1 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -3094,17 +3094,16 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return; } - long applicableNetworkTypes = 0; + final ArraySet applicableNetworkTypes = new ArraySet(); 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(); } } } @@ -3116,6 +3115,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 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);