Loading packages/SettingsLib/src/com/android/settingslib/net/NetworkCycleDataForUidLoader.java +33 −17 Original line number Diff line number Diff line Loading @@ -26,21 +26,23 @@ import android.util.Log; import java.util.ArrayList; import java.util.List; import androidx.annotation.VisibleForTesting; /** * Loader for network data usage history. It returns a list of usage data per billing cycle for a * specific Uid. * Loader for network data usage history. It returns a list of usage data per billing cycle for the * specific Uid(s). */ public class NetworkCycleDataForUidLoader extends NetworkCycleDataLoader<List<NetworkCycleDataForUid>> { private static final String TAG = "NetworkDataForUidLoader"; private final List<NetworkCycleDataForUid> mData; private final int mUid; private final List<Integer> mUids; private final boolean mRetrieveDetail; private NetworkCycleDataForUidLoader(Builder builder) { super(builder); mUid = builder.mUid; mUids = builder.mUids; mRetrieveDetail = builder.mRetrieveDetail; mData = new ArrayList<NetworkCycleDataForUid>(); } Loading @@ -48,18 +50,27 @@ public class NetworkCycleDataForUidLoader extends @Override void recordUsage(long start, long end) { try { long totalUsage = 0L; long totalForeground = 0L; for (int uid : mUids) { final NetworkStats stats = mNetworkStatsManager.queryDetailsForUid( mNetworkType, mSubId, start, end, mUid); final long total = getTotalUsage(stats); if (total > 0L) { mNetworkType, mSubId, start, end, uid); final long usage = getTotalUsage(stats); if (usage > 0L) { totalUsage += usage; if (mRetrieveDetail) { totalForeground += getForegroundUsage(start, end, uid); } } } if (totalUsage > 0L) { final NetworkCycleDataForUid.Builder builder = new NetworkCycleDataForUid.Builder(); builder.setStartTime(start) .setEndTime(end) .setTotalUsage(total); .setTotalUsage(totalUsage); if (mRetrieveDetail) { final long foreground = getForegroundUsage(start, end); builder.setBackgroundUsage(total - foreground) .setForegroundUsage(foreground); builder.setBackgroundUsage(totalUsage - totalForeground) .setForegroundUsage(totalForeground); } mData.add(builder.build()); } Loading @@ -82,24 +93,29 @@ public class NetworkCycleDataForUidLoader extends }; } private long getForegroundUsage(long start, long end) { @VisibleForTesting(otherwise = VisibleForTesting.NONE) public List<Integer> getUids() { return mUids; } private long getForegroundUsage(long start, long end, int uid) { final NetworkStats stats = mNetworkStatsManager.queryDetailsForUidTagState( mNetworkType, mSubId, start, end, mUid, TAG_NONE, STATE_FOREGROUND); mNetworkType, mSubId, start, end, uid, TAG_NONE, STATE_FOREGROUND); return getTotalUsage(stats); } public static abstract class Builder<T extends NetworkCycleDataForUidLoader> extends NetworkCycleDataLoader.Builder<T> { private int mUid; private final List<Integer> mUids = new ArrayList<>(); private boolean mRetrieveDetail = true; public Builder(Context context) { super(context); } public Builder<T> setUid(int uid) { mUid = uid; public Builder<T> addUid(int uid) { mUids.add(uid); return this; } Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/NetworkCycleDataForUidLoaderTest.java +23 −2 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ public class NetworkCycleDataForUidLoaderTest { final String subId = "TestSubscriber"; final int uid = 1; mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext) .setUid(uid).setSubscriberId(subId).build()); .addUid(uid).setSubscriberId(subId).build()); doReturn(1024L).when(mLoader).getTotalUsage(any()); mLoader.recordUsage(start, end); Loading @@ -88,11 +88,32 @@ public class NetworkCycleDataForUidLoaderTest { final String subId = "TestSubscriber"; final int uid = 1; mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext) .setRetrieveDetail(false).setUid(uid).setSubscriberId(subId).build()); .setRetrieveDetail(false).addUid(uid).setSubscriberId(subId).build()); doReturn(1024L).when(mLoader).getTotalUsage(any()); mLoader.recordUsage(start, end); verify(mNetworkStatsManager, never()).queryDetailsForUidTagState( networkType, subId, start, end, uid, TAG_NONE, STATE_FOREGROUND); } @Test public void recordUsage_multipleUids_shouldQueryNetworkDetailsForEachUid() { final long end = System.currentTimeMillis(); final long start = end - (DateUtils.WEEK_IN_MILLIS * 4); final int networkType = ConnectivityManager.TYPE_MOBILE; final String subId = "TestSubscriber"; mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext) .addUid(1) .addUid(2) .addUid(3) .setSubscriberId(subId).build()); doReturn(1024L).when(mLoader).getTotalUsage(any()); mLoader.recordUsage(start, end); verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 1); verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 2); verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 3); } } Loading
packages/SettingsLib/src/com/android/settingslib/net/NetworkCycleDataForUidLoader.java +33 −17 Original line number Diff line number Diff line Loading @@ -26,21 +26,23 @@ import android.util.Log; import java.util.ArrayList; import java.util.List; import androidx.annotation.VisibleForTesting; /** * Loader for network data usage history. It returns a list of usage data per billing cycle for a * specific Uid. * Loader for network data usage history. It returns a list of usage data per billing cycle for the * specific Uid(s). */ public class NetworkCycleDataForUidLoader extends NetworkCycleDataLoader<List<NetworkCycleDataForUid>> { private static final String TAG = "NetworkDataForUidLoader"; private final List<NetworkCycleDataForUid> mData; private final int mUid; private final List<Integer> mUids; private final boolean mRetrieveDetail; private NetworkCycleDataForUidLoader(Builder builder) { super(builder); mUid = builder.mUid; mUids = builder.mUids; mRetrieveDetail = builder.mRetrieveDetail; mData = new ArrayList<NetworkCycleDataForUid>(); } Loading @@ -48,18 +50,27 @@ public class NetworkCycleDataForUidLoader extends @Override void recordUsage(long start, long end) { try { long totalUsage = 0L; long totalForeground = 0L; for (int uid : mUids) { final NetworkStats stats = mNetworkStatsManager.queryDetailsForUid( mNetworkType, mSubId, start, end, mUid); final long total = getTotalUsage(stats); if (total > 0L) { mNetworkType, mSubId, start, end, uid); final long usage = getTotalUsage(stats); if (usage > 0L) { totalUsage += usage; if (mRetrieveDetail) { totalForeground += getForegroundUsage(start, end, uid); } } } if (totalUsage > 0L) { final NetworkCycleDataForUid.Builder builder = new NetworkCycleDataForUid.Builder(); builder.setStartTime(start) .setEndTime(end) .setTotalUsage(total); .setTotalUsage(totalUsage); if (mRetrieveDetail) { final long foreground = getForegroundUsage(start, end); builder.setBackgroundUsage(total - foreground) .setForegroundUsage(foreground); builder.setBackgroundUsage(totalUsage - totalForeground) .setForegroundUsage(totalForeground); } mData.add(builder.build()); } Loading @@ -82,24 +93,29 @@ public class NetworkCycleDataForUidLoader extends }; } private long getForegroundUsage(long start, long end) { @VisibleForTesting(otherwise = VisibleForTesting.NONE) public List<Integer> getUids() { return mUids; } private long getForegroundUsage(long start, long end, int uid) { final NetworkStats stats = mNetworkStatsManager.queryDetailsForUidTagState( mNetworkType, mSubId, start, end, mUid, TAG_NONE, STATE_FOREGROUND); mNetworkType, mSubId, start, end, uid, TAG_NONE, STATE_FOREGROUND); return getTotalUsage(stats); } public static abstract class Builder<T extends NetworkCycleDataForUidLoader> extends NetworkCycleDataLoader.Builder<T> { private int mUid; private final List<Integer> mUids = new ArrayList<>(); private boolean mRetrieveDetail = true; public Builder(Context context) { super(context); } public Builder<T> setUid(int uid) { mUid = uid; public Builder<T> addUid(int uid) { mUids.add(uid); return this; } Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/NetworkCycleDataForUidLoaderTest.java +23 −2 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ public class NetworkCycleDataForUidLoaderTest { final String subId = "TestSubscriber"; final int uid = 1; mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext) .setUid(uid).setSubscriberId(subId).build()); .addUid(uid).setSubscriberId(subId).build()); doReturn(1024L).when(mLoader).getTotalUsage(any()); mLoader.recordUsage(start, end); Loading @@ -88,11 +88,32 @@ public class NetworkCycleDataForUidLoaderTest { final String subId = "TestSubscriber"; final int uid = 1; mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext) .setRetrieveDetail(false).setUid(uid).setSubscriberId(subId).build()); .setRetrieveDetail(false).addUid(uid).setSubscriberId(subId).build()); doReturn(1024L).when(mLoader).getTotalUsage(any()); mLoader.recordUsage(start, end); verify(mNetworkStatsManager, never()).queryDetailsForUidTagState( networkType, subId, start, end, uid, TAG_NONE, STATE_FOREGROUND); } @Test public void recordUsage_multipleUids_shouldQueryNetworkDetailsForEachUid() { final long end = System.currentTimeMillis(); final long start = end - (DateUtils.WEEK_IN_MILLIS * 4); final int networkType = ConnectivityManager.TYPE_MOBILE; final String subId = "TestSubscriber"; mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext) .addUid(1) .addUid(2) .addUid(3) .setSubscriberId(subId).build()); doReturn(1024L).when(mLoader).getTotalUsage(any()); mLoader.recordUsage(start, end); verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 1); verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 2); verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 3); } }