Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit de5dbf1a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Get ethernet data usage from NetworkStatsManager."

parents 220b11b0 ab9c9e4d
Loading
Loading
Loading
Loading
+40 −15
Original line number Diff line number Diff line
@@ -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;
        }
    }

    /**
+23 −0
Original line number Diff line number Diff line
@@ -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 */);
    }
}