From 45670bb37d4bd2b7b9538ec9eeafc642b47f1fb1 Mon Sep 17 00:00:00 2001 From: Hugo Benichi Date: Wed, 22 Mar 2017 18:29:58 +0900 Subject: [PATCH] Connectivity metrics: add transports pretty printing This patch also - partially reverts commit 7f818778a8f4a194e0a29d402c7034b5bd1aa7b5 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: I1650daf8fc9c1b6e0d986d2285f81e888be8847f Merged-In: Id04f9080e7f75608deeb49306aec34941e71794c (cherry picked from commit df456e13a1127e3c8594b1d22ea4a9b3dca67a4b) --- .../java/android/net/NetworkCapabilities.java | 68 ++++++++----------- 1 file changed, 29 insertions(+), 39 deletions(-) diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java index 8665b9c5cf..a594befbd5 100644 --- a/core/java/android/net/NetworkCapabilities.java +++ b/core/java/android/net/NetworkCapabilities.java @@ -19,7 +19,7 @@ package android.net; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; -import java.lang.IllegalArgumentException; +import com.android.internal.util.BitUtils; /** * This class represents the capabilities of a network. This is used both to specify @@ -289,7 +289,7 @@ public final class NetworkCapabilities implements Parcelable { * @hide */ public int[] getCapabilities() { - return enumerateBits(mNetworkCapabilities); + return BitUtils.unpackBits(mNetworkCapabilities); } /** @@ -305,19 +305,6 @@ public final class NetworkCapabilities implements Parcelable { 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) { this.mNetworkCapabilities |= nc.mNetworkCapabilities; } @@ -428,6 +415,15 @@ public final class NetworkCapabilities implements Parcelable { /** @hide */ 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. * Multiple transports may be applied sequentially. Note that when searching @@ -474,18 +470,7 @@ public final class NetworkCapabilities implements Parcelable { * @hide */ public int[] getTransportTypes() { - return enumerateBits(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; + return BitUtils.unpackBits(mTransportTypes); } /** @@ -899,18 +884,23 @@ public final class NetworkCapabilities implements Parcelable { * @hide */ public static String transportNamesOf(int[] types) { - String transports = ""; - for (int i = 0; i < types.length;) { - 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 += "|"; + if (types == null || types.length == 0) { + return ""; } - return transports; + StringBuilder transports = new StringBuilder(); + for (int t : types) { + transports.append("|").append(transportNameOf(t)); + } + return transports.substring(1); + } + + /** + * @hide + */ + public static String transportNameOf(int transport) { + if (transport < 0 || TRANSPORT_NAMES.length <= transport) { + return "UNKNOWN"; + } + return TRANSPORT_NAMES[transport]; } }