Merge "[Settings] Support the display of data usage when SIM inactive" into rvc-dev
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
index 135abfa..648b38c 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
@@ -120,14 +120,14 @@
                 mContext.getSystemService(NetworkPolicyManager.class);
         mPolicyEditor = new NetworkPolicyEditor(policyManager);
 
-        mHasMobileData = SubscriptionManager.isValidSubscriptionId(mSubId)
-                && DataUsageUtils.hasMobileData(mContext);
+        mHasMobileData = DataUsageUtils.hasMobileData(mContext);
 
         mDataUsageController = new DataUsageController(mContext);
         mDataUsageController.setSubscriptionId(mSubId);
         mDataInfoController = new DataUsageInfoController();
 
-        if (mHasMobileData) {
+        final SubscriptionInfo subInfo = getSubscriptionInfo(mSubId);
+        if (subInfo != null) {
             mDataUsageTemplate = R.string.cell_data_template;
         } else if (DataUsageUtils.hasWifiRadio(mContext)) {
             mDataUsageTemplate = R.string.wifi_data_template;
@@ -180,18 +180,16 @@
 
     @VisibleForTesting
     SubscriptionInfo getSubscriptionInfo(int subscriptionId) {
+        if (!mHasMobileData) {
+            return null;
+        }
         return ProxySubscriptionManager.getInstance(mContext)
                 .getAccessibleSubscriptionInfo(subscriptionId);
     }
 
-    @VisibleForTesting
-    boolean hasSim() {
-        return DataUsageUtils.hasSim(mContext);
-    }
-
     @Override
     public int getAvailabilityStatus(int subId) {
-        return hasSim()
+        return (getSubscriptionInfo(subId) != null)
                 || DataUsageUtils.hasWifiRadio(mContext) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
     }
 
@@ -199,16 +197,15 @@
     public void updateState(Preference preference) {
         DataUsageSummaryPreference summaryPreference = (DataUsageSummaryPreference) preference;
 
-        final boolean isSimCardAdded = hasSim();
-        if (!isSimCardAdded) {
+        final SubscriptionInfo subInfo = getSubscriptionInfo(mSubId);
+        if (subInfo == null) {
             mDefaultTemplate = NetworkTemplate.buildTemplateWifiWildcard();
         }
 
         final DataUsageController.DataUsageInfo info =
                 mDataUsageController.getDataUsageInfo(mDefaultTemplate);
 
-        final SubscriptionInfo subInfo = getSubscriptionInfo(mSubId);
-        if (isSimCardAdded) {
+        if (subInfo != null) {
             mDataInfoController.updateDataLimit(info, mPolicyEditor.getPolicy(mDefaultTemplate));
             summaryPreference.setWifiMode(/* isWifiMode */ false,
                     /* usagePeriod */ null, /* isSingleWifi */ false);
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceControllerTest.java
index d6f3e94..210f0fd7 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceControllerTest.java
@@ -19,7 +19,6 @@
 import static android.net.ConnectivityManager.TYPE_WIFI;
 
 import static com.android.settings.core.BasePreferenceController.AVAILABLE;
-import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -159,8 +158,6 @@
         doReturn(CARRIER_NAME).when(mSubscriptionInfo).getCarrierName();
         doReturn(mSubscriptionInfo).when(mController).getSubscriptionInfo(mDefaultSubscriptionId);
         doReturn(mSubscriptionPlans).when(mController).getSubscriptionPlans(mDefaultSubscriptionId);
-
-        doReturn(true).when(mController).hasSim();
     }
 
     @After
@@ -356,55 +353,15 @@
     }
 
     @Test
-    public void testSummaryUpdate_noSim_shouldSetWifiMode() {
-        mController.init(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
-        mController.mDataUsageController = mDataUsageController;
-        doReturn(TelephonyManager.SIM_STATE_ABSENT).when(mTelephonyManager).getSimState();
-        doReturn(false).when(mController).hasSim();
-
-        final long now = System.currentTimeMillis();
-        final DataUsageController.DataUsageInfo info = createTestDataUsageInfo(now);
-        info.warningLevel = BillingCycleSettings.MIB_IN_BYTES;
-        info.limitLevel = BillingCycleSettings.MIB_IN_BYTES;
-
-        final Intent intent = new Intent();
-
-        doReturn(info).when(mDataUsageController).getDataUsageInfo(any());
-        setupTestDataUsage(LIMIT1, USAGE1, now - UPDATE_BACKOFF_MS);
-
-        mController.updateState(mSummaryPreference);
-
-        verify(mSummaryPreference).setWifiMode(true /* isWifiMode */, info.period /* usagePeriod */,
-                false /* isSingleWifi */);
-        verify(mSummaryPreference).setLimitInfo(null);
-        verify(mSummaryPreference).setUsageNumbers(info.usageLevel, -1L, true);
-        verify(mSummaryPreference).setChartEnabled(false);
-        verify(mSummaryPreference).setUsageInfo(info.cycleEnd, -1L, null, 0, null);
-    }
-
-    @Test
     public void testMobileData_preferenceAvailable() {
         assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
     }
 
     @Test
-    public void testMobileData_noSimNoWifi_preferenceDisabled() {
-        final int subscriptionId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
-        mController.init(subscriptionId);
-        mController.mDataUsageController = mDataUsageController;
-        doReturn(TelephonyManager.SIM_STATE_ABSENT).when(mTelephonyManager).getSimState();
-        doReturn(false).when(mController).hasSim();
-        when(mConnectivityManager.isNetworkSupported(TYPE_WIFI)).thenReturn(false);
-        assertThat(mController.getAvailabilityStatus())
-                        .isEqualTo(CONDITIONALLY_UNAVAILABLE);
-    }
-
-    @Test
     public void testMobileData_noSimWifi_preferenceDisabled() {
         final int subscriptionId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
         mController.init(subscriptionId);
         mController.mDataUsageController = mDataUsageController;
-        doReturn(TelephonyManager.SIM_STATE_ABSENT).when(mTelephonyManager).getSimState();
         when(mConnectivityManager.isNetworkSupported(TYPE_WIFI)).thenReturn(true);
         assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
     }