Loading core/java/android/net/NetworkIdentity.java +21 −3 Original line number Original line Diff line number Diff line Loading @@ -34,7 +34,7 @@ import java.util.Objects; * * * @hide * @hide */ */ public class NetworkIdentity { public class NetworkIdentity implements Comparable<NetworkIdentity> { /** /** * When enabled, combine all {@link #mSubType} together under * When enabled, combine all {@link #mSubType} together under * {@link #SUBTYPE_COMBINED}. * {@link #SUBTYPE_COMBINED}. Loading Loading @@ -76,7 +76,7 @@ public class NetworkIdentity { @Override @Override public String toString() { public String toString() { final StringBuilder builder = new StringBuilder("["); final StringBuilder builder = new StringBuilder("{"); builder.append("type=").append(getNetworkTypeName(mType)); builder.append("type=").append(getNetworkTypeName(mType)); builder.append(", subType="); builder.append(", subType="); if (COMBINE_SUBTYPE_ENABLED) { if (COMBINE_SUBTYPE_ENABLED) { Loading @@ -95,7 +95,7 @@ public class NetworkIdentity { if (mRoaming) { if (mRoaming) { builder.append(", ROAMING"); builder.append(", ROAMING"); } } return builder.append("]").toString(); return builder.append("}").toString(); } } public int getType() { public int getType() { Loading Loading @@ -170,4 +170,22 @@ public class NetworkIdentity { return new NetworkIdentity(type, subType, subscriberId, networkId, roaming); return new NetworkIdentity(type, subType, subscriberId, networkId, roaming); } } @Override public int compareTo(NetworkIdentity another) { int res = Integer.compare(mType, another.mType); if (res == 0) { res = Integer.compare(mSubType, another.mSubType); } if (res == 0 && mSubscriberId != null && another.mSubscriberId != null) { res = mSubscriberId.compareTo(another.mSubscriberId); } if (res == 0 && mNetworkId != null && another.mNetworkId != null) { res = mNetworkId.compareTo(another.mNetworkId); } if (res == 0) { res = Boolean.compare(mRoaming, another.mRoaming); } return res; } } } core/java/android/net/NetworkStats.java +16 −0 Original line number Original line Diff line number Diff line Loading @@ -732,6 +732,22 @@ public class NetworkStats implements Parcelable { } } } } /** * Return text description of {@link #set} value. */ public static String setToCheckinString(int set) { switch (set) { case SET_ALL: return "all"; case SET_DEFAULT: return "def"; case SET_FOREGROUND: return "fg"; default: return "unk"; } } /** /** * Return text description of {@link #tag} value. * Return text description of {@link #tag} value. */ */ Loading core/java/android/net/NetworkStatsHistory.java +40 −8 Original line number Original line Diff line number Diff line Loading @@ -26,6 +26,7 @@ import static android.net.NetworkStatsHistory.DataStreamUtils.writeVarLongArray; import static android.net.NetworkStatsHistory.Entry.UNKNOWN; import static android.net.NetworkStatsHistory.Entry.UNKNOWN; import static android.net.NetworkStatsHistory.ParcelUtils.readLongArray; import static android.net.NetworkStatsHistory.ParcelUtils.readLongArray; import static android.net.NetworkStatsHistory.ParcelUtils.writeLongArray; import static android.net.NetworkStatsHistory.ParcelUtils.writeLongArray; import static android.text.format.DateUtils.SECOND_IN_MILLIS; import static com.android.internal.util.ArrayUtils.total; import static com.android.internal.util.ArrayUtils.total; import android.os.Parcel; import android.os.Parcel; Loading @@ -38,6 +39,7 @@ import java.io.CharArrayWriter; import java.io.DataInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.IOException; import java.io.PrintWriter; import java.net.ProtocolException; import java.net.ProtocolException; import java.util.Arrays; import java.util.Arrays; import java.util.Random; import java.util.Random; Loading Loading @@ -573,8 +575,22 @@ public class NetworkStatsHistory implements Parcelable { return (long) (start + (r.nextFloat() * (end - start))); return (long) (start + (r.nextFloat() * (end - start))); } } /** * Quickly determine if this history intersects with given window. */ public boolean intersects(long start, long end) { final long dataStart = getStart(); final long dataEnd = getEnd(); if (start >= dataStart && start <= dataEnd) return true; if (end >= dataStart && end <= dataEnd) return true; if (dataStart >= start && dataStart <= end) return true; if (dataEnd >= start && dataEnd <= end) return true; return false; } public void dump(IndentingPrintWriter pw, boolean fullHistory) { public void dump(IndentingPrintWriter pw, boolean fullHistory) { pw.print("NetworkStatsHistory: bucketDuration="); pw.println(bucketDuration); pw.print("NetworkStatsHistory: bucketDuration="); pw.println(bucketDuration / SECOND_IN_MILLIS); pw.increaseIndent(); pw.increaseIndent(); final int start = fullHistory ? 0 : Math.max(0, bucketCount - 32); final int start = fullHistory ? 0 : Math.max(0, bucketCount - 32); Loading @@ -583,19 +599,35 @@ public class NetworkStatsHistory implements Parcelable { } } for (int i = start; i < bucketCount; i++) { for (int i = start; i < bucketCount; i++) { pw.print("bucketStart="); pw.print(bucketStart[i]); pw.print("st="); pw.print(bucketStart[i] / SECOND_IN_MILLIS); if (activeTime != null) { pw.print(" activeTime="); pw.print(activeTime[i]); } if (rxBytes != null) { pw.print(" rb="); pw.print(rxBytes[i]); } if (rxBytes != null) { pw.print(" rxBytes="); pw.print(rxBytes[i]); } if (rxPackets != null) { pw.print(" rp="); pw.print(rxPackets[i]); } if (rxPackets != null) { pw.print(" rxPackets="); pw.print(rxPackets[i]); } if (txBytes != null) { pw.print(" tb="); pw.print(txBytes[i]); } if (txBytes != null) { pw.print(" txBytes="); pw.print(txBytes[i]); } if (txPackets != null) { pw.print(" tp="); pw.print(txPackets[i]); } if (txPackets != null) { pw.print(" txPackets="); pw.print(txPackets[i]); } if (operations != null) { pw.print(" op="); pw.print(operations[i]); } if (operations != null) { pw.print(" operations="); pw.print(operations[i]); } pw.println(); pw.println(); } } pw.decreaseIndent(); pw.decreaseIndent(); } } public void dumpCheckin(PrintWriter pw) { pw.print("d,"); pw.print(bucketDuration / SECOND_IN_MILLIS); pw.println(); for (int i = 0; i < bucketCount; i++) { pw.print("b,"); pw.print(bucketStart[i] / SECOND_IN_MILLIS); pw.print(','); if (rxBytes != null) { pw.print(rxBytes[i]); } else { pw.print("*"); } pw.print(','); if (rxPackets != null) { pw.print(rxPackets[i]); } else { pw.print("*"); } pw.print(','); if (txBytes != null) { pw.print(txBytes[i]); } else { pw.print("*"); } pw.print(','); if (txPackets != null) { pw.print(txPackets[i]); } else { pw.print("*"); } pw.print(','); if (operations != null) { pw.print(operations[i]); } else { pw.print("*"); } pw.println(); } } @Override @Override public String toString() { public String toString() { final CharArrayWriter writer = new CharArrayWriter(); final CharArrayWriter writer = new CharArrayWriter(); Loading core/java/android/net/NetworkTemplate.java +26 −2 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.net; package android.net; import static android.net.ConnectivityManager.TYPE_BLUETOOTH; import static android.net.ConnectivityManager.TYPE_ETHERNET; import static android.net.ConnectivityManager.TYPE_ETHERNET; import static android.net.ConnectivityManager.TYPE_WIFI; import static android.net.ConnectivityManager.TYPE_WIFI; import static android.net.ConnectivityManager.TYPE_WIFI_P2P; import static android.net.ConnectivityManager.TYPE_WIFI_P2P; Loading @@ -34,10 +35,10 @@ import android.content.res.Resources; import android.os.Parcel; import android.os.Parcel; import android.os.Parcelable; import android.os.Parcelable; import java.util.Objects; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import java.util.Objects; /** /** * Template definition used to generically match {@link NetworkIdentity}, * Template definition used to generically match {@link NetworkIdentity}, * usually when collecting statistics. * usually when collecting statistics. Loading @@ -53,6 +54,7 @@ public class NetworkTemplate implements Parcelable { public static final int MATCH_ETHERNET = 5; public static final int MATCH_ETHERNET = 5; public static final int MATCH_MOBILE_WILDCARD = 6; public static final int MATCH_MOBILE_WILDCARD = 6; public static final int MATCH_WIFI_WILDCARD = 7; public static final int MATCH_WIFI_WILDCARD = 7; public static final int MATCH_BLUETOOTH = 8; /** /** * Set of {@link NetworkInfo#getType()} that reflect data usage. * Set of {@link NetworkInfo#getType()} that reflect data usage. Loading Loading @@ -134,6 +136,14 @@ public class NetworkTemplate implements Parcelable { return new NetworkTemplate(MATCH_ETHERNET, null, null); return new NetworkTemplate(MATCH_ETHERNET, null, null); } } /** * Template to combine all {@link ConnectivityManager#TYPE_BLUETOOTH} style * networks together. */ public static NetworkTemplate buildTemplateBluetooth() { return new NetworkTemplate(MATCH_BLUETOOTH, null, null); } private final int mMatchRule; private final int mMatchRule; private final String mSubscriberId; private final String mSubscriberId; private final String mNetworkId; private final String mNetworkId; Loading Loading @@ -222,6 +232,8 @@ public class NetworkTemplate implements Parcelable { return matchesMobileWildcard(ident); return matchesMobileWildcard(ident); case MATCH_WIFI_WILDCARD: case MATCH_WIFI_WILDCARD: return matchesWifiWildcard(ident); return matchesWifiWildcard(ident); case MATCH_BLUETOOTH: return matchesBluetooth(ident); default: default: throw new IllegalArgumentException("unknown network template"); throw new IllegalArgumentException("unknown network template"); } } Loading Loading @@ -316,6 +328,16 @@ public class NetworkTemplate implements Parcelable { } } } } /** * Check if matches Bluetooth network template. */ private boolean matchesBluetooth(NetworkIdentity ident) { if (ident.mType == TYPE_BLUETOOTH) { return true; } return false; } private static String getMatchRuleName(int matchRule) { private static String getMatchRuleName(int matchRule) { switch (matchRule) { switch (matchRule) { case MATCH_MOBILE_3G_LOWER: case MATCH_MOBILE_3G_LOWER: Loading @@ -332,6 +354,8 @@ public class NetworkTemplate implements Parcelable { return "MOBILE_WILDCARD"; return "MOBILE_WILDCARD"; case MATCH_WIFI_WILDCARD: case MATCH_WIFI_WILDCARD: return "WIFI_WILDCARD"; return "WIFI_WILDCARD"; case MATCH_BLUETOOTH: return "BLUETOOTH"; default: default: return "UNKNOWN"; return "UNKNOWN"; } } Loading core/tests/coretests/src/android/net/NetworkStatsHistoryTest.java +34 −0 Original line number Original line Diff line number Diff line Loading @@ -451,6 +451,40 @@ public class NetworkStatsHistoryTest extends AndroidTestCase { assertIndexBeforeAfter(stats, 4, 4, Long.MAX_VALUE); assertIndexBeforeAfter(stats, 4, 4, Long.MAX_VALUE); } } public void testIntersects() throws Exception { final long BUCKET_SIZE = HOUR_IN_MILLIS; stats = new NetworkStatsHistory(BUCKET_SIZE); final long FIRST_START = TEST_START; final long FIRST_END = FIRST_START + (2 * HOUR_IN_MILLIS); final long SECOND_START = TEST_START + WEEK_IN_MILLIS; final long SECOND_END = SECOND_START + HOUR_IN_MILLIS; final long THIRD_START = TEST_START + (2 * WEEK_IN_MILLIS); final long THIRD_END = THIRD_START + (2 * HOUR_IN_MILLIS); stats.recordData(FIRST_START, FIRST_END, new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 2L)); stats.recordData(SECOND_START, SECOND_END, new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 2L)); stats.recordData(THIRD_START, THIRD_END, new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 2L)); assertFalse(stats.intersects(10, 20)); assertFalse(stats.intersects(TEST_START + YEAR_IN_MILLIS, TEST_START + YEAR_IN_MILLIS + 1)); assertFalse(stats.intersects(Long.MAX_VALUE, Long.MIN_VALUE)); assertTrue(stats.intersects(Long.MIN_VALUE, Long.MAX_VALUE)); assertTrue(stats.intersects(10, TEST_START + YEAR_IN_MILLIS)); assertTrue(stats.intersects(TEST_START, TEST_START)); assertTrue(stats.intersects(TEST_START + DAY_IN_MILLIS, TEST_START + DAY_IN_MILLIS + 1)); assertTrue(stats.intersects(TEST_START + DAY_IN_MILLIS, Long.MAX_VALUE)); assertTrue(stats.intersects(TEST_START + 1, Long.MAX_VALUE)); assertFalse(stats.intersects(Long.MIN_VALUE, TEST_START - 1)); assertTrue(stats.intersects(Long.MIN_VALUE, TEST_START)); assertTrue(stats.intersects(Long.MIN_VALUE, TEST_START + 1)); } private static void assertIndexBeforeAfter( private static void assertIndexBeforeAfter( NetworkStatsHistory stats, int before, int after, long time) { NetworkStatsHistory stats, int before, int after, long time) { assertEquals("unexpected before", before, stats.getIndexBefore(time)); assertEquals("unexpected before", before, stats.getIndexBefore(time)); Loading Loading
core/java/android/net/NetworkIdentity.java +21 −3 Original line number Original line Diff line number Diff line Loading @@ -34,7 +34,7 @@ import java.util.Objects; * * * @hide * @hide */ */ public class NetworkIdentity { public class NetworkIdentity implements Comparable<NetworkIdentity> { /** /** * When enabled, combine all {@link #mSubType} together under * When enabled, combine all {@link #mSubType} together under * {@link #SUBTYPE_COMBINED}. * {@link #SUBTYPE_COMBINED}. Loading Loading @@ -76,7 +76,7 @@ public class NetworkIdentity { @Override @Override public String toString() { public String toString() { final StringBuilder builder = new StringBuilder("["); final StringBuilder builder = new StringBuilder("{"); builder.append("type=").append(getNetworkTypeName(mType)); builder.append("type=").append(getNetworkTypeName(mType)); builder.append(", subType="); builder.append(", subType="); if (COMBINE_SUBTYPE_ENABLED) { if (COMBINE_SUBTYPE_ENABLED) { Loading @@ -95,7 +95,7 @@ public class NetworkIdentity { if (mRoaming) { if (mRoaming) { builder.append(", ROAMING"); builder.append(", ROAMING"); } } return builder.append("]").toString(); return builder.append("}").toString(); } } public int getType() { public int getType() { Loading Loading @@ -170,4 +170,22 @@ public class NetworkIdentity { return new NetworkIdentity(type, subType, subscriberId, networkId, roaming); return new NetworkIdentity(type, subType, subscriberId, networkId, roaming); } } @Override public int compareTo(NetworkIdentity another) { int res = Integer.compare(mType, another.mType); if (res == 0) { res = Integer.compare(mSubType, another.mSubType); } if (res == 0 && mSubscriberId != null && another.mSubscriberId != null) { res = mSubscriberId.compareTo(another.mSubscriberId); } if (res == 0 && mNetworkId != null && another.mNetworkId != null) { res = mNetworkId.compareTo(another.mNetworkId); } if (res == 0) { res = Boolean.compare(mRoaming, another.mRoaming); } return res; } } }
core/java/android/net/NetworkStats.java +16 −0 Original line number Original line Diff line number Diff line Loading @@ -732,6 +732,22 @@ public class NetworkStats implements Parcelable { } } } } /** * Return text description of {@link #set} value. */ public static String setToCheckinString(int set) { switch (set) { case SET_ALL: return "all"; case SET_DEFAULT: return "def"; case SET_FOREGROUND: return "fg"; default: return "unk"; } } /** /** * Return text description of {@link #tag} value. * Return text description of {@link #tag} value. */ */ Loading
core/java/android/net/NetworkStatsHistory.java +40 −8 Original line number Original line Diff line number Diff line Loading @@ -26,6 +26,7 @@ import static android.net.NetworkStatsHistory.DataStreamUtils.writeVarLongArray; import static android.net.NetworkStatsHistory.Entry.UNKNOWN; import static android.net.NetworkStatsHistory.Entry.UNKNOWN; import static android.net.NetworkStatsHistory.ParcelUtils.readLongArray; import static android.net.NetworkStatsHistory.ParcelUtils.readLongArray; import static android.net.NetworkStatsHistory.ParcelUtils.writeLongArray; import static android.net.NetworkStatsHistory.ParcelUtils.writeLongArray; import static android.text.format.DateUtils.SECOND_IN_MILLIS; import static com.android.internal.util.ArrayUtils.total; import static com.android.internal.util.ArrayUtils.total; import android.os.Parcel; import android.os.Parcel; Loading @@ -38,6 +39,7 @@ import java.io.CharArrayWriter; import java.io.DataInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.IOException; import java.io.PrintWriter; import java.net.ProtocolException; import java.net.ProtocolException; import java.util.Arrays; import java.util.Arrays; import java.util.Random; import java.util.Random; Loading Loading @@ -573,8 +575,22 @@ public class NetworkStatsHistory implements Parcelable { return (long) (start + (r.nextFloat() * (end - start))); return (long) (start + (r.nextFloat() * (end - start))); } } /** * Quickly determine if this history intersects with given window. */ public boolean intersects(long start, long end) { final long dataStart = getStart(); final long dataEnd = getEnd(); if (start >= dataStart && start <= dataEnd) return true; if (end >= dataStart && end <= dataEnd) return true; if (dataStart >= start && dataStart <= end) return true; if (dataEnd >= start && dataEnd <= end) return true; return false; } public void dump(IndentingPrintWriter pw, boolean fullHistory) { public void dump(IndentingPrintWriter pw, boolean fullHistory) { pw.print("NetworkStatsHistory: bucketDuration="); pw.println(bucketDuration); pw.print("NetworkStatsHistory: bucketDuration="); pw.println(bucketDuration / SECOND_IN_MILLIS); pw.increaseIndent(); pw.increaseIndent(); final int start = fullHistory ? 0 : Math.max(0, bucketCount - 32); final int start = fullHistory ? 0 : Math.max(0, bucketCount - 32); Loading @@ -583,19 +599,35 @@ public class NetworkStatsHistory implements Parcelable { } } for (int i = start; i < bucketCount; i++) { for (int i = start; i < bucketCount; i++) { pw.print("bucketStart="); pw.print(bucketStart[i]); pw.print("st="); pw.print(bucketStart[i] / SECOND_IN_MILLIS); if (activeTime != null) { pw.print(" activeTime="); pw.print(activeTime[i]); } if (rxBytes != null) { pw.print(" rb="); pw.print(rxBytes[i]); } if (rxBytes != null) { pw.print(" rxBytes="); pw.print(rxBytes[i]); } if (rxPackets != null) { pw.print(" rp="); pw.print(rxPackets[i]); } if (rxPackets != null) { pw.print(" rxPackets="); pw.print(rxPackets[i]); } if (txBytes != null) { pw.print(" tb="); pw.print(txBytes[i]); } if (txBytes != null) { pw.print(" txBytes="); pw.print(txBytes[i]); } if (txPackets != null) { pw.print(" tp="); pw.print(txPackets[i]); } if (txPackets != null) { pw.print(" txPackets="); pw.print(txPackets[i]); } if (operations != null) { pw.print(" op="); pw.print(operations[i]); } if (operations != null) { pw.print(" operations="); pw.print(operations[i]); } pw.println(); pw.println(); } } pw.decreaseIndent(); pw.decreaseIndent(); } } public void dumpCheckin(PrintWriter pw) { pw.print("d,"); pw.print(bucketDuration / SECOND_IN_MILLIS); pw.println(); for (int i = 0; i < bucketCount; i++) { pw.print("b,"); pw.print(bucketStart[i] / SECOND_IN_MILLIS); pw.print(','); if (rxBytes != null) { pw.print(rxBytes[i]); } else { pw.print("*"); } pw.print(','); if (rxPackets != null) { pw.print(rxPackets[i]); } else { pw.print("*"); } pw.print(','); if (txBytes != null) { pw.print(txBytes[i]); } else { pw.print("*"); } pw.print(','); if (txPackets != null) { pw.print(txPackets[i]); } else { pw.print("*"); } pw.print(','); if (operations != null) { pw.print(operations[i]); } else { pw.print("*"); } pw.println(); } } @Override @Override public String toString() { public String toString() { final CharArrayWriter writer = new CharArrayWriter(); final CharArrayWriter writer = new CharArrayWriter(); Loading
core/java/android/net/NetworkTemplate.java +26 −2 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.net; package android.net; import static android.net.ConnectivityManager.TYPE_BLUETOOTH; import static android.net.ConnectivityManager.TYPE_ETHERNET; import static android.net.ConnectivityManager.TYPE_ETHERNET; import static android.net.ConnectivityManager.TYPE_WIFI; import static android.net.ConnectivityManager.TYPE_WIFI; import static android.net.ConnectivityManager.TYPE_WIFI_P2P; import static android.net.ConnectivityManager.TYPE_WIFI_P2P; Loading @@ -34,10 +35,10 @@ import android.content.res.Resources; import android.os.Parcel; import android.os.Parcel; import android.os.Parcelable; import android.os.Parcelable; import java.util.Objects; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import java.util.Objects; /** /** * Template definition used to generically match {@link NetworkIdentity}, * Template definition used to generically match {@link NetworkIdentity}, * usually when collecting statistics. * usually when collecting statistics. Loading @@ -53,6 +54,7 @@ public class NetworkTemplate implements Parcelable { public static final int MATCH_ETHERNET = 5; public static final int MATCH_ETHERNET = 5; public static final int MATCH_MOBILE_WILDCARD = 6; public static final int MATCH_MOBILE_WILDCARD = 6; public static final int MATCH_WIFI_WILDCARD = 7; public static final int MATCH_WIFI_WILDCARD = 7; public static final int MATCH_BLUETOOTH = 8; /** /** * Set of {@link NetworkInfo#getType()} that reflect data usage. * Set of {@link NetworkInfo#getType()} that reflect data usage. Loading Loading @@ -134,6 +136,14 @@ public class NetworkTemplate implements Parcelable { return new NetworkTemplate(MATCH_ETHERNET, null, null); return new NetworkTemplate(MATCH_ETHERNET, null, null); } } /** * Template to combine all {@link ConnectivityManager#TYPE_BLUETOOTH} style * networks together. */ public static NetworkTemplate buildTemplateBluetooth() { return new NetworkTemplate(MATCH_BLUETOOTH, null, null); } private final int mMatchRule; private final int mMatchRule; private final String mSubscriberId; private final String mSubscriberId; private final String mNetworkId; private final String mNetworkId; Loading Loading @@ -222,6 +232,8 @@ public class NetworkTemplate implements Parcelable { return matchesMobileWildcard(ident); return matchesMobileWildcard(ident); case MATCH_WIFI_WILDCARD: case MATCH_WIFI_WILDCARD: return matchesWifiWildcard(ident); return matchesWifiWildcard(ident); case MATCH_BLUETOOTH: return matchesBluetooth(ident); default: default: throw new IllegalArgumentException("unknown network template"); throw new IllegalArgumentException("unknown network template"); } } Loading Loading @@ -316,6 +328,16 @@ public class NetworkTemplate implements Parcelable { } } } } /** * Check if matches Bluetooth network template. */ private boolean matchesBluetooth(NetworkIdentity ident) { if (ident.mType == TYPE_BLUETOOTH) { return true; } return false; } private static String getMatchRuleName(int matchRule) { private static String getMatchRuleName(int matchRule) { switch (matchRule) { switch (matchRule) { case MATCH_MOBILE_3G_LOWER: case MATCH_MOBILE_3G_LOWER: Loading @@ -332,6 +354,8 @@ public class NetworkTemplate implements Parcelable { return "MOBILE_WILDCARD"; return "MOBILE_WILDCARD"; case MATCH_WIFI_WILDCARD: case MATCH_WIFI_WILDCARD: return "WIFI_WILDCARD"; return "WIFI_WILDCARD"; case MATCH_BLUETOOTH: return "BLUETOOTH"; default: default: return "UNKNOWN"; return "UNKNOWN"; } } Loading
core/tests/coretests/src/android/net/NetworkStatsHistoryTest.java +34 −0 Original line number Original line Diff line number Diff line Loading @@ -451,6 +451,40 @@ public class NetworkStatsHistoryTest extends AndroidTestCase { assertIndexBeforeAfter(stats, 4, 4, Long.MAX_VALUE); assertIndexBeforeAfter(stats, 4, 4, Long.MAX_VALUE); } } public void testIntersects() throws Exception { final long BUCKET_SIZE = HOUR_IN_MILLIS; stats = new NetworkStatsHistory(BUCKET_SIZE); final long FIRST_START = TEST_START; final long FIRST_END = FIRST_START + (2 * HOUR_IN_MILLIS); final long SECOND_START = TEST_START + WEEK_IN_MILLIS; final long SECOND_END = SECOND_START + HOUR_IN_MILLIS; final long THIRD_START = TEST_START + (2 * WEEK_IN_MILLIS); final long THIRD_END = THIRD_START + (2 * HOUR_IN_MILLIS); stats.recordData(FIRST_START, FIRST_END, new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 2L)); stats.recordData(SECOND_START, SECOND_END, new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 2L)); stats.recordData(THIRD_START, THIRD_END, new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 2L)); assertFalse(stats.intersects(10, 20)); assertFalse(stats.intersects(TEST_START + YEAR_IN_MILLIS, TEST_START + YEAR_IN_MILLIS + 1)); assertFalse(stats.intersects(Long.MAX_VALUE, Long.MIN_VALUE)); assertTrue(stats.intersects(Long.MIN_VALUE, Long.MAX_VALUE)); assertTrue(stats.intersects(10, TEST_START + YEAR_IN_MILLIS)); assertTrue(stats.intersects(TEST_START, TEST_START)); assertTrue(stats.intersects(TEST_START + DAY_IN_MILLIS, TEST_START + DAY_IN_MILLIS + 1)); assertTrue(stats.intersects(TEST_START + DAY_IN_MILLIS, Long.MAX_VALUE)); assertTrue(stats.intersects(TEST_START + 1, Long.MAX_VALUE)); assertFalse(stats.intersects(Long.MIN_VALUE, TEST_START - 1)); assertTrue(stats.intersects(Long.MIN_VALUE, TEST_START)); assertTrue(stats.intersects(Long.MIN_VALUE, TEST_START + 1)); } private static void assertIndexBeforeAfter( private static void assertIndexBeforeAfter( NetworkStatsHistory stats, int before, int after, long time) { NetworkStatsHistory stats, int before, int after, long time) { assertEquals("unexpected before", before, stats.getIndexBefore(time)); assertEquals("unexpected before", before, stats.getIndexBefore(time)); Loading