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:
Frank Li
2022-01-16 00:23:04 +00:00
committed by Automerger Merge Worker
7 changed files with 83 additions and 39 deletions

View File

@@ -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);

View File

@@ -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.
*

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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) {

View File

@@ -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"/>

View File

@@ -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();