Loading core/java/android/net/INetworkPolicyManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,8 @@ interface INetworkPolicyManager { int getMultipathPreference(in Network network); SubscriptionPlan getSubscriptionPlan(in NetworkTemplate template); void onStatsProviderWarningOrLimitReached(); SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage); void setSubscriptionPlans(int subId, in SubscriptionPlan[] plans, String callingPackage); String getSubscriptionPlansOwner(int subId); Loading core/java/android/net/NetworkPolicyManager.java +40 −0 Original line number Diff line number Diff line Loading @@ -534,6 +534,46 @@ public class NetworkPolicyManager { } } /** * Get subscription plan for the given networkTemplate. * * @param template the networkTemplate to get the subscription plan for. * @return the active {@link SubscriptionPlan} for the given template, or * {@code null} if not found. * @hide */ @Nullable @RequiresPermission(anyOf = { NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) // @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) public SubscriptionPlan getSubscriptionPlan(@NonNull NetworkTemplate template) { try { return mService.getSubscriptionPlan(template); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Notifies that the specified {@link NetworkStatsProvider} has reached its quota * which was set through {@link NetworkStatsProvider#onSetLimit(String, long)} or * {@link NetworkStatsProvider#onSetWarningAndLimit(String, long, long)}. * * @hide */ @RequiresPermission(anyOf = { NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) // @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) public void onStatsProviderWarningOrLimitReached() { try { mService.onStatsProviderWarningOrLimitReached(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Resets network policy settings back to factory defaults. * Loading packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java +10 −5 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkIdentity; import android.net.NetworkIdentitySet; import android.net.NetworkPolicyManager; import android.net.NetworkSpecifier; import android.net.NetworkStack; import android.net.NetworkStateSnapshot; Loading Loading @@ -867,7 +868,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { if (LOGD) Log.d(TAG, "Resolving plan for " + template); final long token = Binder.clearCallingIdentity(); try { plan = LocalServices.getService(NetworkPolicyManagerInternal.class) plan = mContext.getSystemService(NetworkPolicyManager.class) .getSubscriptionPlan(template); } finally { Binder.restoreCallingIdentity(token); Loading Loading @@ -2038,10 +2039,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub { NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK); Objects.requireNonNull(provider, "provider is null"); Objects.requireNonNull(tag, "tag is null"); final NetworkPolicyManager netPolicyManager = mContext .getSystemService(NetworkPolicyManager.class); try { NetworkStatsProviderCallbackImpl callback = new NetworkStatsProviderCallbackImpl( tag, provider, mStatsProviderSem, mAlertObserver, mStatsProviderCbList); mStatsProviderCbList, netPolicyManager); mStatsProviderCbList.add(callback); Log.d(TAG, "registerNetworkStatsProvider from " + callback.mTag + " uid/pid=" + getCallingUid() + "/" + getCallingPid()); Loading Loading @@ -2083,6 +2086,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { @NonNull private final Semaphore mSemaphore; @NonNull final AlertObserver mAlertObserver; @NonNull final CopyOnWriteArrayList<NetworkStatsProviderCallbackImpl> mStatsProviderCbList; @NonNull final NetworkPolicyManager mNetworkPolicyManager; @NonNull private final Object mProviderStatsLock = new Object(); Loading @@ -2096,7 +2100,8 @@ public class NetworkStatsService extends INetworkStatsService.Stub { @NonNull String tag, @NonNull INetworkStatsProvider provider, @NonNull Semaphore semaphore, @NonNull AlertObserver alertObserver, @NonNull CopyOnWriteArrayList<NetworkStatsProviderCallbackImpl> cbList) @NonNull CopyOnWriteArrayList<NetworkStatsProviderCallbackImpl> cbList, @NonNull NetworkPolicyManager networkPolicyManager) throws RemoteException { mTag = tag; mProvider = provider; Loading @@ -2104,6 +2109,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { mSemaphore = semaphore; mAlertObserver = alertObserver; mStatsProviderCbList = cbList; mNetworkPolicyManager = networkPolicyManager; } @NonNull Loading Loading @@ -2150,8 +2156,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { public void notifyWarningOrLimitReached() { Log.d(TAG, mTag + ": notifyWarningOrLimitReached"); BinderUtils.withCleanCallingIdentity(() -> LocalServices.getService(NetworkPolicyManagerInternal.class) .onStatsProviderWarningOrLimitReached(mTag)); mNetworkPolicyManager.onStatsProviderWarningOrLimitReached()); } @Override Loading services/core/java/com/android/server/net/NetworkPolicyManagerInternal.java +0 −17 Original line number Diff line number Diff line Loading @@ -16,11 +16,8 @@ package com.android.server.net; import android.annotation.NonNull; import android.annotation.Nullable; import android.net.Network; import android.net.NetworkTemplate; import android.net.netstats.provider.NetworkStatsProvider; import android.os.PowerExemptionManager.ReasonCode; import android.telephony.SubscriptionPlan; Loading Loading @@ -56,11 +53,6 @@ public abstract class NetworkPolicyManagerInternal { */ public abstract SubscriptionPlan getSubscriptionPlan(Network network); /** * Return the active {@link SubscriptionPlan} for the given template. */ public abstract SubscriptionPlan getSubscriptionPlan(NetworkTemplate template); public static final int QUOTA_TYPE_JOBS = 1; public static final int QUOTA_TYPE_MULTIPATH = 2; Loading Loading @@ -99,13 +91,4 @@ public abstract class NetworkPolicyManagerInternal { */ public abstract void setMeteredRestrictedPackagesAsync( Set<String> packageNames, int userId); /** * Notifies that the specified {@link NetworkStatsProvider} has reached its quota * which was set through {@link NetworkStatsProvider#onSetLimit(String, long)} or * {@link NetworkStatsProvider#onSetWarningAndLimit(String, long, long)}. * * @param tag the human readable identifier of the custom network stats provider. */ public abstract void onStatsProviderWarningOrLimitReached(@NonNull String tag); } services/core/java/com/android/server/net/NetworkPolicyManagerService.java +29 −14 Original line number Diff line number Diff line Loading @@ -3383,6 +3383,35 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return result; } /** * Get subscription plan for the given networkTemplate. * * @param template the networkTemplate to get the subscription plan for. */ @Override public SubscriptionPlan getSubscriptionPlan(@NonNull NetworkTemplate template) { enforceAnyPermissionOf(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK); synchronized (mNetworkPoliciesSecondLock) { final int subId = findRelevantSubIdNL(template); return getPrimarySubscriptionPlanLocked(subId); } } /** * Notifies that the specified {@link NetworkStatsProvider} has reached its quota * which was set through {@link NetworkStatsProvider#onSetLimit(String, long)} or * {@link NetworkStatsProvider#onSetWarningAndLimit(String, long, long)}. */ @Override public void onStatsProviderWarningOrLimitReached() { enforceAnyPermissionOf(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK); // This API may be called before the system is ready. synchronized (mNetworkPoliciesSecondLock) { if (!mSystemReady) return; } mHandler.obtainMessage(MSG_STATS_PROVIDER_WARNING_OR_LIMIT_REACHED).sendToTarget(); } @Override public SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage) { enforceSubscriptionPlanAccess(subId, Binder.getCallingUid(), callingPackage); Loading Loading @@ -5606,14 +5635,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } } @Override public SubscriptionPlan getSubscriptionPlan(NetworkTemplate template) { synchronized (mNetworkPoliciesSecondLock) { final int subId = findRelevantSubIdNL(template); return getPrimarySubscriptionPlanLocked(subId); } } @Override public long getSubscriptionOpportunisticQuota(Network network, int quotaType) { final long quotaBytes; Loading Loading @@ -5656,12 +5677,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { mHandler.obtainMessage(MSG_METERED_RESTRICTED_PACKAGES_CHANGED, userId, 0, packageNames).sendToTarget(); } @Override public void onStatsProviderWarningOrLimitReached(@NonNull String tag) { Log.v(TAG, "onStatsProviderWarningOrLimitReached: " + tag); mHandler.obtainMessage(MSG_STATS_PROVIDER_WARNING_OR_LIMIT_REACHED).sendToTarget(); } } private void setMeteredRestrictedPackagesInternal(Set<String> packageNames, int userId) { Loading Loading
core/java/android/net/INetworkPolicyManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,8 @@ interface INetworkPolicyManager { int getMultipathPreference(in Network network); SubscriptionPlan getSubscriptionPlan(in NetworkTemplate template); void onStatsProviderWarningOrLimitReached(); SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage); void setSubscriptionPlans(int subId, in SubscriptionPlan[] plans, String callingPackage); String getSubscriptionPlansOwner(int subId); Loading
core/java/android/net/NetworkPolicyManager.java +40 −0 Original line number Diff line number Diff line Loading @@ -534,6 +534,46 @@ public class NetworkPolicyManager { } } /** * Get subscription plan for the given networkTemplate. * * @param template the networkTemplate to get the subscription plan for. * @return the active {@link SubscriptionPlan} for the given template, or * {@code null} if not found. * @hide */ @Nullable @RequiresPermission(anyOf = { NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) // @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) public SubscriptionPlan getSubscriptionPlan(@NonNull NetworkTemplate template) { try { return mService.getSubscriptionPlan(template); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Notifies that the specified {@link NetworkStatsProvider} has reached its quota * which was set through {@link NetworkStatsProvider#onSetLimit(String, long)} or * {@link NetworkStatsProvider#onSetWarningAndLimit(String, long, long)}. * * @hide */ @RequiresPermission(anyOf = { NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) // @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) public void onStatsProviderWarningOrLimitReached() { try { mService.onStatsProviderWarningOrLimitReached(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Resets network policy settings back to factory defaults. * Loading
packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java +10 −5 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkIdentity; import android.net.NetworkIdentitySet; import android.net.NetworkPolicyManager; import android.net.NetworkSpecifier; import android.net.NetworkStack; import android.net.NetworkStateSnapshot; Loading Loading @@ -867,7 +868,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { if (LOGD) Log.d(TAG, "Resolving plan for " + template); final long token = Binder.clearCallingIdentity(); try { plan = LocalServices.getService(NetworkPolicyManagerInternal.class) plan = mContext.getSystemService(NetworkPolicyManager.class) .getSubscriptionPlan(template); } finally { Binder.restoreCallingIdentity(token); Loading Loading @@ -2038,10 +2039,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub { NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK); Objects.requireNonNull(provider, "provider is null"); Objects.requireNonNull(tag, "tag is null"); final NetworkPolicyManager netPolicyManager = mContext .getSystemService(NetworkPolicyManager.class); try { NetworkStatsProviderCallbackImpl callback = new NetworkStatsProviderCallbackImpl( tag, provider, mStatsProviderSem, mAlertObserver, mStatsProviderCbList); mStatsProviderCbList, netPolicyManager); mStatsProviderCbList.add(callback); Log.d(TAG, "registerNetworkStatsProvider from " + callback.mTag + " uid/pid=" + getCallingUid() + "/" + getCallingPid()); Loading Loading @@ -2083,6 +2086,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { @NonNull private final Semaphore mSemaphore; @NonNull final AlertObserver mAlertObserver; @NonNull final CopyOnWriteArrayList<NetworkStatsProviderCallbackImpl> mStatsProviderCbList; @NonNull final NetworkPolicyManager mNetworkPolicyManager; @NonNull private final Object mProviderStatsLock = new Object(); Loading @@ -2096,7 +2100,8 @@ public class NetworkStatsService extends INetworkStatsService.Stub { @NonNull String tag, @NonNull INetworkStatsProvider provider, @NonNull Semaphore semaphore, @NonNull AlertObserver alertObserver, @NonNull CopyOnWriteArrayList<NetworkStatsProviderCallbackImpl> cbList) @NonNull CopyOnWriteArrayList<NetworkStatsProviderCallbackImpl> cbList, @NonNull NetworkPolicyManager networkPolicyManager) throws RemoteException { mTag = tag; mProvider = provider; Loading @@ -2104,6 +2109,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { mSemaphore = semaphore; mAlertObserver = alertObserver; mStatsProviderCbList = cbList; mNetworkPolicyManager = networkPolicyManager; } @NonNull Loading Loading @@ -2150,8 +2156,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { public void notifyWarningOrLimitReached() { Log.d(TAG, mTag + ": notifyWarningOrLimitReached"); BinderUtils.withCleanCallingIdentity(() -> LocalServices.getService(NetworkPolicyManagerInternal.class) .onStatsProviderWarningOrLimitReached(mTag)); mNetworkPolicyManager.onStatsProviderWarningOrLimitReached()); } @Override Loading
services/core/java/com/android/server/net/NetworkPolicyManagerInternal.java +0 −17 Original line number Diff line number Diff line Loading @@ -16,11 +16,8 @@ package com.android.server.net; import android.annotation.NonNull; import android.annotation.Nullable; import android.net.Network; import android.net.NetworkTemplate; import android.net.netstats.provider.NetworkStatsProvider; import android.os.PowerExemptionManager.ReasonCode; import android.telephony.SubscriptionPlan; Loading Loading @@ -56,11 +53,6 @@ public abstract class NetworkPolicyManagerInternal { */ public abstract SubscriptionPlan getSubscriptionPlan(Network network); /** * Return the active {@link SubscriptionPlan} for the given template. */ public abstract SubscriptionPlan getSubscriptionPlan(NetworkTemplate template); public static final int QUOTA_TYPE_JOBS = 1; public static final int QUOTA_TYPE_MULTIPATH = 2; Loading Loading @@ -99,13 +91,4 @@ public abstract class NetworkPolicyManagerInternal { */ public abstract void setMeteredRestrictedPackagesAsync( Set<String> packageNames, int userId); /** * Notifies that the specified {@link NetworkStatsProvider} has reached its quota * which was set through {@link NetworkStatsProvider#onSetLimit(String, long)} or * {@link NetworkStatsProvider#onSetWarningAndLimit(String, long, long)}. * * @param tag the human readable identifier of the custom network stats provider. */ public abstract void onStatsProviderWarningOrLimitReached(@NonNull String tag); }
services/core/java/com/android/server/net/NetworkPolicyManagerService.java +29 −14 Original line number Diff line number Diff line Loading @@ -3383,6 +3383,35 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return result; } /** * Get subscription plan for the given networkTemplate. * * @param template the networkTemplate to get the subscription plan for. */ @Override public SubscriptionPlan getSubscriptionPlan(@NonNull NetworkTemplate template) { enforceAnyPermissionOf(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK); synchronized (mNetworkPoliciesSecondLock) { final int subId = findRelevantSubIdNL(template); return getPrimarySubscriptionPlanLocked(subId); } } /** * Notifies that the specified {@link NetworkStatsProvider} has reached its quota * which was set through {@link NetworkStatsProvider#onSetLimit(String, long)} or * {@link NetworkStatsProvider#onSetWarningAndLimit(String, long, long)}. */ @Override public void onStatsProviderWarningOrLimitReached() { enforceAnyPermissionOf(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK); // This API may be called before the system is ready. synchronized (mNetworkPoliciesSecondLock) { if (!mSystemReady) return; } mHandler.obtainMessage(MSG_STATS_PROVIDER_WARNING_OR_LIMIT_REACHED).sendToTarget(); } @Override public SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage) { enforceSubscriptionPlanAccess(subId, Binder.getCallingUid(), callingPackage); Loading Loading @@ -5606,14 +5635,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } } @Override public SubscriptionPlan getSubscriptionPlan(NetworkTemplate template) { synchronized (mNetworkPoliciesSecondLock) { final int subId = findRelevantSubIdNL(template); return getPrimarySubscriptionPlanLocked(subId); } } @Override public long getSubscriptionOpportunisticQuota(Network network, int quotaType) { final long quotaBytes; Loading Loading @@ -5656,12 +5677,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { mHandler.obtainMessage(MSG_METERED_RESTRICTED_PACKAGES_CHANGED, userId, 0, packageNames).sendToTarget(); } @Override public void onStatsProviderWarningOrLimitReached(@NonNull String tag) { Log.v(TAG, "onStatsProviderWarningOrLimitReached: " + tag); mHandler.obtainMessage(MSG_STATS_PROVIDER_WARNING_OR_LIMIT_REACHED).sendToTarget(); } } private void setMeteredRestrictedPackagesInternal(Set<String> packageNames, int userId) { Loading