Allow null subscriberId in NetworkStatsManager.
Use a MATCH_MOBILE_WILDCARD template to avoid filtering by subscriberId when querying statistics from NetworkStatsService. Bug: 74038898 Change-Id: I8296220472a9ba37044dd1a5ede9bdb45d3ed339 Fixes: 74038898 Test: runtest frameworks-net, CTS tests pass Merged-In: I1e4e283c6eaecf33d12488e41e0c524f6ff83954 Merged-In: Ia84d2c7cc63bf8b8bf30f133e0382fd7103bf490 (cherry-picked from aosp I4b39e7031416cb33b23d89aa36ff0f774eaa942f)
This commit is contained in:
@@ -24,7 +24,6 @@ import android.net.NetworkStatsHistory;
|
|||||||
import android.net.NetworkTemplate;
|
import android.net.NetworkTemplate;
|
||||||
import android.net.TrafficStats;
|
import android.net.TrafficStats;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.util.IntArray;
|
import android.util.IntArray;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@@ -98,9 +97,8 @@ public final class NetworkStats implements AutoCloseable {
|
|||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
NetworkStats(Context context, NetworkTemplate template, int flags, long startTimestamp,
|
NetworkStats(Context context, NetworkTemplate template, int flags, long startTimestamp,
|
||||||
long endTimestamp) throws RemoteException, SecurityException {
|
long endTimestamp, INetworkStatsService statsService)
|
||||||
final INetworkStatsService statsService = INetworkStatsService.Stub.asInterface(
|
throws RemoteException, SecurityException {
|
||||||
ServiceManager.getService(Context.NETWORK_STATS_SERVICE));
|
|
||||||
// Open network stats session
|
// Open network stats session
|
||||||
mSession = statsService.openSessionForUsageStats(flags, context.getOpPackageName());
|
mSession = statsService.openSessionForUsageStats(flags, context.getOpPackageName());
|
||||||
mCloseGuard.open("close");
|
mCloseGuard.open("close");
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ import android.os.ServiceManager;
|
|||||||
import android.os.ServiceManager.ServiceNotFoundException;
|
import android.os.ServiceManager.ServiceNotFoundException;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides access to network usage history and statistics. Usage data is collected in
|
* Provides access to network usage history and statistics. Usage data is collected in
|
||||||
* discrete bins of time called 'Buckets'. See {@link NetworkStats.Bucket} for details.
|
* discrete bins of time called 'Buckets'. See {@link NetworkStats.Bucket} for details.
|
||||||
@@ -107,9 +109,15 @@ public class NetworkStatsManager {
|
|||||||
* {@hide}
|
* {@hide}
|
||||||
*/
|
*/
|
||||||
public NetworkStatsManager(Context context) throws ServiceNotFoundException {
|
public NetworkStatsManager(Context context) throws ServiceNotFoundException {
|
||||||
|
this(context, INetworkStatsService.Stub.asInterface(
|
||||||
|
ServiceManager.getServiceOrThrow(Context.NETWORK_STATS_SERVICE)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
@VisibleForTesting
|
||||||
|
public NetworkStatsManager(Context context, INetworkStatsService service) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mService = INetworkStatsService.Stub.asInterface(
|
mService = service;
|
||||||
ServiceManager.getServiceOrThrow(Context.NETWORK_STATS_SERVICE));
|
|
||||||
setPollOnOpen(true);
|
setPollOnOpen(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,7 +143,8 @@ public class NetworkStatsManager {
|
|||||||
public Bucket querySummaryForDevice(NetworkTemplate template,
|
public Bucket querySummaryForDevice(NetworkTemplate template,
|
||||||
long startTime, long endTime) throws SecurityException, RemoteException {
|
long startTime, long endTime) throws SecurityException, RemoteException {
|
||||||
Bucket bucket = null;
|
Bucket bucket = null;
|
||||||
NetworkStats stats = new NetworkStats(mContext, template, mFlags, startTime, endTime);
|
NetworkStats stats = new NetworkStats(mContext, template, mFlags, startTime, endTime,
|
||||||
|
mService);
|
||||||
bucket = stats.getDeviceSummaryForNetwork();
|
bucket = stats.getDeviceSummaryForNetwork();
|
||||||
|
|
||||||
stats.close();
|
stats.close();
|
||||||
@@ -208,7 +217,7 @@ public class NetworkStatsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NetworkStats stats;
|
NetworkStats stats;
|
||||||
stats = new NetworkStats(mContext, template, mFlags, startTime, endTime);
|
stats = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService);
|
||||||
stats.startSummaryEnumeration();
|
stats.startSummaryEnumeration();
|
||||||
|
|
||||||
stats.close();
|
stats.close();
|
||||||
@@ -245,7 +254,7 @@ public class NetworkStatsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NetworkStats result;
|
NetworkStats result;
|
||||||
result = new NetworkStats(mContext, template, mFlags, startTime, endTime);
|
result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService);
|
||||||
result.startSummaryEnumeration();
|
result.startSummaryEnumeration();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -295,7 +304,7 @@ public class NetworkStatsManager {
|
|||||||
|
|
||||||
NetworkStats result;
|
NetworkStats result;
|
||||||
try {
|
try {
|
||||||
result = new NetworkStats(mContext, template, mFlags, startTime, endTime);
|
result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService);
|
||||||
result.startHistoryEnumeration(uid, tag);
|
result.startHistoryEnumeration(uid, tag);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.e(TAG, "Error while querying stats for uid=" + uid + " tag=" + tag, e);
|
Log.e(TAG, "Error while querying stats for uid=" + uid + " tag=" + tag, e);
|
||||||
@@ -341,7 +350,7 @@ public class NetworkStatsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NetworkStats result;
|
NetworkStats result;
|
||||||
result = new NetworkStats(mContext, template, mFlags, startTime, endTime);
|
result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService);
|
||||||
result.startUserUidEnumeration();
|
result.startUserUidEnumeration();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -451,19 +460,20 @@ public class NetworkStatsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static NetworkTemplate createTemplate(int networkType, String subscriberId) {
|
private static NetworkTemplate createTemplate(int networkType, String subscriberId) {
|
||||||
NetworkTemplate template = null;
|
final NetworkTemplate template;
|
||||||
switch (networkType) {
|
switch (networkType) {
|
||||||
case ConnectivityManager.TYPE_MOBILE: {
|
case ConnectivityManager.TYPE_MOBILE:
|
||||||
template = NetworkTemplate.buildTemplateMobileAll(subscriberId);
|
template = subscriberId == null
|
||||||
} break;
|
? NetworkTemplate.buildTemplateMobileWildcard()
|
||||||
case ConnectivityManager.TYPE_WIFI: {
|
: NetworkTemplate.buildTemplateMobileAll(subscriberId);
|
||||||
|
break;
|
||||||
|
case ConnectivityManager.TYPE_WIFI:
|
||||||
template = NetworkTemplate.buildTemplateWifiWildcard();
|
template = NetworkTemplate.buildTemplateWifiWildcard();
|
||||||
} break;
|
break;
|
||||||
default: {
|
default:
|
||||||
throw new IllegalArgumentException("Cannot create template for network type "
|
throw new IllegalArgumentException("Cannot create template for network type "
|
||||||
+ networkType + ", subscriberId '"
|
+ networkType + ", subscriberId '"
|
||||||
+ NetworkIdentity.scrubSubscriberId(subscriberId) + "'.");
|
+ NetworkIdentity.scrubSubscriberId(subscriberId) + "'.");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return template;
|
return template;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user