diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java
index 587e325..2f676ba 100644
--- a/src/com/android/settings/datausage/DataUsageList.java
+++ b/src/com/android/settings/datausage/DataUsageList.java
@@ -23,6 +23,7 @@
 import android.app.ActivityManager;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.Context;
+import android.content.Intent;
 import android.content.Loader;
 import android.content.pm.UserInfo;
 import android.graphics.Color;
@@ -39,6 +40,8 @@
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.provider.Settings;
+import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceGroup;
 import android.telephony.SubscriptionInfo;
@@ -98,8 +101,10 @@
     private INetworkStatsSession mStatsSession;
     private ChartDataUsagePreference mChart;
 
-    private NetworkTemplate mTemplate;
-    private int mSubId;
+    @VisibleForTesting
+    NetworkTemplate mTemplate;
+    @VisibleForTesting
+    int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
     private ChartData mChartData;
 
     private LoadingViewController mLoadingViewController;
@@ -138,10 +143,7 @@
         mUsageAmount = findPreference(KEY_USAGE_AMOUNT);
         mChart = (ChartDataUsagePreference) findPreference(KEY_CHART_DATA);
         mApps = (PreferenceGroup) findPreference(KEY_APPS_GROUP);
-
-        final Bundle args = getArguments();
-        mSubId = args.getInt(EXTRA_SUB_ID, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
-        mTemplate = args.getParcelable(EXTRA_NETWORK_TEMPLATE);
+        processArgument();
     }
 
     @Override
@@ -232,6 +234,20 @@
         super.onDestroy();
     }
 
+    void processArgument() {
+        final Bundle args = getArguments();
+        if (args != null) {
+            mSubId = args.getInt(EXTRA_SUB_ID, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+            mTemplate = args.getParcelable(EXTRA_NETWORK_TEMPLATE);
+        }
+        if (mTemplate == null && mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+            final Intent intent = getIntent();
+            mSubId = intent.getIntExtra(Settings.EXTRA_SUB_ID,
+                    SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+            mTemplate = intent.getParcelableExtra(Settings.EXTRA_NETWORK_TEMPLATE);
+        }
+    }
+
     /**
      * Update body content based on current tab. Loads
      * {@link NetworkStatsHistory} and {@link NetworkPolicy} from system, and
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
index 8789595..04b5030 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
@@ -16,12 +16,19 @@
 
 package com.android.settings.datausage;
 
+import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
+import android.app.Activity;
 import android.content.Context;
+import android.content.Intent;
+import android.net.NetworkTemplate;
+import android.os.Bundle;
+import android.provider.Settings;
 
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -62,10 +69,38 @@
         mDataUsageList.onAttach(mContext);
         mDataUsageList.onResume();
 
-        verify(mListener).setListener(true, 0, mContext);
+        verify(mListener).setListener(true, mDataUsageList.mSubId, mContext);
 
         mDataUsageList.onPause();
 
-        verify(mListener).setListener(false, 0, mContext);
+        verify(mListener).setListener(false, mDataUsageList.mSubId, mContext);
+    }
+
+    @Test
+    public void processArgument_shouldGetTemplateFromArgument() {
+        final Bundle args = new Bundle();
+        args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mock(NetworkTemplate.class));
+        args.putInt(DataUsageList.EXTRA_SUB_ID, 3);
+        mDataUsageList.setArguments(args);
+
+        mDataUsageList.processArgument();
+
+        assertThat(mDataUsageList.mTemplate).isNotNull();
+        assertThat(mDataUsageList.mSubId).isEqualTo(3);
+    }
+
+    @Test
+    public void processArgument_fromIntent_shouldGetTemplateFromIntent() {
+        final Activity activity = mock(Activity.class);
+        final Intent intent = new Intent();
+        intent.putExtra(Settings.EXTRA_NETWORK_TEMPLATE, mock(NetworkTemplate.class));
+        intent.putExtra(Settings.EXTRA_SUB_ID, 3);
+        when(activity.getIntent()).thenReturn(intent);
+        doReturn(activity).when(mDataUsageList).getActivity();
+
+        mDataUsageList.processArgument();
+
+        assertThat(mDataUsageList.mTemplate).isNotNull();
+        assertThat(mDataUsageList.mSubId).isEqualTo(3);
     }
 }
