From 9c2556da099f6d03ac24eb577246ad6d68b407ab Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Thu, 24 Jan 2019 14:21:18 -0800 Subject: [PATCH] Query correct subscription id for mobile data. - On the Data usage settings page, we check for valid subscription id to determine if we should show the mobile section. However, we are querying the default subscription id, which will return the 1st id for any subscription if there's no data subscription. Since this is for mobile section, we should query the default data subscription id explicitly. Change-Id: I08c80639d07477e486a2d9a10761e11df4c73b28 Fixes: 119881046 Test: make RunSettingsRoboTests --- .../settings/datausage/DataUsageList.java | 6 ++--- .../settings/datausage/DataUsageSummary.java | 2 +- .../datausage/DataUsageSummaryTest.java | 27 ++++++++++++++++++- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java index aa6619755d1..735532a5e2c 100644 --- a/src/com/android/settings/datausage/DataUsageList.java +++ b/src/com/android/settings/datausage/DataUsageList.java @@ -135,8 +135,8 @@ public class DataUsageList extends DataUsageBaseFragment { mUidDetailProvider = new UidDetailProvider(activity); mTelephonyManager = activity.getSystemService(TelephonyManager.class); mUsageAmount = findPreference(KEY_USAGE_AMOUNT); - mChart = (ChartDataUsagePreference) findPreference(KEY_CHART_DATA); - mApps = (PreferenceGroup) findPreference(KEY_APPS_GROUP); + mChart = findPreference(KEY_CHART_DATA); + mApps = findPreference(KEY_APPS_GROUP); processArgument(); } @@ -306,7 +306,7 @@ public class DataUsageList extends DataUsageBaseFragment { getLoaderManager().restartLoader(LOADER_SUMMARY, null /* args */, mNetworkStatsDetailCallbacks); - final long totalBytes = mCycleData != null + final long totalBytes = mCycleData != null && !mCycleData.isEmpty() ? mCycleData.get(mCycleSpinner.getSelectedItemPosition()).getTotalUsage() : 0; final CharSequence totalPhrase = DataUsageUtils.formatDataUsage(getActivity(), totalBytes); mUsageAmount.setTitle(getString(R.string.data_used_template, totalPhrase)); diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java index 36614103184..ad4e1e21708 100644 --- a/src/com/android/settings/datausage/DataUsageSummary.java +++ b/src/com/android/settings/datausage/DataUsageSummary.java @@ -87,7 +87,7 @@ public class DataUsageSummary extends DataUsageBaseFragment implements DataUsage boolean hasMobileData = DataUsageUtils.hasMobileData(context); - int defaultSubId = DataUsageUtils.getDefaultSubscriptionId(context); + final int defaultSubId = SubscriptionManager.getDefaultDataSubscriptionId(); if (defaultSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { hasMobileData = false; } diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java index 66f916e9962..79c3ad10cbf 100644 --- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java +++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java @@ -31,6 +31,7 @@ import static org.mockito.Mockito.verify; import android.app.usage.NetworkStatsManager; import android.content.Context; import android.net.NetworkPolicyManager; +import android.telephony.SubscriptionManager; import androidx.fragment.app.FragmentActivity; @@ -50,6 +51,7 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; +import org.robolectric.shadows.ShadowSubscriptionManager; @Config(shadows = { ShadowUtils.class, @@ -114,10 +116,11 @@ public class DataUsageSummaryTest { } @Test + @Config(shadows = ShadowSubscriptionManager.class) public void configuration_withSim_shouldShowMobileAndWifi() { ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = true; ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true; - ShadowDataUsageUtils.DEFAULT_SUBSCRIPTION_ID = 1; + ShadowSubscriptionManager.setDefaultDataSubscriptionId(1); ShadowDataUsageUtils.HAS_SIM = true; final DataUsageSummary dataUsageSummary = spy(new DataUsageSummary()); @@ -170,4 +173,26 @@ public class DataUsageSummaryTest { verify(dataUsageSummary).addWifiSection(); verify(dataUsageSummary, never()).addMobileSection(anyInt()); } + + @Test + @Config(shadows = ShadowSubscriptionManager.class) + public void configuration_invalidDataSusbscription_shouldShowWifiSectionOnly() { + ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = true; + ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true; + ShadowDataUsageUtils.HAS_SIM = false; + ShadowSubscriptionManager.setDefaultDataSubscriptionId( + SubscriptionManager.INVALID_SUBSCRIPTION_ID); + + final DataUsageSummary dataUsageSummary = spy(new DataUsageSummary()); + doReturn(mContext).when(dataUsageSummary).getContext(); + + doReturn(true).when(dataUsageSummary).removePreference(anyString()); + doNothing().when(dataUsageSummary).addWifiSection(); + doNothing().when(dataUsageSummary).addMobileSection(1); + + dataUsageSummary.onCreate(null); + + verify(dataUsageSummary).addWifiSection(); + verify(dataUsageSummary, never()).addMobileSection(anyInt()); + } }