summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorAaron Huang <huangaaron@google.com>2019-12-25 00:26:47 +0800
committerAaron Huang <huangaaron@google.com>2020-02-03 19:27:57 +0800
commitc3168e9c4806049ffd339f8174ffecd57bc359ee (patch)
tree8a31f0212d8bd143f155eb3cba9f3c1c2bb49f48 /core/java/android
parent2108944c13f271f68d20557318b99c26d8d5e06a (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.java85
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) { }