diff options
| author | Aaron Huang <huangaaron@google.com> | 2019-12-25 00:26:47 +0800 |
|---|---|---|
| committer | Aaron Huang <huangaaron@google.com> | 2020-02-03 19:27:57 +0800 |
| commit | c3168e9c4806049ffd339f8174ffecd57bc359ee (patch) | |
| tree | 8a31f0212d8bd143f155eb3cba9f3c1c2bb49f48 /core/java/android | |
| parent | 2108944c13f271f68d20557318b99c26d8d5e06a (diff) | |
NetworkPolicyManager: Add @SystemApi for mainlne module
1) Add NetworkPolicyManager.registerSubscriptionCallback and
NetworkPolicyManager.unregisterSubscriptionCallback for
registering and unregister.
2) Create SubscriptionCallback to support new @SystemApi
so that caller could use this object to register and
unregister.
Bug: 138306002
Test: FrameworksNetTests
FrameworksTelephonyTests
Change-Id: I56833254a93383e8054c96d296bcb54b777a6e33
Merged-In: I56833254a93383e8054c96d296bcb54b777a6e33
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/net/NetworkPolicyManager.java | 85 |
1 files changed, 83 insertions, 2 deletions
diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java index 0f66c794ea50..14442a2088cd 100644 --- a/core/java/android/net/NetworkPolicyManager.java +++ b/core/java/android/net/NetworkPolicyManager.java @@ -20,6 +20,7 @@ import static android.content.pm.PackageManager.GET_SIGNATURES; import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; import android.app.ActivityManager; @@ -46,11 +47,13 @@ import java.lang.annotation.RetentionPolicy; import java.time.ZonedDateTime; import java.util.HashSet; import java.util.Iterator; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * Manager for creating and modifying network policy rules. * - * {@hide} + * @hide */ @SystemService(Context.NETWORK_POLICY_SERVICE) @SystemApi @@ -89,6 +92,7 @@ public class NetworkPolicyManager { * * See network-policy-restrictions.md for more info. */ + /** * No specific rule was set * @hide @@ -120,6 +124,7 @@ public class NetworkPolicyManager { * @hide */ public static final int RULE_REJECT_ALL = 1 << 6; + /** * Mask used to get the {@code RULE_xxx_METERED} rules * @hide @@ -133,7 +138,6 @@ public class NetworkPolicyManager { /** @hide */ public static final int FIREWALL_RULE_DEFAULT = 0; - /** @hide */ public static final String FIREWALL_CHAIN_NAME_NONE = "none"; /** @hide */ @@ -180,6 +184,9 @@ public class NetworkPolicyManager { @UnsupportedAppUsage private INetworkPolicyManager mService; + private final Map<SubscriptionCallback, SubscriptionCallbackProxy> + mCallbackMap = new ConcurrentHashMap<>(); + /** @hide */ public NetworkPolicyManager(Context context, INetworkPolicyManager service) { if (service == null) { @@ -286,6 +293,35 @@ public class NetworkPolicyManager { } /** @hide */ + @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) + @SystemApi + public void registerSubscriptionCallback(@NonNull SubscriptionCallback callback) { + if (callback == null) { + throw new NullPointerException("Callback cannot be null."); + } + + final SubscriptionCallbackProxy callbackProxy = new SubscriptionCallbackProxy(callback); + if (null != mCallbackMap.putIfAbsent(callback, callbackProxy)) { + throw new IllegalArgumentException("Callback is already registered."); + } + registerListener(callbackProxy); + } + + /** @hide */ + @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) + @SystemApi + public void unregisterSubscriptionCallback(@NonNull SubscriptionCallback callback) { + if (callback == null) { + throw new NullPointerException("Callback cannot be null."); + } + + final SubscriptionCallbackProxy callbackProxy = mCallbackMap.remove(callback); + if (callbackProxy == null) return; + + unregisterListener(callbackProxy); + } + + /** @hide */ public void setNetworkPolicies(NetworkPolicy[] policies) { try { mService.setNetworkPolicies(policies); @@ -512,6 +548,51 @@ public class NetworkPolicyManager { return WifiInfo.sanitizeSsid(ssid); } + /** @hide */ + @SystemApi + public static class SubscriptionCallback { + /** + * Notify clients of a new override about a given subscription. + * + * @param subId the subscriber this override applies to. + * @param overrideMask a bitmask that specifies which of the overrides is set. + * @param overrideValue a bitmask that specifies the override values. + */ + public void onSubscriptionOverride(int subId, @SubscriptionOverrideMask int overrideMask, + @SubscriptionOverrideMask int overrideValue) {} + + /** + * Notify of subscription plans change about a given subscription. + * + * @param subId the subscriber id that got subscription plans change. + * @param plans the list of subscription plans. + */ + public void onSubscriptionPlansChanged(int subId, @NonNull SubscriptionPlan[] plans) {} + } + + /** + * SubscriptionCallback proxy for SubscriptionCallback object. + * @hide + */ + public class SubscriptionCallbackProxy extends Listener { + private final SubscriptionCallback mCallback; + + SubscriptionCallbackProxy(SubscriptionCallback callback) { + mCallback = callback; + } + + @Override + public void onSubscriptionOverride(int subId, @SubscriptionOverrideMask int overrideMask, + @SubscriptionOverrideMask int overrideValue) { + mCallback.onSubscriptionOverride(subId, overrideMask, overrideValue); + } + + @Override + public void onSubscriptionPlansChanged(int subId, SubscriptionPlan[] plans) { + mCallback.onSubscriptionPlansChanged(subId, plans); + } + } + /** {@hide} */ public static class Listener extends INetworkPolicyListener.Stub { @Override public void onUidRulesChanged(int uid, int uidRules) { } |
