Merge "[DU04]Remove NetworkPolicyManagerInternal from NetworkStatsService" am: d15c37c0e0 am: c1e289ceaf am: f1a2f28e75 am: 9efe853815
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1934459 Change-Id: Icc2aef5cb876439b1e8fd01eca75ceeb1394aac3
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
@@ -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());
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
@@ -2104,6 +2109,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
||||
mSemaphore = semaphore;
|
||||
mAlertObserver = alertObserver;
|
||||
mStatsProviderCbList = cbList;
|
||||
mNetworkPolicyManager = networkPolicyManager;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -3363,6 +3363,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);
|
||||
@@ -5582,14 +5611,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;
|
||||
@@ -5632,12 +5653,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) {
|
||||
|
||||
@@ -95,6 +95,7 @@
|
||||
<uses-permission android:name="android.permission.CONTROL_DEVICE_STATE"/>
|
||||
<uses-permission android:name="android.permission.READ_PROJECTION_STATE"/>
|
||||
<uses-permission android:name="android.permission.KILL_UID"/>
|
||||
<uses-permission android:name="android.permission.MAINLINE_NETWORK_STACK"/>
|
||||
<uses-permission
|
||||
android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD"/>
|
||||
|
||||
|
||||
@@ -1796,9 +1796,7 @@ public class NetworkPolicyManagerServiceTest {
|
||||
}
|
||||
|
||||
private void triggerOnStatsProviderWarningOrLimitReached() throws InterruptedException {
|
||||
final NetworkPolicyManagerInternal npmi = LocalServices
|
||||
.getService(NetworkPolicyManagerInternal.class);
|
||||
npmi.onStatsProviderWarningOrLimitReached("TEST");
|
||||
mService.onStatsProviderWarningOrLimitReached();
|
||||
// Wait for processing of MSG_STATS_PROVIDER_WARNING_OR_LIMIT_REACHED.
|
||||
postMsgAndWaitForCompletion();
|
||||
verify(mStatsService).forceUpdate();
|
||||
|
||||
Reference in New Issue
Block a user