Load app usage on background thread.

Since stats service loads as needed, this may touch disk, and should
run on background thread.

Change-Id: I1d1d2583250314efa4d3d8f4faa9016c746c29d0
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index 8849f2d..eff8e17 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -41,6 +41,7 @@
 import android.net.NetworkPolicy;
 import android.net.NetworkStats;
 import android.net.NetworkStatsHistory;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
@@ -568,14 +569,25 @@
     private void updateDetailData() {
         if (LOGD) Log.d(TAG, "updateDetailData()");
 
-        try {
-            final long[] range = mChart.getInspectRange();
-            final NetworkStats stats = mStatsService.getSummaryForAllUid(
-                    range[0], range[1], mTemplate);
-            mAdapter.bindStats(stats);
-        } catch (RemoteException e) {
-            Log.w(TAG, "problem reading stats");
-        }
+        new AsyncTask<Void, Void, NetworkStats>() {
+            @Override
+            protected NetworkStats doInBackground(Void... params) {
+                try {
+                    final long[] range = mChart.getInspectRange();
+                    return mStatsService.getSummaryForAllUid(range[0], range[1], mTemplate);
+                } catch (RemoteException e) {
+                    Log.w(TAG, "problem reading stats");
+                }
+                return null;
+            }
+
+            @Override
+            protected void onPostExecute(NetworkStats stats) {
+                if (stats != null) {
+                    mAdapter.bindStats(stats);
+                }
+            }
+        }.execute();
     }
 
     private static String getActiveSubscriberId(Context context) {