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

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

Merge "Add a flag to specify whether to read detail data or not."

parents dd5e73e5 2a26eba4
Loading
Loading
Loading
Loading
+14 −4
Original line number Original line Diff line number Diff line
@@ -36,10 +36,12 @@ public class NetworkCycleDataForUidLoader extends


    private final List<NetworkCycleDataForUid> mData;
    private final List<NetworkCycleDataForUid> mData;
    private final int mUid;
    private final int mUid;
    private final boolean mRetrieveDetail;


    private NetworkCycleDataForUidLoader(Builder builder) {
    private NetworkCycleDataForUidLoader(Builder builder) {
        super(builder);
        super(builder);
        mUid = builder.mUid;
        mUid = builder.mUid;
        mRetrieveDetail = builder.mRetrieveDetail;
        mData = new ArrayList<NetworkCycleDataForUid>();
        mData = new ArrayList<NetworkCycleDataForUid>();
    }
    }


@@ -50,13 +52,15 @@ public class NetworkCycleDataForUidLoader extends
                mNetworkType, mSubId, start, end, mUid);
                mNetworkType, mSubId, start, end, mUid);
            final long total = getTotalUsage(stats);
            final long total = getTotalUsage(stats);
            if (total > 0L) {
            if (total > 0L) {
                final long foreground = getForegroundUsage(start, end);
                final NetworkCycleDataForUid.Builder builder = new NetworkCycleDataForUid.Builder();
                final NetworkCycleDataForUid.Builder builder = new NetworkCycleDataForUid.Builder();
                builder.setBackgroundUsage(total - foreground)
                builder.setStartTime(start)
                    .setForegroundUsage(foreground)
                    .setStartTime(start)
                    .setEndTime(end)
                    .setEndTime(end)
                    .setTotalUsage(total);
                    .setTotalUsage(total);
                if (mRetrieveDetail) {
                    final long foreground = getForegroundUsage(start, end);
                    builder.setBackgroundUsage(total - foreground)
                        .setForegroundUsage(foreground);
                }
                mData.add(builder.build());
                mData.add(builder.build());
            }
            }
        } catch (Exception e) {
        } catch (Exception e) {
@@ -88,6 +92,7 @@ public class NetworkCycleDataForUidLoader extends
            extends NetworkCycleDataLoader.Builder<T> {
            extends NetworkCycleDataLoader.Builder<T> {


        private int mUid;
        private int mUid;
        private boolean mRetrieveDetail = true;


        public Builder(Context context) {
        public Builder(Context context) {
            super(context);
            super(context);
@@ -97,6 +102,11 @@ public class NetworkCycleDataForUidLoader extends
            mUid = uid;
            mUid = uid;
            return this;
            return this;
        }
        }

        public Builder<T> setRetrieveDetail(boolean retrieveDetail) {
            mRetrieveDetail = retrieveDetail;
            return this;
        }
    }
    }


}
}
+30 −13
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@ import static android.net.NetworkStatsHistory.FIELD_TX_BYTES;
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.INetworkStatsService;
import android.net.INetworkStatsService;
import android.net.INetworkStatsSession;
import android.net.INetworkStatsSession;
import android.net.NetworkPolicy;
import android.net.NetworkPolicy;
@@ -34,6 +35,8 @@ import android.os.ServiceManager;
import android.text.format.DateUtils;
import android.text.format.DateUtils;
import android.util.Pair;
import android.util.Pair;


import com.android.settingslib.NetworkPolicyEditor;

import java.time.ZonedDateTime;
import java.time.ZonedDateTime;
import java.util.Iterator;
import java.util.Iterator;


