[MS83.1] Make some APIs module-lib instead of system current

Some of the internal classes are not available for priv-apps.
Thus, make them module-lib instead.

This change also adds some nullability annotations for existing
APIs according to go/android-api-guidelines.

Test: m
Test: m frameworks-base-api-system-current-compat
Fix: 217479745
Change-Id: I18de46b11df7232ab82b9465856fdde621283156
This commit is contained in:
junyulai
2022-03-01 16:53:28 +08:00
parent e1ef6d8259
commit 5dc94ede39
4 changed files with 130 additions and 45 deletions

View File

@@ -17,6 +17,7 @@
package android.app.usage; package android.app.usage;
import android.annotation.IntDef; import android.annotation.IntDef;
import android.annotation.Nullable;
import android.content.Context; import android.content.Context;
import android.net.INetworkStatsService; import android.net.INetworkStatsService;
import android.net.INetworkStatsSession; 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. * 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. * @return true if successfully filled the bucket, false otherwise.
*/ */
public boolean getNextBucket(Bucket bucketOut) { public boolean getNextBucket(@Nullable Bucket bucketOut) {
if (mSummary != null) { if (mSummary != null) {
return getNextSummaryBucket(bucketOut); return getNextSummaryBucket(bucketOut);
} else { } else {
@@ -651,7 +653,7 @@ public final class NetworkStats implements AutoCloseable {
* @param bucketOut Next item will be set here. * @param bucketOut Next item will be set here.
* @return true if a next item could be set. * @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()) { if (bucketOut != null && mEnumerationIndex < mSummary.size()) {
mRecycledSummaryEntry = mSummary.getValues(mEnumerationIndex++, mRecycledSummaryEntry); mRecycledSummaryEntry = mSummary.getValues(mEnumerationIndex++, mRecycledSummaryEntry);
fillBucketFromSummaryEntry(bucketOut); fillBucketFromSummaryEntry(bucketOut);
@@ -678,7 +680,7 @@ public final class NetworkStats implements AutoCloseable {
* @param bucketOut Next item will be set here. * @param bucketOut Next item will be set here.
* @return true if a next item could be set. * @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 (bucketOut != null && mHistory != null) {
if (mEnumerationIndex < mHistory.size()) { if (mEnumerationIndex < mHistory.size()) {
mRecycledHistoryEntry = mHistory.getValues(mEnumerationIndex++, mRecycledHistoryEntry = mHistory.getValues(mEnumerationIndex++,

View File

@@ -290,7 +290,7 @@ public class NetworkStatsManager {
* statistics collection. * statistics collection.
*/ */
@WorkerThread @WorkerThread
public Bucket querySummaryForDevice(int networkType, String subscriberId, public Bucket querySummaryForDevice(int networkType, @Nullable String subscriberId,
long startTime, long endTime) throws SecurityException, RemoteException { long startTime, long endTime) throws SecurityException, RemoteException {
NetworkTemplate template; NetworkTemplate template;
try { try {
@@ -335,8 +335,8 @@ public class NetworkStatsManager {
* statistics collection. * statistics collection.
*/ */
@WorkerThread @WorkerThread
public Bucket querySummaryForUser(int networkType, String subscriberId, long startTime, public Bucket querySummaryForUser(int networkType, @Nullable String subscriberId,
long endTime) throws SecurityException, RemoteException { long startTime, long endTime) throws SecurityException, RemoteException {
NetworkTemplate template; NetworkTemplate template;
try { try {
template = createTemplate(networkType, subscriberId); template = createTemplate(networkType, subscriberId);
@@ -384,7 +384,7 @@ public class NetworkStatsManager {
* statistics collection. * statistics collection.
*/ */
@WorkerThread @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 { long endTime) throws SecurityException, RemoteException {
NetworkTemplate template; NetworkTemplate template;
try { try {
@@ -508,15 +508,17 @@ public class NetworkStatsManager {
* *
* @see #queryDetailsForUidTagState(int, String, long, long, int, int, int) * @see #queryDetailsForUidTagState(int, String, long, long, int, int, int)
*/ */
@NonNull
@WorkerThread @WorkerThread
public NetworkStats queryDetailsForUid(int networkType, String subscriberId, public NetworkStats queryDetailsForUid(int networkType, @Nullable String subscriberId,
long startTime, long endTime, int uid) throws SecurityException { long startTime, long endTime, int uid) throws SecurityException {
return queryDetailsForUidTagState(networkType, subscriberId, startTime, endTime, uid, return queryDetailsForUidTagState(networkType, subscriberId, startTime, endTime, uid,
NetworkStats.Bucket.TAG_NONE, NetworkStats.Bucket.STATE_ALL); NetworkStats.Bucket.TAG_NONE, NetworkStats.Bucket.STATE_ALL);
} }
/** @hide */ /** @hide */
public NetworkStats queryDetailsForUid(NetworkTemplate template, @NonNull
public NetworkStats queryDetailsForUid(@NonNull NetworkTemplate template,
long startTime, long endTime, int uid) throws SecurityException { long startTime, long endTime, int uid) throws SecurityException {
return queryDetailsForUidTagState(template, startTime, endTime, uid, return queryDetailsForUidTagState(template, startTime, endTime, uid,
NetworkStats.Bucket.TAG_NONE, NetworkStats.Bucket.STATE_ALL); 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. * 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. * 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 @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 { long startTime, long endTime, int uid, int tag) throws SecurityException {
return queryDetailsForUidTagState(networkType, subscriberId, startTime, endTime, uid, return queryDetailsForUidTagState(networkType, subscriberId, startTime, endTime, uid,
tag, NetworkStats.Bucket.STATE_ALL); tag, NetworkStats.Bucket.STATE_ALL);
} }
/** /**
* Query network usage statistics details for a given uid, tag, and state. Only usable for uids * Query network usage statistics details for a given uid, tag, and state.
* 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 * Only usable for uids belonging to calling user. Result is not aggregated over time.
* to be the same as the 'uid' parameter, the tag the same as the 'tag' parameter, and the state * This means buckets' start and end timestamps are going to be between 'startTime' and
* the same as the 'state' parameter. * '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}, * defaultNetwork is going to be {@link NetworkStats.Bucket#DEFAULT_NETWORK_ALL},
* metered is going to be {@link NetworkStats.Bucket#METERED_ALL}, and * metered is going to be {@link NetworkStats.Bucket#METERED_ALL}, and
* roaming is going to be {@link NetworkStats.Bucket#ROAMING_ALL}. * roaming is going to be {@link NetworkStats.Bucket#ROAMING_ALL}.
@@ -572,11 +610,12 @@ public class NetworkStatsManager {
* across all the tags. * across all the tags.
* @param state state of interest. Use {@link NetworkStats.Bucket#STATE_ALL} to aggregate * @param state state of interest. Use {@link NetworkStats.Bucket#STATE_ALL} to aggregate
* traffic from all states. * 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. * @throws SecurityException if permissions are insufficient to read network statistics.
*/ */
@NonNull
@WorkerThread @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 { long startTime, long endTime, int uid, int tag, int state) throws SecurityException {
NetworkTemplate template; NetworkTemplate template;
template = createTemplate(networkType, subscriberId); template = createTemplate(networkType, subscriberId);
@@ -669,7 +708,7 @@ public class NetworkStatsManager {
* statistics collection. * statistics collection.
*/ */
@WorkerThread @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 { long endTime) throws SecurityException, RemoteException {
NetworkTemplate template; NetworkTemplate template;
try { try {
@@ -698,7 +737,7 @@ public class NetworkStatsManager {
* *
* @hide * @hide
*/ */
@SystemApi @SystemApi(client = MODULE_LIBRARIES)
@RequiresPermission(anyOf = { @RequiresPermission(anyOf = {
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
android.Manifest.permission.NETWORK_STACK}) android.Manifest.permission.NETWORK_STACK})
@@ -724,7 +763,7 @@ public class NetworkStatsManager {
* *
* @hide * @hide
*/ */
@SystemApi @SystemApi(client = MODULE_LIBRARIES)
@RequiresPermission(anyOf = { @RequiresPermission(anyOf = {
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
android.Manifest.permission.NETWORK_STACK}) android.Manifest.permission.NETWORK_STACK})
@@ -785,10 +824,28 @@ public class NetworkStatsManager {
/** /**
* Registers to receive notifications about data usage on specified networks. * 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, public void registerUsageCallback(int networkType, @Nullable String subscriberId,
UsageCallback callback) { long thresholdBytes, @NonNull UsageCallback callback) {
registerUsageCallback(networkType, subscriberId, thresholdBytes, callback, registerUsageCallback(networkType, subscriberId, thresholdBytes, callback,
null /* handler */); null /* handler */);
} }
@@ -818,8 +875,8 @@ public class NetworkStatsManager {
* @param handler to dispatch callback events through, otherwise if {@code null} it uses * @param handler to dispatch callback events through, otherwise if {@code null} it uses
* the calling thread. * the calling thread.
*/ */
public void registerUsageCallback(int networkType, String subscriberId, long thresholdBytes, public void registerUsageCallback(int networkType, @Nullable String subscriberId,
UsageCallback callback, @Nullable Handler handler) { long thresholdBytes, @NonNull UsageCallback callback, @Nullable Handler handler) {
NetworkTemplate template = createTemplate(networkType, subscriberId); NetworkTemplate template = createTemplate(networkType, subscriberId);
if (DBG) { if (DBG) {
Log.d(TAG, "registerUsageCallback called with: {" Log.d(TAG, "registerUsageCallback called with: {"
@@ -839,7 +896,7 @@ public class NetworkStatsManager {
* *
* @param callback The {@link UsageCallback} used when registering. * @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 if (callback == null || callback.request == null
|| callback.request.requestId == DataUsageRequest.REQUEST_ID_UNSET) { || callback.request.requestId == DataUsageRequest.REQUEST_ID_UNSET) {
throw new IllegalArgumentException("Invalid UsageCallback"); throw new IllegalArgumentException("Invalid UsageCallback");
@@ -880,7 +937,7 @@ public class NetworkStatsManager {
/** /**
* Called when data usage has reached the given threshold. * 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 * @hide used for internal bookkeeping
@@ -924,7 +981,7 @@ public class NetworkStatsManager {
@RequiresPermission(anyOf = { @RequiresPermission(anyOf = {
android.Manifest.permission.NETWORK_STATS_PROVIDER, android.Manifest.permission.NETWORK_STATS_PROVIDER,
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK})
@NonNull public void registerNetworkStatsProvider( public void registerNetworkStatsProvider(
@NonNull String tag, @NonNull String tag,
@NonNull NetworkStatsProvider provider) { @NonNull NetworkStatsProvider provider) {
try { try {
@@ -950,7 +1007,7 @@ public class NetworkStatsManager {
@RequiresPermission(anyOf = { @RequiresPermission(anyOf = {
android.Manifest.permission.NETWORK_STATS_PROVIDER, android.Manifest.permission.NETWORK_STATS_PROVIDER,
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK})
@NonNull public void unregisterNetworkStatsProvider(@NonNull NetworkStatsProvider provider) { public void unregisterNetworkStatsProvider(@NonNull NetworkStatsProvider provider) {
try { try {
provider.getProviderCallbackBinderOrThrow().unregister(); provider.getProviderCallbackBinderOrThrow().unregister();
} catch (RemoteException e) { } 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; final NetworkTemplate template;
switch (networkType) { switch (networkType) {
case ConnectivityManager.TYPE_MOBILE: case ConnectivityManager.TYPE_MOBILE:

View File

@@ -16,6 +16,8 @@
package android.net; package android.net;
import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
import static com.android.net.module.util.NetworkStatsUtils.multiplySafeByRational; import static com.android.net.module.util.NetworkStatsUtils.multiplySafeByRational;
import android.annotation.IntDef; import android.annotation.IntDef;
@@ -124,7 +126,6 @@ public final class NetworkStats implements Parcelable, Iterable<NetworkStats.Ent
public @Nullable static final String[] INTERFACES_ALL = null; public @Nullable static final String[] INTERFACES_ALL = null;
/** {@link #tag} value for total data across all tags. */ /** {@link #tag} value for total data across all tags. */
// TODO: Rename TAG_NONE to TAG_ALL.
public static final int TAG_NONE = 0; public static final int TAG_NONE = 0;
/** {@link #metered} value to account for all metered states. */ /** {@link #metered} value to account for all metered states. */
@@ -390,77 +391,102 @@ public final class NetworkStats implements Parcelable, Iterable<NetworkStats.Ent
/** /**
* @return the uid of this entry. * @return the uid of this entry.
* @hide
*/ */
@SystemApi(client = MODULE_LIBRARIES)
public int getUid() { public int getUid() {
return uid; return uid;
} }
/** /**
* @return the set state of this entry. * @return the set state of this entry.
* @hide
*/ */
@SystemApi(client = MODULE_LIBRARIES)
@State public int getSet() { @State public int getSet() {
return set; return set;
} }
/** /**
* @return the tag value of this entry. * @return the tag value of this entry.
* @hide
*/ */
@SystemApi(client = MODULE_LIBRARIES)
public int getTag() { public int getTag() {
return tag; return tag;
} }
/** /**
* @return the metered state. * @return the metered state.
* @hide
*/ */
@Meteredness public int getMetered() { @Meteredness
@SystemApi(client = MODULE_LIBRARIES)
public int getMetered() {
return metered; return metered;
} }
/** /**
* @return the roaming state. * @return the roaming state.
* @hide
*/ */
@Roaming public int getRoaming() { @Roaming
@SystemApi(client = MODULE_LIBRARIES)
public int getRoaming() {
return roaming; return roaming;
} }
/** /**
* @return the default network state. * @return the default network state.
* @hide
*/ */
@DefaultNetwork public int getDefaultNetwork() { @DefaultNetwork
@SystemApi(client = MODULE_LIBRARIES)
public int getDefaultNetwork() {
return defaultNetwork; return defaultNetwork;
} }
/** /**
* @return the number of received bytes. * @return the number of received bytes.
* @hide
*/ */
@SystemApi(client = MODULE_LIBRARIES)
public long getRxBytes() { public long getRxBytes() {
return rxBytes; return rxBytes;
} }
/** /**
* @return the number of received packets. * @return the number of received packets.
* @hide
*/ */
@SystemApi(client = MODULE_LIBRARIES)
public long getRxPackets() { public long getRxPackets() {
return rxPackets; return rxPackets;
} }
/** /**
* @return the number of transmitted bytes. * @return the number of transmitted bytes.
* @hide
*/ */
@SystemApi(client = MODULE_LIBRARIES)
public long getTxBytes() { public long getTxBytes() {
return txBytes; return txBytes;
} }
/** /**
* @return the number of transmitted packets. * @return the number of transmitted packets.
* @hide
*/ */
@SystemApi(client = MODULE_LIBRARIES)
public long getTxPackets() { public long getTxPackets() {
return txPackets; return txPackets;
} }
/** /**
* @return the count of network operations performed for this entry. * @return the count of network operations performed for this entry.
* @hide
*/ */
@SystemApi(client = MODULE_LIBRARIES)
public long getOperations() { public long getOperations() {
return operations; return operations;
} }
@@ -682,7 +708,7 @@ public final class NetworkStats implements Parcelable, Iterable<NetworkStats.Ent
* The remove() method is not implemented and will throw UnsupportedOperationException. * The remove() method is not implemented and will throw UnsupportedOperationException.
* @hide * @hide
*/ */
@SystemApi @SystemApi(client = MODULE_LIBRARIES)
@NonNull public Iterator<Entry> iterator() { @NonNull public Iterator<Entry> iterator() {
return new Iterator<Entry>() { return new Iterator<Entry>() {
int mIndex = 0; int mIndex = 0;

View File

@@ -205,7 +205,7 @@ public class TrafficStats {
* server context. * server context.
* @hide * @hide
*/ */
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @SystemApi(client = MODULE_LIBRARIES)
@SuppressLint("VisiblySynchronized") @SuppressLint("VisiblySynchronized")
public static synchronized void init(@NonNull final Context context) { public static synchronized void init(@NonNull final Context context) {
if (sStatsService != null) { if (sStatsService != null) {
@@ -376,7 +376,7 @@ public class TrafficStats {
* *
* @hide * @hide
*/ */
@SystemApi @SystemApi(client = MODULE_LIBRARIES)
public static void setThreadStatsTagDownload() { public static void setThreadStatsTagDownload() {
setThreadStatsTag(TAG_SYSTEM_DOWNLOAD); setThreadStatsTag(TAG_SYSTEM_DOWNLOAD);
} }
@@ -468,7 +468,7 @@ public class TrafficStats {
* *
* @see #setThreadStatsTag(int) * @see #setThreadStatsTag(int)
*/ */
public static void tagSocket(Socket socket) throws SocketException { public static void tagSocket(@NonNull Socket socket) throws SocketException {
SocketTagger.get().tag(socket); SocketTagger.get().tag(socket);
} }
@@ -483,7 +483,7 @@ public class TrafficStats {
* calling {@code untagSocket()} before sending the socket to another * calling {@code untagSocket()} before sending the socket to another
* process. * process.
*/ */
public static void untagSocket(Socket socket) throws SocketException { public static void untagSocket(@NonNull Socket socket) throws SocketException {
SocketTagger.get().untag(socket); SocketTagger.get().untag(socket);
} }
@@ -496,14 +496,14 @@ public class TrafficStats {
* *
* @see #setThreadStatsTag(int) * @see #setThreadStatsTag(int)
*/ */
public static void tagDatagramSocket(DatagramSocket socket) throws SocketException { public static void tagDatagramSocket(@NonNull DatagramSocket socket) throws SocketException {
SocketTagger.get().tag(socket); SocketTagger.get().tag(socket);
} }
/** /**
* Remove any statistics parameters from the given {@link DatagramSocket}. * 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); SocketTagger.get().untag(socket);
} }
@@ -516,7 +516,7 @@ public class TrafficStats {
* *
* @see #setThreadStatsTag(int) * @see #setThreadStatsTag(int)
*/ */
public static void tagFileDescriptor(FileDescriptor fd) throws IOException { public static void tagFileDescriptor(@NonNull FileDescriptor fd) throws IOException {
SocketTagger.get().tag(fd); SocketTagger.get().tag(fd);
} }
@@ -524,7 +524,7 @@ public class TrafficStats {
* Remove any statistics parameters from the given {@link FileDescriptor} * Remove any statistics parameters from the given {@link FileDescriptor}
* socket. * socket.
*/ */
public static void untagFileDescriptor(FileDescriptor fd) throws IOException { public static void untagFileDescriptor(@NonNull FileDescriptor fd) throws IOException {
SocketTagger.get().untag(fd); SocketTagger.get().untag(fd);
} }