Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9204f468 authored by Aaron Huang's avatar Aaron Huang Committed by Chalard Jean
Browse files

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
parent 7e963605
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -6164,12 +6164,20 @@ package android.net {
  public class NetworkPolicyManager {
    method @NonNull public android.telephony.SubscriptionPlan[] getSubscriptionPlans(int, @NonNull String);
    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public void registerSubscriptionCallback(@NonNull android.net.NetworkPolicyManager.SubscriptionCallback);
    method public void setSubscriptionOverride(int, int, int, long, @NonNull String);
    method public void setSubscriptionPlans(int, @NonNull android.telephony.SubscriptionPlan[], @NonNull String);
    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public void unregisterSubscriptionCallback(@NonNull android.net.NetworkPolicyManager.SubscriptionCallback);
    field public static final int SUBSCRIPTION_OVERRIDE_CONGESTED = 2; // 0x2
    field public static final int SUBSCRIPTION_OVERRIDE_UNMETERED = 1; // 0x1
  }
  public static class NetworkPolicyManager.SubscriptionCallback {
    ctor public NetworkPolicyManager.SubscriptionCallback();
    method public void onSubscriptionOverride(int, int, int);
    method public void onSubscriptionPlansChanged(int, @NonNull android.telephony.SubscriptionPlan[]);
  }
  public class NetworkProvider {
    ctor public NetworkProvider(@NonNull android.content.Context, @NonNull android.os.Looper, @NonNull String);
    method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void declareNetworkRequestUnfulfillable(@NonNull android.net.NetworkRequest);
+83 −2
Original line number Diff line number Diff line
@@ -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) {
@@ -285,6 +292,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 {
@@ -512,6 +548,51 @@ public class NetworkPolicyManager {
        return WifiInfo.removeDoubleQuotes(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) { }