@@ -55,7 +58,6 @@ public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {


    protected NetworkCycleDataLoader(Builder<?> builder) {
    protected NetworkCycleDataLoader(Builder<?> builder) {
        super(builder.mContext);
        super(builder.mContext);
        mPolicy = builder.mPolicy;
        mSubId = builder.mSubId;
        mSubId = builder.mSubId;
        mNetworkType = builder.mNetworkType;
        mNetworkType = builder.mNetworkType;
        mNetworkTemplate = builder.mNetworkTemplate;
        mNetworkTemplate = builder.mNetworkTemplate;
@@ -63,6 +65,10 @@ public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
            builder.mContext.getSystemService(Context.NETWORK_STATS_SERVICE);
            builder.mContext.getSystemService(Context.NETWORK_STATS_SERVICE);
        mNetworkStatsService = INetworkStatsService.Stub.asInterface(
        mNetworkStatsService = INetworkStatsService.Stub.asInterface(
            ServiceManager.getService(Context.NETWORK_STATS_SERVICE));
            ServiceManager.getService(Context.NETWORK_STATS_SERVICE));
        final NetworkPolicyEditor policyEditor =
            new NetworkPolicyEditor(NetworkPolicyManager.from(builder.mContext));
        policyEditor.read();
        mPolicy = policyEditor.getPolicy(mNetworkTemplate);
    }
    }


    @Override
    @Override
@@ -115,7 +121,8 @@ public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {


            long cycleEnd = historyEnd;
            long cycleEnd = historyEnd;
            while (cycleEnd > historyStart) {
            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);
                recordUsage(cycleStart, cycleEnd);
                cycleEnd = cycleStart;
                cycleEnd = cycleStart;
            }
            }
@@ -154,7 +161,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 NetworkPolicy mPolicy;
        private String mSubId;
        private String mSubId;
        private int mNetworkType;
        private int mNetworkType;
        private NetworkTemplate mNetworkTemplate;
        private NetworkTemplate mNetworkTemplate;
@@ -163,27 +169,38 @@ public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
            mContext = context;
            mContext = context;
        }
        }


        public Builder<T> setNetworkPolicy(NetworkPolicy policy) {
            mPolicy = policy;
            return this;
        }

        public Builder<T> setSubscriberId(String subId) {
        public Builder<T> setSubscriberId(String subId) {
            mSubId = subId;
            mSubId = subId;
            return this;
            return this;
        }
        }


        public Builder<T> setNetworkType(int networkType) {
            mNetworkType = networkType;
            return this;
        }

        public Builder<T> setNetworkTemplate(NetworkTemplate template) {
        public Builder<T> setNetworkTemplate(NetworkTemplate template) {
            mNetworkTemplate = template;
            mNetworkTemplate = template;
            setNetworkType();
            return this;
            return this;
        }
        }


        public abstract T build();
        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;
                }
            }
        }
    }
    }


}
}
+8 −1
Original line number Original line Diff line number Diff line
@@ -22,6 +22,8 @@ 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.ConnectivityManager;
import android.net.NetworkPolicy;
import android.net.NetworkPolicyManager;
import android.os.RemoteException;
import android.os.RemoteException;
import android.text.format.DateUtils;
import android.text.format.DateUtils;


@@ -39,6 +41,8 @@ public class NetworkCycleChartDataLoaderTest {
    @Mock
    @Mock
    private NetworkStatsManager mNetworkStatsManager;
    private NetworkStatsManager mNetworkStatsManager;
    @Mock
    @Mock
    private NetworkPolicyManager mNetworkPolicyManager;
    @Mock
    private Context mContext;
    private Context mContext;


    private NetworkCycleChartDataLoader mLoader;
    private NetworkCycleChartDataLoader mLoader;
@@ -48,6 +52,9 @@ public class NetworkCycleChartDataLoaderTest {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
        when(mContext.getSystemService(Context.NETWORK_STATS_SERVICE))
        when(mContext.getSystemService(Context.NETWORK_STATS_SERVICE))
            .thenReturn(mNetworkStatsManager);
            .thenReturn(mNetworkStatsManager);
        when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE))
            .thenReturn(mNetworkPolicyManager);
        when(mNetworkPolicyManager.getNetworkPolicies()).thenReturn(new NetworkPolicy[0]);
    }
    }


    @Test
    @Test
