Merge "Use merged NetworkTemplate to query data usage" into qt-dev
This commit is contained in:
@@ -278,6 +278,12 @@ public class NetworkStatsManager {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return querySummary(template, startTime, endTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public NetworkStats querySummary(NetworkTemplate template, long startTime,
|
||||||
|
long endTime) throws SecurityException, RemoteException {
|
||||||
NetworkStats result;
|
NetworkStats result;
|
||||||
result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService);
|
result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService);
|
||||||
result.startSummaryEnumeration();
|
result.startSummaryEnumeration();
|
||||||
@@ -296,6 +302,13 @@ public class NetworkStatsManager {
|
|||||||
NetworkStats.Bucket.TAG_NONE, NetworkStats.Bucket.STATE_ALL);
|
NetworkStats.Bucket.TAG_NONE, NetworkStats.Bucket.STATE_ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public NetworkStats queryDetailsForUid(NetworkTemplate template,
|
||||||
|
long startTime, long endTime, int uid) throws SecurityException {
|
||||||
|
return queryDetailsForUidTagState(template, startTime, endTime, uid,
|
||||||
|
NetworkStats.Bucket.TAG_NONE, NetworkStats.Bucket.STATE_ALL);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query network usage statistics details for a given uid and tag.
|
* Query network usage statistics details for a given uid and tag.
|
||||||
*
|
*
|
||||||
@@ -340,6 +353,13 @@ public class NetworkStatsManager {
|
|||||||
NetworkTemplate template;
|
NetworkTemplate template;
|
||||||
template = createTemplate(networkType, subscriberId);
|
template = createTemplate(networkType, subscriberId);
|
||||||
|
|
||||||
|
return queryDetailsForUidTagState(template, startTime, endTime, uid, tag, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public NetworkStats queryDetailsForUidTagState(NetworkTemplate template,
|
||||||
|
long startTime, long endTime, int uid, int tag, int state) throws SecurityException {
|
||||||
|
|
||||||
NetworkStats result;
|
NetworkStats result;
|
||||||
try {
|
try {
|
||||||
result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService);
|
result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService);
|
||||||
|
|||||||
@@ -175,9 +175,7 @@ public class DataUsageController {
|
|||||||
|
|
||||||
private long getUsageLevel(NetworkTemplate template, long start, long end) {
|
private long getUsageLevel(NetworkTemplate template, long start, long end) {
|
||||||
try {
|
try {
|
||||||
final Bucket bucket = mNetworkStatsManager.querySummaryForDevice(
|
final Bucket bucket = mNetworkStatsManager.querySummaryForDevice(template, start, end);
|
||||||
getNetworkType(template), getActiveSubscriberId(),
|
|
||||||
start, end);
|
|
||||||
if (bucket != null) {
|
if (bucket != null) {
|
||||||
return bucket.getRxBytes() + bucket.getTxBytes();
|
return bucket.getRxBytes() + bucket.getTxBytes();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,14 +37,14 @@ public class NetworkCycleChartDataLoader
|
|||||||
|
|
||||||
private NetworkCycleChartDataLoader(Builder builder) {
|
private NetworkCycleChartDataLoader(Builder builder) {
|
||||||
super(builder);
|
super(builder);
|
||||||
mData = new ArrayList<NetworkCycleChartData>();
|
mData = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void recordUsage(long start, long end) {
|
void recordUsage(long start, long end) {
|
||||||
try {
|
try {
|
||||||
final NetworkStats.Bucket bucket = mNetworkStatsManager.querySummaryForDevice(
|
final NetworkStats.Bucket bucket = mNetworkStatsManager.querySummaryForDevice(
|
||||||
mNetworkType, mSubId, start, end);
|
mNetworkTemplate, start, end);
|
||||||
final long total = bucket == null ? 0L : bucket.getRxBytes() + bucket.getTxBytes();
|
final long total = bucket == null ? 0L : bucket.getRxBytes() + bucket.getTxBytes();
|
||||||
if (total > 0L) {
|
if (total > 0L) {
|
||||||
final NetworkCycleChartData.Builder builder = new NetworkCycleChartData.Builder();
|
final NetworkCycleChartData.Builder builder = new NetworkCycleChartData.Builder();
|
||||||
@@ -81,7 +81,7 @@ public class NetworkCycleChartDataLoader
|
|||||||
long usage = 0L;
|
long usage = 0L;
|
||||||
try {
|
try {
|
||||||
final NetworkStats.Bucket bucket = mNetworkStatsManager.querySummaryForDevice(
|
final NetworkStats.Bucket bucket = mNetworkStatsManager.querySummaryForDevice(
|
||||||
mNetworkType, mSubId, bucketStart, bucketEnd);
|
mNetworkTemplate, bucketStart, bucketEnd);
|
||||||
if (bucket != null) {
|
if (bucket != null) {
|
||||||
usage = bucket.getRxBytes() + bucket.getTxBytes();
|
usage = bucket.getRxBytes() + bucket.getTxBytes();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,11 +23,11 @@ import android.app.usage.NetworkStats;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
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 the
|
* Loader for network data usage history. It returns a list of usage data per billing cycle for the
|
||||||
* specific Uid(s).
|
* specific Uid(s).
|
||||||
@@ -44,7 +44,7 @@ public class NetworkCycleDataForUidLoader extends
|
|||||||
super(builder);
|
super(builder);
|
||||||
mUids = builder.mUids;
|
mUids = builder.mUids;
|
||||||
mRetrieveDetail = builder.mRetrieveDetail;
|
mRetrieveDetail = builder.mRetrieveDetail;
|
||||||
mData = new ArrayList<NetworkCycleDataForUid>();
|
mData = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -54,7 +54,7 @@ public class NetworkCycleDataForUidLoader extends
|
|||||||
long totalForeground = 0L;
|
long totalForeground = 0L;
|
||||||
for (int uid : mUids) {
|
for (int uid : mUids) {
|
||||||
final NetworkStats stats = mNetworkStatsManager.queryDetailsForUid(
|
final NetworkStats stats = mNetworkStatsManager.queryDetailsForUid(
|
||||||
mNetworkType, mSubId, start, end, uid);
|
mNetworkTemplate, start, end, uid);
|
||||||
final long usage = getTotalUsage(stats);
|
final long usage = getTotalUsage(stats);
|
||||||
if (usage > 0L) {
|
if (usage > 0L) {
|
||||||
totalUsage += usage;
|
totalUsage += usage;
|
||||||
@@ -100,7 +100,7 @@ public class NetworkCycleDataForUidLoader extends
|
|||||||
|
|
||||||
private long getForegroundUsage(long start, long end, int uid) {
|
private long getForegroundUsage(long start, long end, int uid) {
|
||||||
final NetworkStats stats = mNetworkStatsManager.queryDetailsForUidTagState(
|
final NetworkStats stats = mNetworkStatsManager.queryDetailsForUidTagState(
|
||||||
mNetworkType, mSubId, start, end, uid, TAG_NONE, STATE_FOREGROUND);
|
mNetworkTemplate, start, end, uid, TAG_NONE, STATE_FOREGROUND);
|
||||||
return getTotalUsage(stats);
|
return getTotalUsage(stats);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,18 +49,14 @@ import java.util.Iterator;
|
|||||||
public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
|
public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
|
||||||
private static final String TAG = "NetworkCycleDataLoader";
|
private static final String TAG = "NetworkCycleDataLoader";
|
||||||
protected final NetworkStatsManager mNetworkStatsManager;
|
protected final NetworkStatsManager mNetworkStatsManager;
|
||||||
protected final String mSubId;
|
protected final NetworkTemplate mNetworkTemplate;
|
||||||
protected final int mNetworkType;
|
|
||||||
private final NetworkPolicy mPolicy;
|
private final NetworkPolicy mPolicy;
|
||||||
private final NetworkTemplate mNetworkTemplate;
|
|
||||||
private final ArrayList<Long> mCycles;
|
private final ArrayList<Long> mCycles;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
final INetworkStatsService mNetworkStatsService;
|
final INetworkStatsService mNetworkStatsService;
|
||||||
|
|
||||||
protected NetworkCycleDataLoader(Builder<?> builder) {
|
protected NetworkCycleDataLoader(Builder<?> builder) {
|
||||||
super(builder.mContext);
|
super(builder.mContext);
|
||||||
mSubId = builder.mSubId;
|
|
||||||
mNetworkType = builder.mNetworkType;
|
|
||||||
mNetworkTemplate = builder.mNetworkTemplate;
|
mNetworkTemplate = builder.mNetworkTemplate;
|
||||||
mCycles = builder.mCycles;
|
mCycles = builder.mCycles;
|
||||||
mNetworkStatsManager = (NetworkStatsManager)
|
mNetworkStatsManager = (NetworkStatsManager)
|
||||||
@@ -180,8 +176,6 @@ public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
|
|||||||
|
|
||||||
public static abstract class Builder<T extends NetworkCycleDataLoader> {
|
public static abstract class Builder<T extends NetworkCycleDataLoader> {
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private String mSubId;
|
|
||||||
private int mNetworkType;
|
|
||||||
private NetworkTemplate mNetworkTemplate;
|
private NetworkTemplate mNetworkTemplate;
|
||||||
private ArrayList<Long> mCycles;
|
private ArrayList<Long> mCycles;
|
||||||
|
|
||||||
@@ -189,14 +183,8 @@ public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
|
|||||||
mContext = context;
|
mContext = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder<T> setSubscriberId(String subId) {
|
|
||||||
mSubId = subId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder<T> setNetworkTemplate(NetworkTemplate template) {
|
public Builder<T> setNetworkTemplate(NetworkTemplate template) {
|
||||||
mNetworkTemplate = template;
|
mNetworkTemplate = template;
|
||||||
mNetworkType = DataUsageController.getNetworkType(template);
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,9 +16,10 @@
|
|||||||
|
|
||||||
package com.android.settingslib.net;
|
package com.android.settingslib.net;
|
||||||
|
|
||||||
import android.app.usage.NetworkStatsManager;
|
|
||||||
import android.app.usage.NetworkStats;
|
import android.app.usage.NetworkStats;
|
||||||
|
import android.app.usage.NetworkStatsManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.net.NetworkTemplate;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@@ -33,15 +34,13 @@ public class NetworkStatsSummaryLoader extends AsyncTaskLoader<NetworkStats> {
|
|||||||
private final NetworkStatsManager mNetworkStatsManager;
|
private final NetworkStatsManager mNetworkStatsManager;
|
||||||
private final long mStart;
|
private final long mStart;
|
||||||
private final long mEnd;
|
private final long mEnd;
|
||||||
private final String mSubId;
|
private final NetworkTemplate mNetworkTemplate;
|
||||||
private final int mNetworkType;
|
|
||||||
|
|
||||||
private NetworkStatsSummaryLoader(Builder builder) {
|
private NetworkStatsSummaryLoader(Builder builder) {
|
||||||
super(builder.mContext);
|
super(builder.mContext);
|
||||||
mStart = builder.mStart;
|
mStart = builder.mStart;
|
||||||
mEnd = builder.mEnd;
|
mEnd = builder.mEnd;
|
||||||
mSubId = builder.mSubId;
|
mNetworkTemplate = builder.mNetworkTemplate;
|
||||||
mNetworkType = builder.mNetworkType;
|
|
||||||
mNetworkStatsManager = (NetworkStatsManager)
|
mNetworkStatsManager = (NetworkStatsManager)
|
||||||
builder.mContext.getSystemService(Context.NETWORK_STATS_SERVICE);
|
builder.mContext.getSystemService(Context.NETWORK_STATS_SERVICE);
|
||||||
}
|
}
|
||||||
@@ -55,7 +54,7 @@ public class NetworkStatsSummaryLoader extends AsyncTaskLoader<NetworkStats> {
|
|||||||
@Override
|
@Override
|
||||||
public NetworkStats loadInBackground() {
|
public NetworkStats loadInBackground() {
|
||||||
try {
|
try {
|
||||||
return mNetworkStatsManager.querySummary(mNetworkType, mSubId, mStart, mEnd);
|
return mNetworkStatsManager.querySummary(mNetworkTemplate, mStart, mEnd);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.e(TAG, "Exception querying network detail.", e);
|
Log.e(TAG, "Exception querying network detail.", e);
|
||||||
return null;
|
return null;
|
||||||
@@ -78,8 +77,7 @@ public class NetworkStatsSummaryLoader extends AsyncTaskLoader<NetworkStats> {
|
|||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private long mStart;
|
private long mStart;
|
||||||
private long mEnd;
|
private long mEnd;
|
||||||
private String mSubId;
|
private NetworkTemplate mNetworkTemplate;
|
||||||
private int mNetworkType;
|
|
||||||
|
|
||||||
public Builder(Context context) {
|
public Builder(Context context) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
@@ -95,13 +93,11 @@ public class NetworkStatsSummaryLoader extends AsyncTaskLoader<NetworkStats> {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder setSubscriberId(String subId) {
|
/**
|
||||||
mSubId = subId;
|
* Set {@link NetworkTemplate} for builder
|
||||||
return this;
|
*/
|
||||||
}
|
public Builder setNetworkTemplate(NetworkTemplate template) {
|
||||||
|
mNetworkTemplate = template;
|
||||||
public Builder setNetworkType(int networkType) {
|
|
||||||
mNetworkType = networkType;
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ import static org.mockito.Mockito.when;
|
|||||||
import android.app.usage.NetworkStats;
|
import android.app.usage.NetworkStats;
|
||||||
import android.app.usage.NetworkStatsManager;
|
import android.app.usage.NetworkStatsManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.ConnectivityManager;
|
|
||||||
import android.net.INetworkStatsSession;
|
import android.net.INetworkStatsSession;
|
||||||
import android.net.NetworkStatsHistory;
|
import android.net.NetworkStatsHistory;
|
||||||
import android.net.NetworkTemplate;
|
import android.net.NetworkTemplate;
|
||||||
@@ -52,6 +51,7 @@ import org.robolectric.shadows.ShadowSubscriptionManager;
|
|||||||
public class DataUsageControllerTest {
|
public class DataUsageControllerTest {
|
||||||
|
|
||||||
private static final String SUB_ID = "Test Subscriber";
|
private static final String SUB_ID = "Test Subscriber";
|
||||||
|
private static final String SUB_ID_2 = "Test Subscriber 2";
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private INetworkStatsSession mSession;
|
private INetworkStatsSession mSession;
|
||||||
@@ -63,6 +63,9 @@ public class DataUsageControllerTest {
|
|||||||
private NetworkStatsManager mNetworkStatsManager;
|
private NetworkStatsManager mNetworkStatsManager;
|
||||||
@Mock
|
@Mock
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
private NetworkTemplate mNetworkTemplate;
|
||||||
|
private NetworkTemplate mNetworkTemplate2;
|
||||||
|
private NetworkTemplate mWifiNetworkTemplate;
|
||||||
|
|
||||||
private DataUsageController mController;
|
private DataUsageController mController;
|
||||||
private NetworkStatsHistory mNetworkStatsHistory;
|
private NetworkStatsHistory mNetworkStatsHistory;
|
||||||
@@ -83,23 +86,26 @@ public class DataUsageControllerTest {
|
|||||||
.when(mSession).getHistoryForNetwork(any(NetworkTemplate.class), anyInt());
|
.when(mSession).getHistoryForNetwork(any(NetworkTemplate.class), anyInt());
|
||||||
ShadowSubscriptionManager.setDefaultDataSubscriptionId(mDefaultSubscriptionId);
|
ShadowSubscriptionManager.setDefaultDataSubscriptionId(mDefaultSubscriptionId);
|
||||||
doReturn(SUB_ID).when(mTelephonyManager).getSubscriberId();
|
doReturn(SUB_ID).when(mTelephonyManager).getSubscriberId();
|
||||||
|
|
||||||
|
mNetworkTemplate = NetworkTemplate.buildTemplateMobileAll(SUB_ID);
|
||||||
|
mNetworkTemplate2 = NetworkTemplate.buildTemplateMobileAll(SUB_ID_2);
|
||||||
|
mWifiNetworkTemplate = NetworkTemplate.buildTemplateWifiWildcard();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getHistoricalUsageLevel_shouldQuerySummaryForDevice() throws Exception {
|
public void getHistoricalUsageLevel_shouldQuerySummaryForDevice() throws Exception {
|
||||||
|
mController.getHistoricalUsageLevel(mWifiNetworkTemplate);
|
||||||
|
|
||||||
mController.getHistoricalUsageLevel(NetworkTemplate.buildTemplateWifiWildcard());
|
verify(mNetworkStatsManager).querySummaryForDevice(eq(mWifiNetworkTemplate),
|
||||||
|
eq(0L) /* startTime */, anyLong() /* endTime */);
|
||||||
verify(mNetworkStatsManager).querySummaryForDevice(eq(ConnectivityManager.TYPE_WIFI),
|
|
||||||
eq(SUB_ID), eq(0L) /* startTime */, anyLong() /* endTime */);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getHistoricalUsageLevel_noUsageData_shouldReturn0() throws Exception {
|
public void getHistoricalUsageLevel_noUsageData_shouldReturn0() throws Exception {
|
||||||
when(mNetworkStatsManager.querySummaryForDevice(eq(ConnectivityManager.TYPE_WIFI),
|
when(mNetworkStatsManager.querySummaryForDevice(eq(mWifiNetworkTemplate),
|
||||||
eq(SUB_ID), eq(0L) /* startTime */, anyLong() /* endTime */))
|
eq(0L) /* startTime */, anyLong() /* endTime */))
|
||||||
.thenReturn(mock(NetworkStats.Bucket.class));
|
.thenReturn(mock(NetworkStats.Bucket.class));
|
||||||
assertThat(mController.getHistoricalUsageLevel(NetworkTemplate.buildTemplateWifiWildcard()))
|
assertThat(mController.getHistoricalUsageLevel(mWifiNetworkTemplate))
|
||||||
.isEqualTo(0L);
|
.isEqualTo(0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,10 +116,10 @@ public class DataUsageControllerTest {
|
|||||||
final NetworkStats.Bucket bucket = mock(NetworkStats.Bucket.class);
|
final NetworkStats.Bucket bucket = mock(NetworkStats.Bucket.class);
|
||||||
when(bucket.getRxBytes()).thenReturn(receivedBytes);
|
when(bucket.getRxBytes()).thenReturn(receivedBytes);
|
||||||
when(bucket.getTxBytes()).thenReturn(transmittedBytes);
|
when(bucket.getTxBytes()).thenReturn(transmittedBytes);
|
||||||
when(mNetworkStatsManager.querySummaryForDevice(eq(ConnectivityManager.TYPE_WIFI),
|
when(mNetworkStatsManager.querySummaryForDevice(eq(mWifiNetworkTemplate),
|
||||||
eq(SUB_ID), eq(0L) /* startTime */, anyLong() /* endTime */)).thenReturn(bucket);
|
eq(0L) /* startTime */, anyLong() /* endTime */)).thenReturn(bucket);
|
||||||
|
|
||||||
assertThat(mController.getHistoricalUsageLevel(NetworkTemplate.buildTemplateWifiWildcard()))
|
assertThat(mController.getHistoricalUsageLevel(mWifiNetworkTemplate))
|
||||||
.isEqualTo(receivedBytes + transmittedBytes);
|
.isEqualTo(receivedBytes + transmittedBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,9 +132,8 @@ public class DataUsageControllerTest {
|
|||||||
final NetworkStats.Bucket defaultSubscriberBucket = mock(NetworkStats.Bucket.class);
|
final NetworkStats.Bucket defaultSubscriberBucket = mock(NetworkStats.Bucket.class);
|
||||||
when(defaultSubscriberBucket.getRxBytes()).thenReturn(defaultSubRx);
|
when(defaultSubscriberBucket.getRxBytes()).thenReturn(defaultSubRx);
|
||||||
when(defaultSubscriberBucket.getTxBytes()).thenReturn(defaultSubTx);
|
when(defaultSubscriberBucket.getTxBytes()).thenReturn(defaultSubTx);
|
||||||
when(mNetworkStatsManager.querySummaryForDevice(eq(ConnectivityManager.TYPE_MOBILE),
|
when(mNetworkStatsManager.querySummaryForDevice(eq(mNetworkTemplate), eq(0L)/* startTime */,
|
||||||
eq(SUB_ID), eq(0L)/* startTime */, anyLong() /* endTime */)).thenReturn(
|
anyLong() /* endTime */)).thenReturn(defaultSubscriberBucket);
|
||||||
defaultSubscriberBucket);
|
|
||||||
|
|
||||||
// Now setup a stats bucket for a different, non-default subscription / subscriber ID.
|
// Now setup a stats bucket for a different, non-default subscription / subscriber ID.
|
||||||
final long nonDefaultSubRx = 7654321L;
|
final long nonDefaultSubRx = 7654321L;
|
||||||
@@ -137,25 +142,21 @@ public class DataUsageControllerTest {
|
|||||||
when(nonDefaultSubscriberBucket.getRxBytes()).thenReturn(nonDefaultSubRx);
|
when(nonDefaultSubscriberBucket.getRxBytes()).thenReturn(nonDefaultSubRx);
|
||||||
when(nonDefaultSubscriberBucket.getTxBytes()).thenReturn(nonDefaultSubTx);
|
when(nonDefaultSubscriberBucket.getTxBytes()).thenReturn(nonDefaultSubTx);
|
||||||
final int explicitSubscriptionId = 55;
|
final int explicitSubscriptionId = 55;
|
||||||
final String subscriberId2 = "Test Subscriber 2";
|
when(mNetworkStatsManager.querySummaryForDevice(eq(mNetworkTemplate2),
|
||||||
when(mNetworkStatsManager.querySummaryForDevice(eq(ConnectivityManager.TYPE_MOBILE),
|
eq(0L)/* startTime */, anyLong() /* endTime */)).thenReturn(
|
||||||
eq(subscriberId2), eq(0L)/* startTime */, anyLong() /* endTime */)).thenReturn(
|
|
||||||
nonDefaultSubscriberBucket);
|
nonDefaultSubscriberBucket);
|
||||||
doReturn(subscriberId2).when(mTelephonyManager).getSubscriberId();
|
doReturn(SUB_ID_2).when(mTelephonyManager).getSubscriberId();
|
||||||
|
|
||||||
// Now verify that when we're asking for stats on the non-default subscription, we get
|
// Now verify that when we're asking for stats on the non-default subscription, we get
|
||||||
// the data back for that subscription and *not* the default one.
|
// the data back for that subscription and *not* the default one.
|
||||||
mController.setSubscriptionId(explicitSubscriptionId);
|
mController.setSubscriptionId(explicitSubscriptionId);
|
||||||
|
|
||||||
assertThat(mController.getHistoricalUsageLevel(
|
assertThat(mController.getHistoricalUsageLevel(mNetworkTemplate2)).isEqualTo(
|
||||||
NetworkTemplate.buildTemplateMobileAll(subscriberId2))).isEqualTo(
|
|
||||||
nonDefaultSubRx + nonDefaultSubTx);
|
nonDefaultSubRx + nonDefaultSubTx);
|
||||||
|
|
||||||
verify(mTelephonyManager).createForSubscriptionId(explicitSubscriptionId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getTelephonyManager_shouldCreateWithExplicitSubId() throws Exception {
|
public void getTelephonyManager_shouldCreateWithExplicitSubId() {
|
||||||
int explicitSubId = 1;
|
int explicitSubId = 1;
|
||||||
TelephonyManager tmForSub1 = new TelephonyManager(mContext, explicitSubId);
|
TelephonyManager tmForSub1 = new TelephonyManager(mContext, explicitSubId);
|
||||||
when(mTelephonyManager.createForSubscriptionId(eq(explicitSubId))).thenReturn(tmForSub1);
|
when(mTelephonyManager.createForSubscriptionId(eq(explicitSubId))).thenReturn(tmForSub1);
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ import static org.mockito.Mockito.when;
|
|||||||
|
|
||||||
import android.app.usage.NetworkStatsManager;
|
import android.app.usage.NetworkStatsManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.ConnectivityManager;
|
|
||||||
import android.net.NetworkPolicy;
|
import android.net.NetworkPolicy;
|
||||||
import android.net.NetworkPolicyManager;
|
import android.net.NetworkPolicyManager;
|
||||||
|
import android.net.NetworkTemplate;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
|
|
||||||
@@ -43,6 +43,8 @@ public class NetworkCycleChartDataLoaderTest {
|
|||||||
private NetworkPolicyManager mNetworkPolicyManager;
|
private NetworkPolicyManager mNetworkPolicyManager;
|
||||||
@Mock
|
@Mock
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
@Mock
|
||||||
|
private NetworkTemplate mNetworkTemplate;
|
||||||
|
|
||||||
private NetworkCycleChartDataLoader mLoader;
|
private NetworkCycleChartDataLoader mLoader;
|
||||||
|
|
||||||
@@ -60,13 +62,12 @@ public class NetworkCycleChartDataLoaderTest {
|
|||||||
public void recordUsage_shouldQueryNetworkSummaryForDevice() throws RemoteException {
|
public void recordUsage_shouldQueryNetworkSummaryForDevice() throws RemoteException {
|
||||||
final long end = System.currentTimeMillis();
|
final long end = System.currentTimeMillis();
|
||||||
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
|
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
|
||||||
final int networkType = ConnectivityManager.TYPE_MOBILE;
|
|
||||||
final String subId = "TestSubscriber";
|
|
||||||
mLoader = NetworkCycleChartDataLoader.builder(mContext)
|
mLoader = NetworkCycleChartDataLoader.builder(mContext)
|
||||||
.setSubscriberId(subId).build();
|
.setNetworkTemplate(mNetworkTemplate)
|
||||||
|
.build();
|
||||||
|
|
||||||
mLoader.recordUsage(start, end);
|
mLoader.recordUsage(start, end);
|
||||||
|
|
||||||
verify(mNetworkStatsManager).querySummaryForDevice(networkType, subId, start, end);
|
verify(mNetworkStatsManager).querySummaryForDevice(mNetworkTemplate, start, end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,9 +28,9 @@ import static org.mockito.Mockito.when;
|
|||||||
|
|
||||||
import android.app.usage.NetworkStatsManager;
|
import android.app.usage.NetworkStatsManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.ConnectivityManager;
|
|
||||||
import android.net.NetworkPolicy;
|
import android.net.NetworkPolicy;
|
||||||
import android.net.NetworkPolicyManager;
|
import android.net.NetworkPolicyManager;
|
||||||
|
import android.net.NetworkTemplate;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -42,6 +42,7 @@ import org.robolectric.RobolectricTestRunner;
|
|||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class NetworkCycleDataForUidLoaderTest {
|
public class NetworkCycleDataForUidLoaderTest {
|
||||||
|
private static final String SUB_ID = "Test Subscriber";
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private NetworkStatsManager mNetworkStatsManager;
|
private NetworkStatsManager mNetworkStatsManager;
|
||||||
@@ -49,6 +50,7 @@ public class NetworkCycleDataForUidLoaderTest {
|
|||||||
private NetworkPolicyManager mNetworkPolicyManager;
|
private NetworkPolicyManager mNetworkPolicyManager;
|
||||||
@Mock
|
@Mock
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
private NetworkTemplate mNetworkTemplate;
|
||||||
|
|
||||||
private NetworkCycleDataForUidLoader mLoader;
|
private NetworkCycleDataForUidLoader mLoader;
|
||||||
|
|
||||||
@@ -60,60 +62,58 @@ public class NetworkCycleDataForUidLoaderTest {
|
|||||||
when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE))
|
when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE))
|
||||||
.thenReturn(mNetworkPolicyManager);
|
.thenReturn(mNetworkPolicyManager);
|
||||||
when(mNetworkPolicyManager.getNetworkPolicies()).thenReturn(new NetworkPolicy[0]);
|
when(mNetworkPolicyManager.getNetworkPolicies()).thenReturn(new NetworkPolicy[0]);
|
||||||
|
mNetworkTemplate = NetworkTemplate.buildTemplateMobileAll(SUB_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void recordUsage_shouldQueryNetworkDetailsForUidAndForegroundState() {
|
public void recordUsage_shouldQueryNetworkDetailsForUidAndForegroundState() {
|
||||||
final long end = System.currentTimeMillis();
|
final long end = System.currentTimeMillis();
|
||||||
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
|
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
|
||||||
final int networkType = ConnectivityManager.TYPE_MOBILE;
|
|
||||||
final String subId = "TestSubscriber";
|
|
||||||
final int uid = 1;
|
final int uid = 1;
|
||||||
mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
|
mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
|
||||||
.addUid(uid).setSubscriberId(subId).build());
|
.addUid(uid)
|
||||||
|
.setNetworkTemplate(mNetworkTemplate)
|
||||||
|
.build());
|
||||||
doReturn(1024L).when(mLoader).getTotalUsage(any());
|
doReturn(1024L).when(mLoader).getTotalUsage(any());
|
||||||
|
|
||||||
mLoader.recordUsage(start, end);
|
mLoader.recordUsage(start, end);
|
||||||
|
|
||||||
verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, uid);
|
verify(mNetworkStatsManager).queryDetailsForUid(mNetworkTemplate, start, end, uid);
|
||||||
verify(mNetworkStatsManager).queryDetailsForUidTagState(
|
verify(mNetworkStatsManager).queryDetailsForUidTagState(
|
||||||
networkType, subId, start, end, uid, TAG_NONE, STATE_FOREGROUND);
|
mNetworkTemplate, start, end, uid, TAG_NONE, STATE_FOREGROUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void recordUsage_retrieveDetailIsFalse_shouldNotQueryNetworkForegroundState() {
|
public void recordUsage_retrieveDetailIsFalse_shouldNotQueryNetworkForegroundState() {
|
||||||
final long end = System.currentTimeMillis();
|
final long end = System.currentTimeMillis();
|
||||||
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
|
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
|
||||||
final int networkType = ConnectivityManager.TYPE_MOBILE;
|
|
||||||
final String subId = "TestSubscriber";
|
|
||||||
final int uid = 1;
|
final int uid = 1;
|
||||||
mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
|
mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
|
||||||
.setRetrieveDetail(false).addUid(uid).setSubscriberId(subId).build());
|
.setRetrieveDetail(false).addUid(uid).build());
|
||||||
doReturn(1024L).when(mLoader).getTotalUsage(any());
|
doReturn(1024L).when(mLoader).getTotalUsage(any());
|
||||||
|
|
||||||
mLoader.recordUsage(start, end);
|
mLoader.recordUsage(start, end);
|
||||||
verify(mNetworkStatsManager, never()).queryDetailsForUidTagState(
|
verify(mNetworkStatsManager, never()).queryDetailsForUidTagState(
|
||||||
networkType, subId, start, end, uid, TAG_NONE, STATE_FOREGROUND);
|
mNetworkTemplate, start, end, uid, TAG_NONE, STATE_FOREGROUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void recordUsage_multipleUids_shouldQueryNetworkDetailsForEachUid() {
|
public void recordUsage_multipleUids_shouldQueryNetworkDetailsForEachUid() {
|
||||||
final long end = System.currentTimeMillis();
|
final long end = System.currentTimeMillis();
|
||||||
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
|
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
|
||||||
final int networkType = ConnectivityManager.TYPE_MOBILE;
|
|
||||||
final String subId = "TestSubscriber";
|
|
||||||
mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
|
mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
|
||||||
.addUid(1)
|
.addUid(1)
|
||||||
.addUid(2)
|
.addUid(2)
|
||||||
.addUid(3)
|
.addUid(3)
|
||||||
.setSubscriberId(subId).build());
|
.setNetworkTemplate(mNetworkTemplate)
|
||||||
|
.build());
|
||||||
doReturn(1024L).when(mLoader).getTotalUsage(any());
|
doReturn(1024L).when(mLoader).getTotalUsage(any());
|
||||||
|
|
||||||
mLoader.recordUsage(start, end);
|
mLoader.recordUsage(start, end);
|
||||||
|
|
||||||
verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 1);
|
verify(mNetworkStatsManager).queryDetailsForUid(mNetworkTemplate, start, end, 1);
|
||||||
verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 2);
|
verify(mNetworkStatsManager).queryDetailsForUid(mNetworkTemplate, start, end, 2);
|
||||||
verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 3);
|
verify(mNetworkStatsManager).queryDetailsForUid(mNetworkTemplate, start, end, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,8 +126,6 @@ public class NetworkCycleDataLoaderTest {
|
|||||||
when(mIterator.next()).thenReturn(cycle);
|
when(mIterator.next()).thenReturn(cycle);
|
||||||
mLoader = spy(new NetworkCycleDataTestLoader(mContext));
|
mLoader = spy(new NetworkCycleDataTestLoader(mContext));
|
||||||
ReflectionHelpers.setField(mLoader, "mPolicy", mPolicy);
|
ReflectionHelpers.setField(mLoader, "mPolicy", mPolicy);
|
||||||
ReflectionHelpers.setField(mLoader, "mNetworkType", networkType);
|
|
||||||
ReflectionHelpers.setField(mLoader, "mSubId", subId);
|
|
||||||
|
|
||||||
mLoader.loadPolicyData();
|
mLoader.loadPolicyData();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user