diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java index 587e325016c..2f676bafb47 100644 --- a/src/com/android/settings/datausage/DataUsageList.java +++ b/src/com/android/settings/datausage/DataUsageList.java @@ -23,6 +23,7 @@ import static android.telephony.TelephonyManager.SIM_STATE_READY; 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.RemoteException; 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 @@ public class DataUsageList extends DataUsageBase { 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 @@ public class DataUsageList extends DataUsageBase { 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 @@ public class DataUsageList extends DataUsageBase { 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 8789595d1fd..04b50305972 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 @@ public class DataUsageListTest { 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); } }