Merge "Add a flag to specify whether to read detail data or not."
This commit is contained in:
committed by
Android (Google) Code Review
commit
10890087d9
@@ -36,10 +36,12 @@ public class NetworkCycleDataForUidLoader extends
|
||||
|
||||
private final List<NetworkCycleDataForUid> mData;
|
||||
private final int mUid;
|
||||
private final boolean mRetrieveDetail;
|
||||
|
||||
private NetworkCycleDataForUidLoader(Builder builder) {
|
||||
super(builder);
|
||||
mUid = builder.mUid;
|
||||
mRetrieveDetail = builder.mRetrieveDetail;
|
||||
mData = new ArrayList<NetworkCycleDataForUid>();
|
||||
}
|
||||
|
||||
@@ -50,13 +52,15 @@ public class NetworkCycleDataForUidLoader extends
|
||||
mNetworkType, mSubId, start, end, mUid);
|
||||
final long total = getTotalUsage(stats);
|
||||
if (total > 0L) {
|
||||
final long foreground = getForegroundUsage(start, end);
|
||||
final NetworkCycleDataForUid.Builder builder = new NetworkCycleDataForUid.Builder();
|
||||
builder.setBackgroundUsage(total - foreground)
|
||||
.setForegroundUsage(foreground)
|
||||
.setStartTime(start)
|
||||
builder.setStartTime(start)
|
||||
.setEndTime(end)
|
||||
.setTotalUsage(total);
|
||||
if (mRetrieveDetail) {
|
||||
final long foreground = getForegroundUsage(start, end);
|
||||
builder.setBackgroundUsage(total - foreground)
|
||||
.setForegroundUsage(foreground);
|
||||
}
|
||||
mData.add(builder.build());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
@@ -88,6 +92,7 @@ public class NetworkCycleDataForUidLoader extends
|
||||
extends NetworkCycleDataLoader.Builder<T> {
|
||||
|
||||
private int mUid;
|
||||
private boolean mRetrieveDetail = true;
|
||||
|
||||
public Builder(Context context) {
|
||||
super(context);
|
||||
@@ -97,6 +102,11 @@ public class NetworkCycleDataForUidLoader extends
|
||||
mUid = uid;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder<T> setRetrieveDetail(boolean retrieveDetail) {
|
||||
mRetrieveDetail = retrieveDetail;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import static android.net.NetworkStatsHistory.FIELD_TX_BYTES;
|
||||
import android.app.usage.NetworkStats;
|
||||
import android.app.usage.NetworkStatsManager;
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.INetworkStatsService;
|
||||
import android.net.INetworkStatsSession;
|
||||
import android.net.NetworkPolicy;
|
||||
@@ -34,6 +35,8 @@ import android.os.ServiceManager;
|
||||
import android.text.format.DateUtils;
|
||||
import android.util.Pair;
|
||||
|
||||
import com.android.settingslib.NetworkPolicyEditor;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Iterator;
|
||||
|
||||
@@ -55,7 +58,6 @@ public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
|
||||
|
||||
protected NetworkCycleDataLoader(Builder<?> builder) {
|
||||
super(builder.mContext);
|
||||
mPolicy = builder.mPolicy;
|
||||
mSubId = builder.mSubId;
|
||||
mNetworkType = builder.mNetworkType;
|
||||
mNetworkTemplate = builder.mNetworkTemplate;
|
||||
@@ -63,6 +65,10 @@ public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
|
||||
builder.mContext.getSystemService(Context.NETWORK_STATS_SERVICE);
|
||||
mNetworkStatsService = INetworkStatsService.Stub.asInterface(
|
||||
ServiceManager.getService(Context.NETWORK_STATS_SERVICE));
|
||||
final NetworkPolicyEditor policyEditor =
|
||||
new NetworkPolicyEditor(NetworkPolicyManager.from(builder.mContext));
|
||||
policyEditor.read();
|
||||
mPolicy = policyEditor.getPolicy(mNetworkTemplate);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -115,7 +121,8 @@ public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
|
||||
|
||||
long cycleEnd = historyEnd;
|
||||
while (cycleEnd > historyStart) {
|
||||
final long cycleStart = cycleEnd - (DateUtils.WEEK_IN_MILLIS * 4);
|
||||
final long cycleStart = Math.max(
|
||||
historyStart, cycleEnd - (DateUtils.WEEK_IN_MILLIS * 4));
|
||||
recordUsage(cycleStart, cycleEnd);
|
||||
cycleEnd = cycleStart;
|
||||
}
|
||||
@@ -154,7 +161,6 @@ public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
|
||||
|
||||
public static abstract class Builder<T extends NetworkCycleDataLoader> {
|
||||
private final Context mContext;
|
||||
private NetworkPolicy mPolicy;
|
||||
private String mSubId;
|
||||
private int mNetworkType;
|
||||
private NetworkTemplate mNetworkTemplate;
|
||||
@@ -163,27 +169,38 @@ public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
|
||||
mContext = context;
|
||||
}
|
||||
|
||||
public Builder<T> setNetworkPolicy(NetworkPolicy policy) {
|
||||
mPolicy = policy;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder<T> setSubscriberId(String subId) {
|
||||
mSubId = subId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder<T> setNetworkType(int networkType) {
|
||||
mNetworkType = networkType;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder<T> setNetworkTemplate(NetworkTemplate template) {
|
||||
mNetworkTemplate = template;
|
||||
setNetworkType();
|
||||
return this;
|
||||
}
|
||||
|
||||
public abstract T build();
|
||||
|
||||
private void setNetworkType() {
|
||||
if (mNetworkTemplate != null) {
|
||||
final int matchRule = mNetworkTemplate.getMatchRule();
|
||||
switch (matchRule) {
|
||||
case NetworkTemplate.MATCH_MOBILE:
|
||||
case NetworkTemplate.MATCH_MOBILE_WILDCARD:
|
||||
mNetworkType = ConnectivityManager.TYPE_MOBILE;
|
||||
break;
|
||||
case NetworkTemplate.MATCH_WIFI:
|
||||
mNetworkType = ConnectivityManager.TYPE_WIFI;
|
||||
break;
|
||||
case NetworkTemplate.MATCH_ETHERNET:
|
||||
mNetworkType = ConnectivityManager.TYPE_ETHERNET;
|
||||
break;
|
||||
default:
|
||||
mNetworkType = ConnectivityManager.TYPE_MOBILE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,6 +22,8 @@ import static org.mockito.Mockito.when;
|
||||
import android.app.usage.NetworkStatsManager;
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkPolicy;
|
||||
import android.net.NetworkPolicyManager;
|
||||
import android.os.RemoteException;
|
||||
import android.text.format.DateUtils;
|
||||
|
||||
@@ -39,6 +41,8 @@ public class NetworkCycleChartDataLoaderTest {
|
||||
@Mock
|
||||
private NetworkStatsManager mNetworkStatsManager;
|
||||
@Mock
|
||||
private NetworkPolicyManager mNetworkPolicyManager;
|
||||
@Mock
|
||||
private Context mContext;
|
||||
|
||||
private NetworkCycleChartDataLoader mLoader;
|
||||
@@ -48,6 +52,9 @@ public class NetworkCycleChartDataLoaderTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
when(mContext.getSystemService(Context.NETWORK_STATS_SERVICE))
|
||||
.thenReturn(mNetworkStatsManager);
|
||||
when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE))
|
||||
.thenReturn(mNetworkPolicyManager);
|
||||
when(mNetworkPolicyManager.getNetworkPolicies()).thenReturn(new NetworkPolicy[0]);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -57,7 +64,7 @@ public class NetworkCycleChartDataLoaderTest {
|
||||
final int networkType = ConnectivityManager.TYPE_MOBILE;
|
||||
final String subId = "TestSubscriber";
|
||||
mLoader = NetworkCycleChartDataLoader.builder(mContext)
|
||||
.setNetworkType(networkType).setSubscriberId(subId).build();
|
||||
.setSubscriberId(subId).build();
|
||||
|
||||
mLoader.recordUsage(start, end);
|
||||
|
||||
|
||||
@@ -16,12 +16,21 @@
|
||||
|
||||
package com.android.settingslib.net;
|
||||
|
||||
import static android.app.usage.NetworkStats.Bucket.STATE_FOREGROUND;
|
||||
import static android.net.NetworkStats.TAG_NONE;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.usage.NetworkStatsManager;
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkPolicy;
|
||||
import android.net.NetworkPolicyManager;
|
||||
import android.text.format.DateUtils;
|
||||
|
||||
import com.android.settingslib.SettingsLibRobolectricTestRunner;
|
||||
@@ -38,6 +47,8 @@ public class NetworkCycleDataForUidLoaderTest {
|
||||
@Mock
|
||||
private NetworkStatsManager mNetworkStatsManager;
|
||||
@Mock
|
||||
private NetworkPolicyManager mNetworkPolicyManager;
|
||||
@Mock
|
||||
private Context mContext;
|
||||
|
||||
private NetworkCycleDataForUidLoader mLoader;
|
||||
@@ -47,20 +58,42 @@ public class NetworkCycleDataForUidLoaderTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
when(mContext.getSystemService(Context.NETWORK_STATS_SERVICE))
|
||||
.thenReturn(mNetworkStatsManager);
|
||||
when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE))
|
||||
.thenReturn(mNetworkPolicyManager);
|
||||
when(mNetworkPolicyManager.getNetworkPolicies()).thenReturn(new NetworkPolicy[0]);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void recordUsage_shouldQueryNetworkDetailsForUid() {
|
||||
public void recordUsage_shouldQueryNetworkDetailsForUidAndForegroundState() {
|
||||
final long end = System.currentTimeMillis();
|
||||
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
|
||||
final int networkType = ConnectivityManager.TYPE_MOBILE;
|
||||
final String subId = "TestSubscriber";
|
||||
final int uid = 1;
|
||||
mLoader = NetworkCycleDataForUidLoader.builder(mContext)
|
||||
.setUid(uid).setNetworkType(networkType).setSubscriberId(subId).build();
|
||||
mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
|
||||
.setUid(uid).setSubscriberId(subId).build());
|
||||
doReturn(1024L).when(mLoader).getTotalUsage(any());
|
||||
|
||||
mLoader.recordUsage(start, end);
|
||||
|
||||
verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, uid);
|
||||
verify(mNetworkStatsManager).queryDetailsForUidTagState(
|
||||
networkType, subId, start, end, uid, TAG_NONE, STATE_FOREGROUND);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void recordUsage_retrieveDetailIsFalse_shouldNotQueryNetworkForegroundState() {
|
||||
final long end = System.currentTimeMillis();
|
||||
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
|
||||
final int networkType = ConnectivityManager.TYPE_MOBILE;
|
||||
final String subId = "TestSubscriber";
|
||||
final int uid = 1;
|
||||
mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
|
||||
.setRetrieveDetail(false).setUid(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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ import android.net.ConnectivityManager;
|
||||
import android.net.INetworkStatsService;
|
||||
import android.net.INetworkStatsSession;
|
||||
import android.net.NetworkPolicy;
|
||||
import android.net.NetworkPolicyManager;
|
||||
import android.net.NetworkStatsHistory;
|
||||
import android.net.NetworkTemplate;
|
||||
import android.os.RemoteException;
|
||||
@@ -55,6 +56,8 @@ public class NetworkCycleDataLoaderTest {
|
||||
@Mock
|
||||
private NetworkStatsManager mNetworkStatsManager;
|
||||
@Mock
|
||||
private NetworkPolicyManager mNetworkPolicyManager;
|
||||
@Mock
|
||||
private Context mContext;
|
||||
@Mock
|
||||
private NetworkPolicy mPolicy;
|
||||
@@ -62,9 +65,6 @@ public class NetworkCycleDataLoaderTest {
|
||||
private Iterator<Range<ZonedDateTime>> mIterator;
|
||||
@Mock
|
||||
private INetworkStatsService mNetworkStatsService;
|
||||
@Mock
|
||||
private NetworkCycleDataLoader.Builder mBuilder;
|
||||
|
||||
|
||||
private NetworkCycleDataTestLoader mLoader;
|
||||
|
||||
@@ -73,7 +73,10 @@ public class NetworkCycleDataLoaderTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
when(mContext.getSystemService(Context.NETWORK_STATS_SERVICE))
|
||||
.thenReturn(mNetworkStatsManager);
|
||||
when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE))
|
||||
.thenReturn(mNetworkPolicyManager);
|
||||
when(mPolicy.cycleIterator()).thenReturn(mIterator);
|
||||
when(mNetworkPolicyManager.getNetworkPolicies()).thenReturn(new NetworkPolicy[0]);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user