Connectivity metrics: add transports pretty printing
This patch also
- partially reverts commit 7f818778a8
that exposed a getTransports method on NetworkCapabilities.
- moves enumerateBits to BitUtils (as unpackBits), and adds the
reverse packBit method.
Bug: 34901696
Test: manually looked at $ adb shell dumpsys connmetrics list
Change-Id: Id04f9080e7f75608deeb49306aec34941e71794c
This commit is contained in:
@@ -18,7 +18,8 @@ package android.net;
|
|||||||
|
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.util.Log;
|
|
||||||
|
import com.android.internal.util.BitUtils;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -279,7 +280,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public int[] getCapabilities() {
|
public int[] getCapabilities() {
|
||||||
return enumerateBits(mNetworkCapabilities);
|
return BitUtils.unpackBits(mNetworkCapabilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -295,19 +296,6 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
return ((mNetworkCapabilities & (1 << capability)) != 0);
|
return ((mNetworkCapabilities & (1 << capability)) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int[] enumerateBits(long val) {
|
|
||||||
int size = Long.bitCount(val);
|
|
||||||
int[] result = new int[size];
|
|
||||||
int index = 0;
|
|
||||||
int resource = 0;
|
|
||||||
while (val > 0) {
|
|
||||||
if ((val & 1) == 1) result[index++] = resource;
|
|
||||||
val = val >> 1;
|
|
||||||
resource++;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void combineNetCapabilities(NetworkCapabilities nc) {
|
private void combineNetCapabilities(NetworkCapabilities nc) {
|
||||||
this.mNetworkCapabilities |= nc.mNetworkCapabilities;
|
this.mNetworkCapabilities |= nc.mNetworkCapabilities;
|
||||||
}
|
}
|
||||||
@@ -418,6 +406,15 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
/** @hide */
|
/** @hide */
|
||||||
public static final int MAX_TRANSPORT = TRANSPORT_WIFI_AWARE;
|
public static final int MAX_TRANSPORT = TRANSPORT_WIFI_AWARE;
|
||||||
|
|
||||||
|
private static final String[] TRANSPORT_NAMES = {
|
||||||
|
"CELLULAR",
|
||||||
|
"WIFI",
|
||||||
|
"BLUETOOTH",
|
||||||
|
"ETHERNET",
|
||||||
|
"VPN",
|
||||||
|
"WIFI_AWARE"
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the given transport type to this {@code NetworkCapability} instance.
|
* Adds the given transport type to this {@code NetworkCapability} instance.
|
||||||
* Multiple transports may be applied sequentially. Note that when searching
|
* Multiple transports may be applied sequentially. Note that when searching
|
||||||
@@ -464,18 +461,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public int[] getTransportTypes() {
|
public int[] getTransportTypes() {
|
||||||
return enumerateBits(mTransportTypes);
|
return BitUtils.unpackBits(mTransportTypes);
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets all the transports set on this {@code NetworkCapability} instance.
|
|
||||||
*
|
|
||||||
* @return a bit field composed of up bits at indexes defined by
|
|
||||||
* {@code NetworkCapabilities.TRANSPORT_*} values for this instance.
|
|
||||||
* @hide
|
|
||||||
*/
|
|
||||||
public long getTransports() {
|
|
||||||
return mTransportTypes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -882,18 +868,23 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public static String transportNamesOf(int[] types) {
|
public static String transportNamesOf(int[] types) {
|
||||||
String transports = "";
|
if (types == null || types.length == 0) {
|
||||||
for (int i = 0; i < types.length;) {
|
return "";
|
||||||
switch (types[i]) {
|
|
||||||
case TRANSPORT_CELLULAR: transports += "CELLULAR"; break;
|
|
||||||
case TRANSPORT_WIFI: transports += "WIFI"; break;
|
|
||||||
case TRANSPORT_BLUETOOTH: transports += "BLUETOOTH"; break;
|
|
||||||
case TRANSPORT_ETHERNET: transports += "ETHERNET"; break;
|
|
||||||
case TRANSPORT_VPN: transports += "VPN"; break;
|
|
||||||
case TRANSPORT_WIFI_AWARE: transports += "WIFI_AWARE"; break;
|
|
||||||
}
|
}
|
||||||
if (++i < types.length) transports += "|";
|
StringBuilder transports = new StringBuilder();
|
||||||
|
for (int t : types) {
|
||||||
|
transports.append("|").append(transportNameOf(t));
|
||||||
}
|
}
|
||||||
return transports;
|
return transports.substring(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static String transportNameOf(int transport) {
|
||||||
|
if (transport < 0 || TRANSPORT_NAMES.length <= transport) {
|
||||||
|
return "UNKNOWN";
|
||||||
|
}
|
||||||
|
return TRANSPORT_NAMES[transport];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user