Get ethernet data usage from NetworkStatsManager.

- change to use NetworkStatsManager.querySummaryForUser() to check for
ethernet usage data instead of getting it from INetworkStatsSession.

Bug: 111751694
Test: make RunSettingsRoboTests
Change-Id: I60364b4a5f7879906beba194c50955154d56803a
This commit is contained in:
Doris Ling
2018-10-03 17:17:52 -07:00
parent 3c5850ee62
commit ab9c9e4df9
2 changed files with 68 additions and 20 deletions

View File

@@ -18,6 +18,8 @@ import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.net.ConnectivityManager.TYPE_WIFI;
import static android.telephony.TelephonyManager.SIM_STATE_READY;
import android.app.usage.NetworkStats.Bucket;
import android.app.usage.NetworkStatsManager;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.INetworkStatsService;
@@ -33,8 +35,11 @@ import android.telephony.TelephonyManager;
import android.text.BidiFormatter;
import android.text.format.Formatter;
import android.text.format.Formatter.BytesResult;
import android.util.FeatureFlagUtils;
import android.util.Log;
import com.android.settings.core.FeatureFlags;
import java.util.List;
/**
@@ -69,8 +74,27 @@ public final class DataUsageUtils {
}
final ConnectivityManager conn = ConnectivityManager.from(context);
final boolean hasEthernet = conn.isNetworkSupported(ConnectivityManager.TYPE_ETHERNET);
if (!conn.isNetworkSupported(ConnectivityManager.TYPE_ETHERNET)) {
return false;
}
if (FeatureFlagUtils.isEnabled(context, FeatureFlags.DATA_USAGE_V2)) {
final TelephonyManager telephonyManager = TelephonyManager.from(context);;
final NetworkStatsManager networkStatsManager =
context.getSystemService(NetworkStatsManager.class);
boolean hasEthernetUsage = false;
try {
final Bucket bucket = networkStatsManager.querySummaryForUser(
ConnectivityManager.TYPE_ETHERNET, telephonyManager.getSubscriberId(),
0L /* startTime */, System.currentTimeMillis() /* endTime */);
if (bucket != null) {
hasEthernetUsage = bucket.getRxBytes() > 0 || bucket.getTxBytes() > 0;
}
} catch (RemoteException e) {
Log.e(TAG, "Exception querying network detail.", e);
}
return hasEthernetUsage;
} else {
final long ethernetBytes;
try {
INetworkStatsService statsService = INetworkStatsService.Stub.asInterface(
@@ -90,7 +114,8 @@ public final class DataUsageUtils {
}
// only show ethernet when both hardware present and traffic has occurred
return hasEthernet && ethernetBytes > 0;
return ethernetBytes > 0;
}
}
/**

View File

@@ -19,13 +19,19 @@ package com.android.settings.datausage;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.eq;
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.telephony.TelephonyManager;
import android.util.DataUnit;
import android.util.FeatureFlagUtils;
import com.android.settings.core.FeatureFlags;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
@@ -42,6 +48,9 @@ public final class DataUsageUtilsTest {
private ConnectivityManager mManager;
@Mock
private TelephonyManager mTelephonyManager;
@Mock
private NetworkStatsManager mNetworkStatsManager;
private Context mContext;
@Before
@@ -51,6 +60,7 @@ public final class DataUsageUtilsTest {
mContext = shadowContext.getApplicationContext();
shadowContext.setSystemService(Context.CONNECTIVITY_SERVICE, mManager);
shadowContext.setSystemService(Context.TELEPHONY_SERVICE, mTelephonyManager);
shadowContext.setSystemService(Context.NETWORK_STATS_SERVICE, mNetworkStatsManager);
}
@Test
@@ -88,4 +98,17 @@ public final class DataUsageUtilsTest {
assertThat(formattedDataUsage).isEqualTo("1.00 GB");
}
@Test
public void hasEthernet_shouldQueryEthernetSummaryForUser() throws Exception {
FeatureFlagUtils.setEnabled(mContext, FeatureFlags.DATA_USAGE_V2, true);
when(mManager.isNetworkSupported(anyInt())).thenReturn(true);
final String subscriber = "TestSub";
when(mTelephonyManager.getSubscriberId()).thenReturn(subscriber);
DataUsageUtils.hasEthernet(mContext);
verify(mNetworkStatsManager).querySummaryForUser(eq(ConnectivityManager.TYPE_ETHERNET),
eq(subscriber), anyLong() /* startTime */, anyLong() /* endTime */);
}
}