Merge "[DU04]Remove NetworkPolicyManagerInternal from NetworkStatsService"
This commit is contained in:
@@ -69,6 +69,8 @@ interface INetworkPolicyManager {
|
|||||||
|
|
||||||
int getMultipathPreference(in Network network);
|
int getMultipathPreference(in Network network);
|
||||||
|
|
||||||
|
SubscriptionPlan getSubscriptionPlan(in NetworkTemplate template);
|
||||||
|
void onStatsProviderWarningOrLimitReached();
|
||||||
SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage);
|
SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage);
|
||||||
void setSubscriptionPlans(int subId, in SubscriptionPlan[] plans, String callingPackage);
|
void setSubscriptionPlans(int subId, in SubscriptionPlan[] plans, String callingPackage);
|
||||||
String getSubscriptionPlansOwner(int subId);
|
String getSubscriptionPlansOwner(int subId);
|
||||||
|
|||||||
@@ -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.
|
* Resets network policy settings back to factory defaults.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -96,6 +96,7 @@ import android.net.Network;
|
|||||||
import android.net.NetworkCapabilities;
|
import android.net.NetworkCapabilities;
|
||||||
import android.net.NetworkIdentity;
|
import android.net.NetworkIdentity;
|
||||||
import android.net.NetworkIdentitySet;
|
import android.net.NetworkIdentitySet;
|
||||||
|
import android.net.NetworkPolicyManager;
|
||||||
import android.net.NetworkSpecifier;
|
import android.net.NetworkSpecifier;
|
||||||
import android.net.NetworkStack;
|
import android.net.NetworkStack;
|
||||||
import android.net.NetworkStateSnapshot;
|
import android.net.NetworkStateSnapshot;
|
||||||
@@ -867,7 +868,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
if (LOGD) Log.d(TAG, "Resolving plan for " + template);
|
if (LOGD) Log.d(TAG, "Resolving plan for " + template);
|
||||||
final long token = Binder.clearCallingIdentity();
|
final long token = Binder.clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
plan = LocalServices.getService(NetworkPolicyManagerInternal.class)
|
plan = mContext.getSystemService(NetworkPolicyManager.class)
|
||||||
.getSubscriptionPlan(template);
|
.getSubscriptionPlan(template);
|
||||||
} finally {
|
} finally {
|
||||||
Binder.restoreCallingIdentity(token);
|
Binder.restoreCallingIdentity(token);
|
||||||
@@ -2038,10 +2039,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
|
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
|
||||||
Objects.requireNonNull(provider, "provider is null");
|
Objects.requireNonNull(provider, "provider is null");
|
||||||
Objects.requireNonNull(tag, "tag is null");
|
Objects.requireNonNull(tag, "tag is null");
|
||||||
|
final NetworkPolicyManager netPolicyManager = mContext
|
||||||
|
.getSystemService(NetworkPolicyManager.class);
|
||||||
try {
|
try {
|
||||||
NetworkStatsProviderCallbackImpl callback = new NetworkStatsProviderCallbackImpl(
|
NetworkStatsProviderCallbackImpl callback = new NetworkStatsProviderCallbackImpl(
|
||||||
tag, provider, mStatsProviderSem, mAlertObserver,
|
tag, provider, mStatsProviderSem, mAlertObserver,
|
||||||
mStatsProviderCbList);
|
mStatsProviderCbList, netPolicyManager);
|
||||||
mStatsProviderCbList.add(callback);
|
mStatsProviderCbList.add(callback);
|
||||||
Log.d(TAG, "registerNetworkStatsProvider from " + callback.mTag + " uid/pid="
|
Log.d(TAG, "registerNetworkStatsProvider from " + callback.mTag + " uid/pid="
|
||||||
+ getCallingUid() + "/" + getCallingPid());
|
+ getCallingUid() + "/" + getCallingPid());
|
||||||
@@ -2083,6 +2086,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
@NonNull private final Semaphore mSemaphore;
|
@NonNull private final Semaphore mSemaphore;
|
||||||
@NonNull final AlertObserver mAlertObserver;
|
@NonNull final AlertObserver mAlertObserver;
|
||||||
@NonNull final CopyOnWriteArrayList<NetworkStatsProviderCallbackImpl> mStatsProviderCbList;
|
@NonNull final CopyOnWriteArrayList<NetworkStatsProviderCallbackImpl> mStatsProviderCbList;
|
||||||
|
@NonNull final NetworkPolicyManager mNetworkPolicyManager;
|
||||||
|
|
||||||
@NonNull private final Object mProviderStatsLock = new Object();
|
@NonNull private final Object mProviderStatsLock = new Object();
|
||||||
|
|
||||||
@@ -2096,7 +2100,8 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
@NonNull String tag, @NonNull INetworkStatsProvider provider,
|
@NonNull String tag, @NonNull INetworkStatsProvider provider,
|
||||||
@NonNull Semaphore semaphore,
|
@NonNull Semaphore semaphore,
|
||||||
@NonNull AlertObserver alertObserver,
|
@NonNull AlertObserver alertObserver,
|
||||||
@NonNull CopyOnWriteArrayList<NetworkStatsProviderCallbackImpl> cbList)
|
@NonNull CopyOnWriteArrayList<NetworkStatsProviderCallbackImpl> cbList,
|
||||||
|
@NonNull NetworkPolicyManager networkPolicyManager)
|
||||||
throws RemoteException {
|
throws RemoteException {
|
||||||
mTag = tag;
|
mTag = tag;
|
||||||
mProvider = provider;
|
mProvider = provider;
|
||||||
@@ -2104,6 +2109,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
mSemaphore = semaphore;
|
mSemaphore = semaphore;
|
||||||
mAlertObserver = alertObserver;
|
mAlertObserver = alertObserver;
|
||||||
mStatsProviderCbList = cbList;
|
mStatsProviderCbList = cbList;
|
||||||
|
mNetworkPolicyManager = networkPolicyManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@@ -2150,8 +2156,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
public void notifyWarningOrLimitReached() {
|
public void notifyWarningOrLimitReached() {
|
||||||
Log.d(TAG, mTag + ": notifyWarningOrLimitReached");
|
Log.d(TAG, mTag + ": notifyWarningOrLimitReached");
|
||||||
BinderUtils.withCleanCallingIdentity(() ->
|
BinderUtils.withCleanCallingIdentity(() ->
|
||||||
LocalServices.getService(NetworkPolicyManagerInternal.class)
|
mNetworkPolicyManager.onStatsProviderWarningOrLimitReached());
|
||||||
.onStatsProviderWarningOrLimitReached(mTag));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -16,11 +16,8 @@
|
|||||||
|
|
||||||
package com.android.server.net;
|
package com.android.server.net;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
import android.net.NetworkTemplate;
|
|
||||||
import android.net.netstats.provider.NetworkStatsProvider;
|
|
||||||
import android.os.PowerExemptionManager.ReasonCode;
|
import android.os.PowerExemptionManager.ReasonCode;
|
||||||
import android.telephony.SubscriptionPlan;
|
import android.telephony.SubscriptionPlan;
|
||||||
|
|
||||||
@@ -56,11 +53,6 @@ public abstract class NetworkPolicyManagerInternal {
|
|||||||
*/
|
*/
|
||||||
public abstract SubscriptionPlan getSubscriptionPlan(Network network);
|
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_JOBS = 1;
|
||||||
public static final int QUOTA_TYPE_MULTIPATH = 2;
|
public static final int QUOTA_TYPE_MULTIPATH = 2;
|
||||||
|
|
||||||
@@ -99,13 +91,4 @@ public abstract class NetworkPolicyManagerInternal {
|
|||||||
*/
|
*/
|
||||||
public abstract void setMeteredRestrictedPackagesAsync(
|
public abstract void setMeteredRestrictedPackagesAsync(
|
||||||
Set<String> packageNames, int userId);
|
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);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3383,6 +3383,35 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
return result;
|
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
|
@Override
|
||||||
public SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage) {
|
public SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage) {
|
||||||
enforceSubscriptionPlanAccess(subId, Binder.getCallingUid(), callingPackage);
|
enforceSubscriptionPlanAccess(subId, Binder.getCallingUid(), callingPackage);
|
||||||
@@ -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
|
@Override
|
||||||
public long getSubscriptionOpportunisticQuota(Network network, int quotaType) {
|
public long getSubscriptionOpportunisticQuota(Network network, int quotaType) {
|
||||||
final long quotaBytes;
|
final long quotaBytes;
|
||||||
@@ -5656,12 +5677,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
mHandler.obtainMessage(MSG_METERED_RESTRICTED_PACKAGES_CHANGED,
|
mHandler.obtainMessage(MSG_METERED_RESTRICTED_PACKAGES_CHANGED,
|
||||||
userId, 0, packageNames).sendToTarget();
|
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) {
|
private void setMeteredRestrictedPackagesInternal(Set<String> packageNames, int userId) {
|
||||||
|
|||||||
@@ -93,6 +93,7 @@
|
|||||||
<uses-permission android:name="android.permission.CONTROL_DEVICE_STATE"/>
|
<uses-permission android:name="android.permission.CONTROL_DEVICE_STATE"/>
|
||||||
<uses-permission android:name="android.permission.READ_PROJECTION_STATE"/>
|
<uses-permission android:name="android.permission.READ_PROJECTION_STATE"/>
|
||||||
<uses-permission android:name="android.permission.KILL_UID"/>
|
<uses-permission android:name="android.permission.KILL_UID"/>
|
||||||
|
<uses-permission android:name="android.permission.MAINLINE_NETWORK_STACK"/>
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD"/>
|
android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD"/>
|
||||||
|
|
||||||
|
|||||||
@@ -1796,9 +1796,7 @@ public class NetworkPolicyManagerServiceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void triggerOnStatsProviderWarningOrLimitReached() throws InterruptedException {
|
private void triggerOnStatsProviderWarningOrLimitReached() throws InterruptedException {
|
||||||
final NetworkPolicyManagerInternal npmi = LocalServices
|
mService.onStatsProviderWarningOrLimitReached();
|
||||||
.getService(NetworkPolicyManagerInternal.class);
|
|
||||||
npmi.onStatsProviderWarningOrLimitReached("TEST");
|
|
||||||
// Wait for processing of MSG_STATS_PROVIDER_WARNING_OR_LIMIT_REACHED.
|
// Wait for processing of MSG_STATS_PROVIDER_WARNING_OR_LIMIT_REACHED.
|
||||||
postMsgAndWaitForCompletion();
|
postMsgAndWaitForCompletion();
|
||||||
verify(mStatsService).forceUpdate();
|
verify(mStatsService).forceUpdate();
|
||||||
|
|||||||
Reference in New Issue
Block a user