@@ -57,7 +64,7 @@ public class NetworkCycleChartDataLoaderTest {
        final int networkType = ConnectivityManager.TYPE_MOBILE;
        final int networkType = ConnectivityManager.TYPE_MOBILE;
        final String subId = "TestSubscriber";
        final String subId = "TestSubscriber";
        mLoader = NetworkCycleChartDataLoader.builder(mContext)
        mLoader = NetworkCycleChartDataLoader.builder(mContext)
            .setNetworkType(networkType).setSubscriberId(subId).build();
            .setSubscriberId(subId).build();


        mLoader.recordUsage(start, end);
        mLoader.recordUsage(start, end);


+36 −3
Original line number Original line Diff line number Diff line
@@ -16,12 +16,21 @@


package com.android.settingslib.net;
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.verify;
import static org.mockito.Mockito.when;
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.ConnectivityManager;
import android.net.NetworkPolicy;
import android.net.NetworkPolicyManager;
import android.text.format.DateUtils;
import android.text.format.DateUtils;


import com.android.settingslib.SettingsLibRobolectricTestRunner;
import com.android.settingslib.SettingsLibRobolectricTestRunner;
@@ -38,6 +47,8 @@ public class NetworkCycleDataForUidLoaderTest {
    @Mock
    @Mock
    private NetworkStatsManager mNetworkStatsManager;
    private NetworkStatsManager mNetworkStatsManager;
    @Mock
    @Mock
    private NetworkPolicyManager mNetworkPolicyManager;
    @Mock
    private Context mContext;
    private Context mContext;


    private NetworkCycleDataForUidLoader mLoader;
    private NetworkCycleDataForUidLoader mLoader;
@@ -47,20 +58,42 @@ public class NetworkCycleDataForUidLoaderTest {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
        when(mContext.getSystemService(Context.NETWORK_STATS_SERVICE))
        when(mContext.getSystemService(Context.NETWORK_STATS_SERVICE))
            .thenReturn(mNetworkStatsManager);
            .thenReturn(mNetworkStatsManager);
        when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE))
            .thenReturn(mNetworkPolicyManager);
        when(mNetworkPolicyManager.getNetworkPolicies()).thenReturn(new NetworkPolicy[0]);
    }
    }


    @Test
    @Test
    public void recordUsage_shouldQueryNetworkDetailsForUid() {
    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 int networkType = ConnectivityManager.TYPE_MOBILE;
        final String subId = "TestSubscriber";
        final String subId = "TestSubscriber";
        final int uid = 1;
        final int uid = 1;
        mLoader = NetworkCycleDataForUidLoader.builder(mContext)
        mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
            .setUid(uid).setNetworkType(networkType).setSubscriberId(subId).build();
            .setUid(uid).setSubscriberId(subId).build());
        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(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);
    }
    }
}
}
+6 −3
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import android.net.ConnectivityManager;
import android.net.INetworkStatsService;
import android.net.INetworkStatsService;
import android.net.INetworkStatsSession;
import android.net.INetworkStatsSession;
import android.net.NetworkPolicy;
import android.net.NetworkPolicy;
import android.net.NetworkPolicyManager;
import android.net.NetworkStatsHistory;
import android.net.NetworkStatsHistory;
import android.net.NetworkTemplate;
import android.net.NetworkTemplate;
import android.os.RemoteException;
import android.os.RemoteException;
@@ -55,6 +56,8 @@ public class NetworkCycleDataLoaderTest {
    @Mock
    @Mock
    private NetworkStatsManager mNetworkStatsManager;
    private NetworkStatsManager mNetworkStatsManager;
    @Mock
    @Mock
    private NetworkPolicyManager mNetworkPolicyManager;
    @Mock
    private Context mContext;
    private Context mContext;
    @Mock
    @Mock
    private NetworkPolicy mPolicy;
    private NetworkPolicy mPolicy;
@@ -62,9 +65,6 @@ public class NetworkCycleDataLoaderTest {
    private Iterator<Range<ZonedDateTime>> mIterator;
    private Iterator<Range<ZonedDateTime>> mIterator;
    @Mock
    @Mock
    private INetworkStatsService mNetworkStatsService;
    private INetworkStatsService mNetworkStatsService;
    @Mock
    private NetworkCycleDataLoader.Builder mBuilder;



    private NetworkCycleDataTestLoader mLoader;
    private NetworkCycleDataTestLoader mLoader;


@@ -73,7 +73,10 @@ public class NetworkCycleDataLoaderTest {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
        when(mContext.getSystemService(Context.NETWORK_STATS_SERVICE))
        when(mContext.getSystemService(Context.NETWORK_STATS_SERVICE))
            .thenReturn(mNetworkStatsManager);
            .thenReturn(mNetworkStatsManager);
        when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE))
            .thenReturn(mNetworkPolicyManager);
        when(mPolicy.cycleIterator()).thenReturn(mIterator);
        when(mPolicy.cycleIterator()).thenReturn(mIterator);
        when(mNetworkPolicyManager.getNetworkPolicies()).thenReturn(new NetworkPolicy[0]);
    }
    }


    @Test
    @Test