diff --git a/framework-t/src/android/net/NetworkStats.java b/framework-t/src/android/net/NetworkStats.java index 871996034f..0b5bb85e74 100644 --- a/framework-t/src/android/net/NetworkStats.java +++ b/framework-t/src/android/net/NetworkStats.java @@ -46,6 +46,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.function.Function; import java.util.function.Predicate; /** @@ -455,6 +456,41 @@ public final class NetworkStats implements Parcelable, Iterable e.getTag() == TAG_NONE); - final Entry entry = new Entry(); - entry.uid = UID_ALL; - entry.set = SET_ALL; - entry.tag = TAG_NONE; - entry.metered = METERED_ALL; - entry.roaming = ROAMING_ALL; - entry.defaultNetwork = DEFAULT_NETWORK_ALL; - entry.operations = 0L; + final Entry temp = new Entry(); + final NetworkStats mappedStats = copiedStats.map(entry -> temp.setKeys(entry.getIface(), + UID_ALL, SET_ALL, TAG_NONE, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL)); - for (int i = 0; i < size; i++) { - // skip specific tags, since already counted in TAG_NONE - if (tag[i] != TAG_NONE) continue; - - entry.iface = iface[i]; - entry.rxBytes = rxBytes[i]; - entry.rxPackets = rxPackets[i]; - entry.txBytes = txBytes[i]; - entry.txPackets = txPackets[i]; - stats.combineValues(entry); + for (int i = 0; i < mappedStats.size; i++) { + mappedStats.operations[i] = 0L; } - - return stats; + return mappedStats; } /** @@ -1242,30 +1269,15 @@ public final class NetworkStats implements Parcelable, Iterable e.getTag() == TAG_NONE); - final Entry entry = new Entry(); - entry.iface = IFACE_ALL; - entry.set = SET_ALL; - entry.tag = TAG_NONE; - entry.metered = METERED_ALL; - entry.roaming = ROAMING_ALL; - entry.defaultNetwork = DEFAULT_NETWORK_ALL; - - for (int i = 0; i < size; i++) { - // skip specific tags, since already counted in TAG_NONE - if (tag[i] != TAG_NONE) continue; - - entry.uid = uid[i]; - entry.rxBytes = rxBytes[i]; - entry.rxPackets = rxPackets[i]; - entry.txBytes = txBytes[i]; - entry.txPackets = txPackets[i]; - entry.operations = operations[i]; - stats.combineValues(entry); - } - - return stats; + final Entry temp = new Entry(); + return copiedStats.map(entry -> temp.setKeys(IFACE_ALL, + entry.getUid(), SET_ALL, TAG_NONE, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL)); } /** @@ -1301,6 +1313,29 @@ public final class NetworkStats implements Parcelable, Iterable f) { + final NetworkStats ret = new NetworkStats(0, 1); + for (Entry e : this) { + final NetworkStats.Entry transformed = f.apply(e); + if (transformed == e) { + throw new IllegalStateException("A new entry must be created."); + } + transformed.setValues(e.getRxBytes(), e.getRxPackets(), e.getTxBytes(), + e.getTxPackets(), e.getOperations()); + ret.combineValues(transformed); + } + return ret; + } + /** * Only keep entries that match all specified filters. *