Move to INetworkStatsSession with lifecycle.

Explicitly communicate lifecycle, enabling system_server to cache
stats when actively being used.

Bug: 6236498
Change-Id: Ieecc4b1d4fd46aeb5207c4ba9b450e04e9438d00
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index 656288a..d127204 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -69,11 +69,13 @@
 import android.net.ConnectivityManager;
 import android.net.INetworkPolicyManager;
 import android.net.INetworkStatsService;
+import android.net.INetworkStatsSession;
 import android.net.NetworkPolicy;
 import android.net.NetworkPolicyManager;
 import android.net.NetworkStats;
 import android.net.NetworkStatsHistory;
 import android.net.NetworkTemplate;
+import android.net.TrafficStats;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.INetworkManagementService;
@@ -186,6 +188,8 @@
     private NetworkPolicyManager mPolicyManager;
     private ConnectivityManager mConnService;
 
+    private INetworkStatsSession mStatsSession;
+
     private static final String PREF_FILE = "data_usage";
     private static final String PREF_SHOW_WIFI = "show_wifi";
     private static final String PREF_SHOW_ETHERNET = "show_ethernet";
@@ -285,6 +289,12 @@
 
         mUidDetailProvider = new UidDetailProvider(context);
 
+        try {
+            mStatsSession = mStatsService.openSession();
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+
         mTabHost = (TabHost) view.findViewById(android.R.id.tabhost);
         mTabsContainer = (ViewGroup) view.findViewById(R.id.tabs_container);
         mTabWidget = (TabWidget) view.findViewById(android.R.id.tabs);
@@ -533,6 +543,8 @@
 
         mUidDetailProvider.clearCache();
         mUidDetailProvider = null;
+
+        TrafficStats.closeQuietly(mStatsSession);
     }
 
     @Override
@@ -1139,7 +1151,7 @@
             ChartData>() {
         /** {@inheritDoc} */
         public Loader<ChartData> onCreateLoader(int id, Bundle args) {
-            return new ChartDataLoader(getActivity(), mStatsService, args);
+            return new ChartDataLoader(getActivity(), mStatsSession, args);
         }
 
         /** {@inheritDoc} */
@@ -1170,7 +1182,7 @@
             NetworkStats>() {
         /** {@inheritDoc} */
         public Loader<NetworkStats> onCreateLoader(int id, Bundle args) {
-            return new SummaryForAllUidLoader(getActivity(), mStatsService, args);
+            return new SummaryForAllUidLoader(getActivity(), mStatsSession, args);
         }
 
         /** {@inheritDoc} */
diff --git a/src/com/android/settings/net/ChartDataLoader.java b/src/com/android/settings/net/ChartDataLoader.java
index 172d377..830d006 100644
--- a/src/com/android/settings/net/ChartDataLoader.java
+++ b/src/com/android/settings/net/ChartDataLoader.java
@@ -24,7 +24,7 @@
 
 import android.content.AsyncTaskLoader;
 import android.content.Context;
-import android.net.INetworkStatsService;
+import android.net.INetworkStatsSession;
 import android.net.NetworkStatsHistory;
 import android.net.NetworkTemplate;
 import android.os.Bundle;
@@ -40,7 +40,7 @@
     private static final String KEY_APP = "app";
     private static final String KEY_FIELDS = "fields";
 
-    private final INetworkStatsService mStatsService;
+    private final INetworkStatsSession mSession;
     private final Bundle mArgs;
 
     public static Bundle buildArgs(NetworkTemplate template, AppItem app) {
@@ -55,9 +55,9 @@
         return args;
     }
 
-    public ChartDataLoader(Context context, INetworkStatsService statsService, Bundle args) {
+    public ChartDataLoader(Context context, INetworkStatsSession session, Bundle args) {
         super(context);
-        mStatsService = statsService;
+        mSession = session;
         mArgs = args;
     }
 
@@ -85,7 +85,7 @@
     private ChartData loadInBackground(NetworkTemplate template, AppItem app, int fields)
             throws RemoteException {
         final ChartData data = new ChartData();
-        data.network = mStatsService.getHistoryForNetwork(template, fields);
+        data.network = mSession.getHistoryForNetwork(template, fields);
 
         if (app != null) {
             data.detailDefault = null;
@@ -128,7 +128,7 @@
     private NetworkStatsHistory collectHistoryForUid(
             NetworkTemplate template, int uid, int set, NetworkStatsHistory existing)
             throws RemoteException {
-        final NetworkStatsHistory history = mStatsService.getHistoryForUid(
+        final NetworkStatsHistory history = mSession.getHistoryForUid(
                 template, uid, set, TAG_NONE, FIELD_RX_BYTES | FIELD_TX_BYTES);
 
         if (existing != null) {
diff --git a/src/com/android/settings/net/SummaryForAllUidLoader.java b/src/com/android/settings/net/SummaryForAllUidLoader.java
index c01de45..68dc799 100644
--- a/src/com/android/settings/net/SummaryForAllUidLoader.java
+++ b/src/com/android/settings/net/SummaryForAllUidLoader.java
@@ -18,7 +18,7 @@
 
 import android.content.AsyncTaskLoader;
 import android.content.Context;
-import android.net.INetworkStatsService;
+import android.net.INetworkStatsSession;
 import android.net.NetworkStats;
 import android.net.NetworkTemplate;
 import android.os.Bundle;
@@ -29,7 +29,7 @@
     private static final String KEY_START = "start";
     private static final String KEY_END = "end";
 
-    private final INetworkStatsService mStatsService;
+    private final INetworkStatsSession mSession;
     private final Bundle mArgs;
 
     public static Bundle buildArgs(NetworkTemplate template, long start, long end) {
@@ -40,10 +40,9 @@
         return args;
     }
 
-    public SummaryForAllUidLoader(
-            Context context, INetworkStatsService statsService, Bundle args) {
+    public SummaryForAllUidLoader(Context context, INetworkStatsSession session, Bundle args) {
         super(context);
-        mStatsService = statsService;
+        mSession = session;
         mArgs = args;
     }
 
@@ -60,7 +59,7 @@
         final long end = mArgs.getLong(KEY_END);
 
         try {
-            return mStatsService.getSummaryForAllUid(template, start, end, false);
+            return mSession.getSummaryForAllUid(template, start, end, false);
         } catch (RemoteException e) {
             return null;
         }