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:
Hugo Benichi
2017-03-22 18:29:58 +09:00
parent 5dd4e7c27a
commit cf83a3f4da

View File

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