Merge changes from topic "ms83-module-lib"
* changes: Make some NetworkStats APIs system-current [MS83.2] Make some APIs module-lib instead of system current [MS83.1] Make some APIs module-lib instead of system current
This commit is contained in:
@@ -3,7 +3,7 @@ package android.app.usage {
|
||||
|
||||
public final class NetworkStats implements java.lang.AutoCloseable {
|
||||
method public void close();
|
||||
method public boolean getNextBucket(android.app.usage.NetworkStats.Bucket);
|
||||
method public boolean getNextBucket(@Nullable android.app.usage.NetworkStats.Bucket);
|
||||
method public boolean hasNextBucket();
|
||||
}
|
||||
|
||||
@@ -40,21 +40,21 @@ package android.app.usage {
|
||||
}
|
||||
|
||||
public class NetworkStatsManager {
|
||||
method @WorkerThread public android.app.usage.NetworkStats queryDetails(int, String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
|
||||
method @WorkerThread public android.app.usage.NetworkStats queryDetailsForUid(int, String, long, long, int) throws java.lang.SecurityException;
|
||||
method @WorkerThread public android.app.usage.NetworkStats queryDetailsForUidTag(int, String, long, long, int, int) throws java.lang.SecurityException;
|
||||
method @WorkerThread public android.app.usage.NetworkStats queryDetailsForUidTagState(int, String, long, long, int, int, int) throws java.lang.SecurityException;
|
||||
method @WorkerThread public android.app.usage.NetworkStats querySummary(int, String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
|
||||
method @WorkerThread public android.app.usage.NetworkStats.Bucket querySummaryForDevice(int, String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
|
||||
method @WorkerThread public android.app.usage.NetworkStats.Bucket querySummaryForUser(int, String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
|
||||
method public void registerUsageCallback(int, String, long, android.app.usage.NetworkStatsManager.UsageCallback);
|
||||
method public void registerUsageCallback(int, String, long, android.app.usage.NetworkStatsManager.UsageCallback, @Nullable android.os.Handler);
|
||||
method public void unregisterUsageCallback(android.app.usage.NetworkStatsManager.UsageCallback);
|
||||
method @WorkerThread public android.app.usage.NetworkStats queryDetails(int, @Nullable String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
|
||||
method @NonNull @WorkerThread public android.app.usage.NetworkStats queryDetailsForUid(int, @Nullable String, long, long, int) throws java.lang.SecurityException;
|
||||
method @NonNull @WorkerThread public android.app.usage.NetworkStats queryDetailsForUidTag(int, @Nullable String, long, long, int, int) throws java.lang.SecurityException;
|
||||
method @NonNull @WorkerThread public android.app.usage.NetworkStats queryDetailsForUidTagState(int, @Nullable String, long, long, int, int, int) throws java.lang.SecurityException;
|
||||
method @WorkerThread public android.app.usage.NetworkStats querySummary(int, @Nullable String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
|
||||
method @WorkerThread public android.app.usage.NetworkStats.Bucket querySummaryForDevice(int, @Nullable String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
|
||||
method @WorkerThread public android.app.usage.NetworkStats.Bucket querySummaryForUser(int, @Nullable String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
|
||||
method public void registerUsageCallback(int, @Nullable String, long, @NonNull android.app.usage.NetworkStatsManager.UsageCallback);
|
||||
method public void registerUsageCallback(int, @Nullable String, long, @NonNull android.app.usage.NetworkStatsManager.UsageCallback, @Nullable android.os.Handler);
|
||||
method public void unregisterUsageCallback(@NonNull android.app.usage.NetworkStatsManager.UsageCallback);
|
||||
}
|
||||
|
||||
public abstract static class NetworkStatsManager.UsageCallback {
|
||||
ctor public NetworkStatsManager.UsageCallback();
|
||||
method public abstract void onThresholdReached(int, String);
|
||||
method public abstract void onThresholdReached(int, @Nullable String);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -173,12 +173,12 @@ package android.net {
|
||||
method public static void incrementOperationCount(int, int);
|
||||
method public static void setThreadStatsTag(int);
|
||||
method public static void setThreadStatsUid(int);
|
||||
method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
|
||||
method public static void tagFileDescriptor(java.io.FileDescriptor) throws java.io.IOException;
|
||||
method public static void tagSocket(java.net.Socket) throws java.net.SocketException;
|
||||
method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
|
||||
method public static void untagFileDescriptor(java.io.FileDescriptor) throws java.io.IOException;
|
||||
method public static void untagSocket(java.net.Socket) throws java.net.SocketException;
|
||||
method public static void tagDatagramSocket(@NonNull java.net.DatagramSocket) throws java.net.SocketException;
|
||||
method public static void tagFileDescriptor(@NonNull java.io.FileDescriptor) throws java.io.IOException;
|
||||
method public static void tagSocket(@NonNull java.net.Socket) throws java.net.SocketException;
|
||||
method public static void untagDatagramSocket(@NonNull java.net.DatagramSocket) throws java.net.SocketException;
|
||||
method public static void untagFileDescriptor(@NonNull java.io.FileDescriptor) throws java.io.IOException;
|
||||
method public static void untagSocket(@NonNull java.net.Socket) throws java.net.SocketException;
|
||||
field public static final int UNSUPPORTED = -1; // 0xffffffff
|
||||
}
|
||||
|
||||
|
||||
@@ -41,86 +41,18 @@ MissingBuildMethod: android.net.IpSecTransform.Builder:
|
||||
android.net.IpSecTransform.Builder does not declare a `build()` method, but builder classes are expected to
|
||||
|
||||
|
||||
MissingNullability: android.app.usage.NetworkStats#getNextBucket(android.app.usage.NetworkStats.Bucket) parameter #0:
|
||||
Missing nullability on parameter `bucketOut` in method `getNextBucket`
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#queryDetails(int, String, long, long):
|
||||
Missing nullability on method `queryDetails` return
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#queryDetails(int, String, long, long) parameter #1:
|
||||
Missing nullability on parameter `subscriberId` in method `queryDetails`
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#queryDetailsForUid(int, String, long, long, int):
|
||||
Missing nullability on method `queryDetailsForUid` return
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#queryDetailsForUid(int, String, long, long, int) parameter #1:
|
||||
Missing nullability on parameter `subscriberId` in method `queryDetailsForUid`
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#queryDetailsForUidTag(int, String, long, long, int, int):
|
||||
Missing nullability on method `queryDetailsForUidTag` return
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#queryDetailsForUidTag(int, String, long, long, int, int) parameter #1:
|
||||
Missing nullability on parameter `subscriberId` in method `queryDetailsForUidTag`
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#queryDetailsForUidTagState(int, String, long, long, int, int, int):
|
||||
Missing nullability on method `queryDetailsForUidTagState` return
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#queryDetailsForUidTagState(int, String, long, long, int, int, int) parameter #1:
|
||||
Missing nullability on parameter `subscriberId` in method `queryDetailsForUidTagState`
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#querySummary(int, String, long, long):
|
||||
Missing nullability on method `querySummary` return
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#querySummary(int, String, long, long) parameter #1:
|
||||
Missing nullability on parameter `subscriberId` in method `querySummary`
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#querySummaryForDevice(int, String, long, long):
|
||||
Missing nullability on method `querySummaryForDevice` return
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#querySummaryForDevice(int, String, long, long) parameter #1:
|
||||
Missing nullability on parameter `subscriberId` in method `querySummaryForDevice`
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#querySummaryForUser(int, String, long, long):
|
||||
Missing nullability on method `querySummaryForUser` return
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#querySummaryForUser(int, String, long, long) parameter #1:
|
||||
Missing nullability on parameter `subscriberId` in method `querySummaryForUser`
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#registerUsageCallback(int, String, long, android.app.usage.NetworkStatsManager.UsageCallback) parameter #1:
|
||||
Missing nullability on parameter `subscriberId` in method `registerUsageCallback`
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#registerUsageCallback(int, String, long, android.app.usage.NetworkStatsManager.UsageCallback) parameter #3:
|
||||
Missing nullability on parameter `callback` in method `registerUsageCallback`
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#registerUsageCallback(int, String, long, android.app.usage.NetworkStatsManager.UsageCallback, android.os.Handler) parameter #1:
|
||||
Missing nullability on parameter `subscriberId` in method `registerUsageCallback`
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#registerUsageCallback(int, String, long, android.app.usage.NetworkStatsManager.UsageCallback, android.os.Handler) parameter #3:
|
||||
Missing nullability on parameter `callback` in method `registerUsageCallback`
|
||||
MissingNullability: android.app.usage.NetworkStatsManager#unregisterUsageCallback(android.app.usage.NetworkStatsManager.UsageCallback) parameter #0:
|
||||
Missing nullability on parameter `callback` in method `unregisterUsageCallback`
|
||||
MissingNullability: android.app.usage.NetworkStatsManager.UsageCallback#onThresholdReached(int, String) parameter #1:
|
||||
Missing nullability on parameter `subscriberId` in method `onThresholdReached`
|
||||
MissingNullability: android.net.IpSecAlgorithm#writeToParcel(android.os.Parcel, int) parameter #0:
|
||||
Missing nullability on parameter `out` in method `writeToParcel`
|
||||
MissingNullability: android.net.IpSecManager.UdpEncapsulationSocket#getFileDescriptor():
|
||||
Missing nullability on method `getFileDescriptor` return
|
||||
MissingNullability: android.net.TrafficStats#tagDatagramSocket(java.net.DatagramSocket) parameter #0:
|
||||
Missing nullability on parameter `socket` in method `tagDatagramSocket`
|
||||
MissingNullability: android.net.TrafficStats#tagFileDescriptor(java.io.FileDescriptor) parameter #0:
|
||||
Missing nullability on parameter `fd` in method `tagFileDescriptor`
|
||||
MissingNullability: android.net.TrafficStats#tagSocket(java.net.Socket) parameter #0:
|
||||
Missing nullability on parameter `socket` in method `tagSocket`
|
||||
MissingNullability: android.net.TrafficStats#untagDatagramSocket(java.net.DatagramSocket) parameter #0:
|
||||
Missing nullability on parameter `socket` in method `untagDatagramSocket`
|
||||
MissingNullability: android.net.TrafficStats#untagFileDescriptor(java.io.FileDescriptor) parameter #0:
|
||||
Missing nullability on parameter `fd` in method `untagFileDescriptor`
|
||||
MissingNullability: android.net.TrafficStats#untagSocket(java.net.Socket) parameter #0:
|
||||
Missing nullability on parameter `socket` in method `untagSocket`
|
||||
MissingNullability: com.android.internal.util.FileRotator#FileRotator(java.io.File, String, long, long) parameter #0:
|
||||
Missing nullability on parameter `basePath` in method `FileRotator`
|
||||
MissingNullability: com.android.internal.util.FileRotator#FileRotator(java.io.File, String, long, long) parameter #1:
|
||||
Missing nullability on parameter `prefix` in method `FileRotator`
|
||||
MissingNullability: com.android.internal.util.FileRotator#dumpAll(java.io.OutputStream) parameter #0:
|
||||
Missing nullability on parameter `os` in method `dumpAll`
|
||||
MissingNullability: com.android.internal.util.FileRotator#readMatching(com.android.internal.util.FileRotator.Reader, long, long) parameter #0:
|
||||
Missing nullability on parameter `reader` in method `readMatching`
|
||||
MissingNullability: com.android.internal.util.FileRotator#rewriteActive(com.android.internal.util.FileRotator.Rewriter, long) parameter #0:
|
||||
Missing nullability on parameter `rewriter` in method `rewriteActive`
|
||||
MissingNullability: com.android.internal.util.FileRotator#rewriteAll(com.android.internal.util.FileRotator.Rewriter) parameter #0:
|
||||
Missing nullability on parameter `rewriter` in method `rewriteAll`
|
||||
MissingNullability: com.android.internal.util.FileRotator.Reader#read(java.io.InputStream) parameter #0:
|
||||
Missing nullability on parameter `in` in method `read`
|
||||
MissingNullability: com.android.internal.util.FileRotator.Writer#write(java.io.OutputStream) parameter #0:
|
||||
Missing nullability on parameter `out` in method `write`
|
||||
MissingNullability: com.android.server.NetworkManagementSocketTagger#kernelToTag(String) parameter #0:
|
||||
Missing nullability on parameter `string` in method `kernelToTag`
|
||||
MissingNullability: com.android.server.NetworkManagementSocketTagger#tag(java.io.FileDescriptor) parameter #0:
|
||||
Missing nullability on parameter `fd` in method `tag`
|
||||
MissingNullability: com.android.server.NetworkManagementSocketTagger#untag(java.io.FileDescriptor) parameter #0:
|
||||
Missing nullability on parameter `fd` in method `untag`
|
||||
|
||||
|
||||
RethrowRemoteException: android.app.usage.NetworkStatsManager#queryDetails(int, String, long, long):
|
||||
|
||||
@@ -4,6 +4,8 @@ package android.app.usage {
|
||||
public class NetworkStatsManager {
|
||||
method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public void forceUpdate();
|
||||
method public static int getCollapsedRatType(int);
|
||||
method @NonNull @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public android.net.NetworkStats getMobileUidStats();
|
||||
method @NonNull @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public android.net.NetworkStats getWifiUidStats();
|
||||
method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public void noteUidForeground(int, boolean);
|
||||
method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public void notifyNetworkStatus(@NonNull java.util.List<android.net.Network>, @NonNull java.util.List<android.net.NetworkStateSnapshot>, @Nullable String, @NonNull java.util.List<android.net.UnderlyingNetworkInfo>);
|
||||
method @NonNull @WorkerThread public android.app.usage.NetworkStats queryDetailsForDevice(@NonNull android.net.NetworkTemplate, long, long);
|
||||
@@ -182,6 +184,7 @@ package android.net {
|
||||
public class TrafficStats {
|
||||
method public static void attachSocketTagger();
|
||||
method public static void init(@NonNull android.content.Context);
|
||||
method public static void setThreadStatsTagDownload();
|
||||
}
|
||||
|
||||
public final class UnderlyingNetworkInfo implements android.os.Parcelable {
|
||||
|
||||
@@ -2,10 +2,8 @@
|
||||
package android.app.usage {
|
||||
|
||||
public class NetworkStatsManager {
|
||||
method @NonNull @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public android.net.NetworkStats getMobileUidStats();
|
||||
method @NonNull @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public android.net.NetworkStats getWifiUidStats();
|
||||
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STATS_PROVIDER, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void registerNetworkStatsProvider(@NonNull String, @NonNull android.net.netstats.provider.NetworkStatsProvider);
|
||||
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STATS_PROVIDER, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void unregisterNetworkStatsProvider(@NonNull android.net.netstats.provider.NetworkStatsProvider);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STATS_PROVIDER, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void registerNetworkStatsProvider(@NonNull String, @NonNull android.net.netstats.provider.NetworkStatsProvider);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STATS_PROVIDER, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void unregisterNetworkStatsProvider(@NonNull android.net.netstats.provider.NetworkStatsProvider);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -113,7 +111,6 @@ package android.net {
|
||||
public class TrafficStats {
|
||||
method public static void setThreadStatsTagApp();
|
||||
method public static void setThreadStatsTagBackup();
|
||||
method public static void setThreadStatsTagDownload();
|
||||
method public static void setThreadStatsTagRestore();
|
||||
field public static final int TAG_NETWORK_STACK_IMPERSONATION_RANGE_END = -113; // 0xffffff8f
|
||||
field public static final int TAG_NETWORK_STACK_IMPERSONATION_RANGE_START = -128; // 0xffffff80
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package android.app.usage;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.Nullable;
|
||||
import android.content.Context;
|
||||
import android.net.INetworkStatsService;
|
||||
import android.net.INetworkStatsSession;
|
||||
@@ -474,10 +475,11 @@ public final class NetworkStats implements AutoCloseable {
|
||||
|
||||
/**
|
||||
* Fills the recycled bucket with data of the next bin in the enumeration.
|
||||
* @param bucketOut Bucket to be filled with data.
|
||||
* @param bucketOut Bucket to be filled with data. If null, the method does
|
||||
* nothing and returning false.
|
||||
* @return true if successfully filled the bucket, false otherwise.
|
||||
*/
|
||||
public boolean getNextBucket(Bucket bucketOut) {
|
||||
public boolean getNextBucket(@Nullable Bucket bucketOut) {
|
||||
if (mSummary != null) {
|
||||
return getNextSummaryBucket(bucketOut);
|
||||
} else {
|
||||
@@ -651,7 +653,7 @@ public final class NetworkStats implements AutoCloseable {
|
||||
* @param bucketOut Next item will be set here.
|
||||
* @return true if a next item could be set.
|
||||
*/
|
||||
private boolean getNextSummaryBucket(Bucket bucketOut) {
|
||||
private boolean getNextSummaryBucket(@Nullable Bucket bucketOut) {
|
||||
if (bucketOut != null && mEnumerationIndex < mSummary.size()) {
|
||||
mRecycledSummaryEntry = mSummary.getValues(mEnumerationIndex++, mRecycledSummaryEntry);
|
||||
fillBucketFromSummaryEntry(bucketOut);
|
||||
@@ -678,7 +680,7 @@ public final class NetworkStats implements AutoCloseable {
|
||||
* @param bucketOut Next item will be set here.
|
||||
* @return true if a next item could be set.
|
||||
*/
|
||||
private boolean getNextHistoryBucket(Bucket bucketOut) {
|
||||
private boolean getNextHistoryBucket(@Nullable Bucket bucketOut) {
|
||||
if (bucketOut != null && mHistory != null) {
|
||||
if (mEnumerationIndex < mHistory.size()) {
|
||||
mRecycledHistoryEntry = mHistory.getValues(mEnumerationIndex++,
|
||||
|
||||
@@ -290,7 +290,7 @@ public class NetworkStatsManager {
|
||||
* statistics collection.
|
||||
*/
|
||||
@WorkerThread
|
||||
public Bucket querySummaryForDevice(int networkType, String subscriberId,
|
||||
public Bucket querySummaryForDevice(int networkType, @Nullable String subscriberId,
|
||||
long startTime, long endTime) throws SecurityException, RemoteException {
|
||||
NetworkTemplate template;
|
||||
try {
|
||||
@@ -335,8 +335,8 @@ public class NetworkStatsManager {
|
||||
* statistics collection.
|
||||
*/
|
||||
@WorkerThread
|
||||
public Bucket querySummaryForUser(int networkType, String subscriberId, long startTime,
|
||||
long endTime) throws SecurityException, RemoteException {
|
||||
public Bucket querySummaryForUser(int networkType, @Nullable String subscriberId,
|
||||
long startTime, long endTime) throws SecurityException, RemoteException {
|
||||
NetworkTemplate template;
|
||||
try {
|
||||
template = createTemplate(networkType, subscriberId);
|
||||
@@ -384,7 +384,7 @@ public class NetworkStatsManager {
|
||||
* statistics collection.
|
||||
*/
|
||||
@WorkerThread
|
||||
public NetworkStats querySummary(int networkType, String subscriberId, long startTime,
|
||||
public NetworkStats querySummary(int networkType, @Nullable String subscriberId, long startTime,
|
||||
long endTime) throws SecurityException, RemoteException {
|
||||
NetworkTemplate template;
|
||||
try {
|
||||
@@ -508,15 +508,17 @@ public class NetworkStatsManager {
|
||||
*
|
||||
* @see #queryDetailsForUidTagState(int, String, long, long, int, int, int)
|
||||
*/
|
||||
@NonNull
|
||||
@WorkerThread
|
||||
public NetworkStats queryDetailsForUid(int networkType, String subscriberId,
|
||||
public NetworkStats queryDetailsForUid(int networkType, @Nullable String subscriberId,
|
||||
long startTime, long endTime, int uid) throws SecurityException {
|
||||
return queryDetailsForUidTagState(networkType, subscriberId, startTime, endTime, uid,
|
||||
NetworkStats.Bucket.TAG_NONE, NetworkStats.Bucket.STATE_ALL);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public NetworkStats queryDetailsForUid(NetworkTemplate template,
|
||||
@NonNull
|
||||
public NetworkStats queryDetailsForUid(@NonNull NetworkTemplate template,
|
||||
long startTime, long endTime, int uid) throws SecurityException {
|
||||
return queryDetailsForUidTagState(template, startTime, endTime, uid,
|
||||
NetworkStats.Bucket.TAG_NONE, NetworkStats.Bucket.STATE_ALL);
|
||||
@@ -524,23 +526,59 @@ public class NetworkStatsManager {
|
||||
|
||||
/**
|
||||
* Query network usage statistics details for a given uid and tag.
|
||||
*
|
||||
* This may take a long time, and apps should avoid calling this on their main thread.
|
||||
* Only usable for uids belonging to calling user. Result is not aggregated over time.
|
||||
* This means buckets' start and end timestamps are going to be between 'startTime' and
|
||||
* 'endTime' parameters. The uid is going to be the same as the 'uid' parameter, the tag
|
||||
* the same as the 'tag' parameter, and the state the same as the 'state' parameter.
|
||||
* defaultNetwork is going to be {@link NetworkStats.Bucket#DEFAULT_NETWORK_ALL},
|
||||
* metered is going to be {@link NetworkStats.Bucket#METERED_ALL}, and
|
||||
* roaming is going to be {@link NetworkStats.Bucket#ROAMING_ALL}.
|
||||
* <p>Only includes buckets that atomically occur in the inclusive time range. Doesn't
|
||||
* interpolate across partial buckets. Since bucket length is in the order of hours, this
|
||||
* method cannot be used to measure data usage on a fine grained time scale.
|
||||
* This may take a long time, and apps should avoid calling this on their main thread.
|
||||
*
|
||||
* @see #queryDetailsForUidTagState(int, String, long, long, int, int, int)
|
||||
* @param networkType As defined in {@link ConnectivityManager}, e.g.
|
||||
* {@link ConnectivityManager#TYPE_MOBILE}, {@link ConnectivityManager#TYPE_WIFI}
|
||||
* etc.
|
||||
* @param subscriberId If applicable, the subscriber id of the network interface.
|
||||
* <p>Starting with API level 29, the {@code subscriberId} is guarded by
|
||||
* additional restrictions. Calling apps that do not meet the new
|
||||
* requirements to access the {@code subscriberId} can provide a {@code
|
||||
* null} value when querying for the mobile network type to receive usage
|
||||
* for all mobile networks. For additional details see {@link
|
||||
* TelephonyManager#getSubscriberId()}.
|
||||
* <p>Starting with API level 31, calling apps can provide a
|
||||
* {@code subscriberId} with wifi network type to receive usage for
|
||||
* wifi networks which is under the given subscription if applicable.
|
||||
* Otherwise, pass {@code null} when querying all wifi networks.
|
||||
* @param startTime Start of period. Defined in terms of "Unix time", see
|
||||
* {@link java.lang.System#currentTimeMillis}.
|
||||
* @param endTime End of period. Defined in terms of "Unix time", see
|
||||
* {@link java.lang.System#currentTimeMillis}.
|
||||
* @param uid UID of app
|
||||
* @param tag TAG of interest. Use {@link NetworkStats.Bucket#TAG_NONE} for aggregated data
|
||||
* across all the tags.
|
||||
* @return Statistics which is described above.
|
||||
* @throws SecurityException if permissions are insufficient to read network statistics.
|
||||
*/
|
||||
@NonNull
|
||||
@WorkerThread
|
||||
public NetworkStats queryDetailsForUidTag(int networkType, String subscriberId,
|
||||
public NetworkStats queryDetailsForUidTag(int networkType, @Nullable String subscriberId,
|
||||
long startTime, long endTime, int uid, int tag) throws SecurityException {
|
||||
return queryDetailsForUidTagState(networkType, subscriberId, startTime, endTime, uid,
|
||||
tag, NetworkStats.Bucket.STATE_ALL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Query network usage statistics details for a given uid, tag, and state. Only usable for uids
|
||||
* belonging to calling user. Result is not aggregated over time. This means buckets' start and
|
||||
* end timestamps are going to be between 'startTime' and 'endTime' parameters. The uid is going
|
||||
* to be the same as the 'uid' parameter, the tag the same as the 'tag' parameter, and the state
|
||||
* the same as the 'state' parameter.
|
||||
* Query network usage statistics details for a given uid, tag, and state.
|
||||
*
|
||||
* Only usable for uids belonging to calling user. Result is not aggregated over time.
|
||||
* This means buckets' start and end timestamps are going to be between 'startTime' and
|
||||
* 'endTime' parameters. The uid is going to be the same as the 'uid' parameter, the tag
|
||||
* the same as the 'tag' parameter, and the state the same as the 'state' parameter.
|
||||
* defaultNetwork is going to be {@link NetworkStats.Bucket#DEFAULT_NETWORK_ALL},
|
||||
* metered is going to be {@link NetworkStats.Bucket#METERED_ALL}, and
|
||||
* roaming is going to be {@link NetworkStats.Bucket#ROAMING_ALL}.
|
||||
@@ -572,11 +610,12 @@ public class NetworkStatsManager {
|
||||
* across all the tags.
|
||||
* @param state state of interest. Use {@link NetworkStats.Bucket#STATE_ALL} to aggregate
|
||||
* traffic from all states.
|
||||
* @return Statistics object or null if an error happened during statistics collection.
|
||||
* @return Statistics which is described above.
|
||||
* @throws SecurityException if permissions are insufficient to read network statistics.
|
||||
*/
|
||||
@NonNull
|
||||
@WorkerThread
|
||||
public NetworkStats queryDetailsForUidTagState(int networkType, String subscriberId,
|
||||
public NetworkStats queryDetailsForUidTagState(int networkType, @Nullable String subscriberId,
|
||||
long startTime, long endTime, int uid, int tag, int state) throws SecurityException {
|
||||
NetworkTemplate template;
|
||||
template = createTemplate(networkType, subscriberId);
|
||||
@@ -669,7 +708,7 @@ public class NetworkStatsManager {
|
||||
* statistics collection.
|
||||
*/
|
||||
@WorkerThread
|
||||
public NetworkStats queryDetails(int networkType, String subscriberId, long startTime,
|
||||
public NetworkStats queryDetails(int networkType, @Nullable String subscriberId, long startTime,
|
||||
long endTime) throws SecurityException, RemoteException {
|
||||
NetworkTemplate template;
|
||||
try {
|
||||
@@ -698,7 +737,7 @@ public class NetworkStatsManager {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@SystemApi(client = MODULE_LIBRARIES)
|
||||
@RequiresPermission(anyOf = {
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
|
||||
android.Manifest.permission.NETWORK_STACK})
|
||||
@@ -724,7 +763,7 @@ public class NetworkStatsManager {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@SystemApi(client = MODULE_LIBRARIES)
|
||||
@RequiresPermission(anyOf = {
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
|
||||
android.Manifest.permission.NETWORK_STACK})
|
||||
@@ -785,10 +824,28 @@ public class NetworkStatsManager {
|
||||
/**
|
||||
* Registers to receive notifications about data usage on specified networks.
|
||||
*
|
||||
* @see #registerUsageCallback(int, String, long, UsageCallback, Handler)
|
||||
* <p>The callbacks will continue to be called as long as the process is live or
|
||||
* {@link #unregisterUsageCallback} is called.
|
||||
*
|
||||
* @param networkType Type of network to monitor. Either
|
||||
{@link ConnectivityManager#TYPE_MOBILE} or {@link ConnectivityManager#TYPE_WIFI}.
|
||||
* @param subscriberId If applicable, the subscriber id of the network interface.
|
||||
* <p>Starting with API level 29, the {@code subscriberId} is guarded by
|
||||
* additional restrictions. Calling apps that do not meet the new
|
||||
* requirements to access the {@code subscriberId} can provide a {@code
|
||||
* null} value when registering for the mobile network type to receive
|
||||
* notifications for all mobile networks. For additional details see {@link
|
||||
* TelephonyManager#getSubscriberId()}.
|
||||
* <p>Starting with API level 31, calling apps can provide a
|
||||
* {@code subscriberId} with wifi network type to receive usage for
|
||||
* wifi networks which is under the given subscription if applicable.
|
||||
* Otherwise, pass {@code null} when querying all wifi networks.
|
||||
* @param thresholdBytes Threshold in bytes to be notified on.
|
||||
* @param callback The {@link UsageCallback} that the system will call when data usage
|
||||
* has exceeded the specified threshold.
|
||||
*/
|
||||
public void registerUsageCallback(int networkType, String subscriberId, long thresholdBytes,
|
||||
UsageCallback callback) {
|
||||
public void registerUsageCallback(int networkType, @Nullable String subscriberId,
|
||||
long thresholdBytes, @NonNull UsageCallback callback) {
|
||||
registerUsageCallback(networkType, subscriberId, thresholdBytes, callback,
|
||||
null /* handler */);
|
||||
}
|
||||
@@ -818,8 +875,8 @@ public class NetworkStatsManager {
|
||||
* @param handler to dispatch callback events through, otherwise if {@code null} it uses
|
||||
* the calling thread.
|
||||
*/
|
||||
public void registerUsageCallback(int networkType, String subscriberId, long thresholdBytes,
|
||||
UsageCallback callback, @Nullable Handler handler) {
|
||||
public void registerUsageCallback(int networkType, @Nullable String subscriberId,
|
||||
long thresholdBytes, @NonNull UsageCallback callback, @Nullable Handler handler) {
|
||||
NetworkTemplate template = createTemplate(networkType, subscriberId);
|
||||
if (DBG) {
|
||||
Log.d(TAG, "registerUsageCallback called with: {"
|
||||
@@ -839,7 +896,7 @@ public class NetworkStatsManager {
|
||||
*
|
||||
* @param callback The {@link UsageCallback} used when registering.
|
||||
*/
|
||||
public void unregisterUsageCallback(UsageCallback callback) {
|
||||
public void unregisterUsageCallback(@NonNull UsageCallback callback) {
|
||||
if (callback == null || callback.request == null
|
||||
|| callback.request.requestId == DataUsageRequest.REQUEST_ID_UNSET) {
|
||||
throw new IllegalArgumentException("Invalid UsageCallback");
|
||||
@@ -880,7 +937,7 @@ public class NetworkStatsManager {
|
||||
/**
|
||||
* Called when data usage has reached the given threshold.
|
||||
*/
|
||||
public abstract void onThresholdReached(int networkType, String subscriberId);
|
||||
public abstract void onThresholdReached(int networkType, @Nullable String subscriberId);
|
||||
|
||||
/**
|
||||
* @hide used for internal bookkeeping
|
||||
@@ -924,7 +981,7 @@ public class NetworkStatsManager {
|
||||
@RequiresPermission(anyOf = {
|
||||
android.Manifest.permission.NETWORK_STATS_PROVIDER,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK})
|
||||
@NonNull public void registerNetworkStatsProvider(
|
||||
public void registerNetworkStatsProvider(
|
||||
@NonNull String tag,
|
||||
@NonNull NetworkStatsProvider provider) {
|
||||
try {
|
||||
@@ -950,7 +1007,7 @@ public class NetworkStatsManager {
|
||||
@RequiresPermission(anyOf = {
|
||||
android.Manifest.permission.NETWORK_STATS_PROVIDER,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK})
|
||||
@NonNull public void unregisterNetworkStatsProvider(@NonNull NetworkStatsProvider provider) {
|
||||
public void unregisterNetworkStatsProvider(@NonNull NetworkStatsProvider provider) {
|
||||
try {
|
||||
provider.getProviderCallbackBinderOrThrow().unregister();
|
||||
} catch (RemoteException e) {
|
||||
@@ -958,7 +1015,7 @@ public class NetworkStatsManager {
|
||||
}
|
||||
}
|
||||
|
||||
private static NetworkTemplate createTemplate(int networkType, String subscriberId) {
|
||||
private static NetworkTemplate createTemplate(int networkType, @Nullable String subscriberId) {
|
||||
final NetworkTemplate template;
|
||||
switch (networkType) {
|
||||
case ConnectivityManager.TYPE_MOBILE:
|
||||
|
||||
@@ -124,7 +124,6 @@ public final class NetworkStats implements Parcelable, Iterable<NetworkStats.Ent
|
||||
public @Nullable static final String[] INTERFACES_ALL = null;
|
||||
|
||||
/** {@link #tag} value for total data across all tags. */
|
||||
// TODO: Rename TAG_NONE to TAG_ALL.
|
||||
public static final int TAG_NONE = 0;
|
||||
|
||||
/** {@link #metered} value to account for all metered states. */
|
||||
@@ -412,21 +411,24 @@ public final class NetworkStats implements Parcelable, Iterable<NetworkStats.Ent
|
||||
/**
|
||||
* @return the metered state.
|
||||
*/
|
||||
@Meteredness public int getMetered() {
|
||||
@Meteredness
|
||||
public int getMetered() {
|
||||
return metered;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the roaming state.
|
||||
*/
|
||||
@Roaming public int getRoaming() {
|
||||
@Roaming
|
||||
public int getRoaming() {
|
||||
return roaming;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the default network state.
|
||||
*/
|
||||
@DefaultNetwork public int getDefaultNetwork() {
|
||||
@DefaultNetwork
|
||||
public int getDefaultNetwork() {
|
||||
return defaultNetwork;
|
||||
}
|
||||
|
||||
|
||||
@@ -205,7 +205,7 @@ public class TrafficStats {
|
||||
* server context.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
||||
@SystemApi(client = MODULE_LIBRARIES)
|
||||
@SuppressLint("VisiblySynchronized")
|
||||
public static synchronized void init(@NonNull final Context context) {
|
||||
if (sStatsService != null) {
|
||||
@@ -376,7 +376,7 @@ public class TrafficStats {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@SystemApi(client = MODULE_LIBRARIES)
|
||||
public static void setThreadStatsTagDownload() {
|
||||
setThreadStatsTag(TAG_SYSTEM_DOWNLOAD);
|
||||
}
|
||||
@@ -468,7 +468,7 @@ public class TrafficStats {
|
||||
*
|
||||
* @see #setThreadStatsTag(int)
|
||||
*/
|
||||
public static void tagSocket(Socket socket) throws SocketException {
|
||||
public static void tagSocket(@NonNull Socket socket) throws SocketException {
|
||||
SocketTagger.get().tag(socket);
|
||||
}
|
||||
|
||||
@@ -483,7 +483,7 @@ public class TrafficStats {
|
||||
* calling {@code untagSocket()} before sending the socket to another
|
||||
* process.
|
||||
*/
|
||||
public static void untagSocket(Socket socket) throws SocketException {
|
||||
public static void untagSocket(@NonNull Socket socket) throws SocketException {
|
||||
SocketTagger.get().untag(socket);
|
||||
}
|
||||
|
||||
@@ -496,14 +496,14 @@ public class TrafficStats {
|
||||
*
|
||||
* @see #setThreadStatsTag(int)
|
||||
*/
|
||||
public static void tagDatagramSocket(DatagramSocket socket) throws SocketException {
|
||||
public static void tagDatagramSocket(@NonNull DatagramSocket socket) throws SocketException {
|
||||
SocketTagger.get().tag(socket);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove any statistics parameters from the given {@link DatagramSocket}.
|
||||
*/
|
||||
public static void untagDatagramSocket(DatagramSocket socket) throws SocketException {
|
||||
public static void untagDatagramSocket(@NonNull DatagramSocket socket) throws SocketException {
|
||||
SocketTagger.get().untag(socket);
|
||||
}
|
||||
|
||||
@@ -516,7 +516,7 @@ public class TrafficStats {
|
||||
*
|
||||
* @see #setThreadStatsTag(int)
|
||||
*/
|
||||
public static void tagFileDescriptor(FileDescriptor fd) throws IOException {
|
||||
public static void tagFileDescriptor(@NonNull FileDescriptor fd) throws IOException {
|
||||
SocketTagger.get().tag(fd);
|
||||
}
|
||||
|
||||
@@ -524,7 +524,7 @@ public class TrafficStats {
|
||||
* Remove any statistics parameters from the given {@link FileDescriptor}
|
||||
* socket.
|
||||
*/
|
||||
public static void untagFileDescriptor(FileDescriptor fd) throws IOException {
|
||||
public static void untagFileDescriptor(@NonNull FileDescriptor fd) throws IOException {
|
||||
SocketTagger.get().untag(fd);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user