In Network & internet screen, hide summary under Data usage when there is No SIM

Bug: 70950124

Test: manual
Test: make RunSettingsRoboTests
Change-Id: I4abd401aa9420b2b0090fac76991fe5067acc2e9
diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index 6d9ef38..b05d180 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -28,6 +28,7 @@
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.SubscriptionPlan;
+import android.telephony.TelephonyManager;
 import android.text.BidiFormatter;
 import android.text.Spannable;
 import android.text.SpannableString;
@@ -302,8 +303,18 @@
         @Override
         public void setListening(boolean listening) {
             if (listening) {
-                mSummaryLoader.setSummary(this,
-                        mActivity.getString(R.string.data_usage_summary_format, formatUsedData()));
+                TelephonyManager telephonyManager = (TelephonyManager) mActivity
+                        .getSystemService(Context.TELEPHONY_SERVICE);
+                final int simState = telephonyManager.getSimState();
+                // Note that pulling the SIM card returns UNKNOWN, not ABSENT.
+                if (simState == TelephonyManager.SIM_STATE_ABSENT
+                        || simState == TelephonyManager.SIM_STATE_UNKNOWN) {
+                    mSummaryLoader.setSummary(this, null);
+                } else {
+                    mSummaryLoader.setSummary(this,
+                            mActivity.getString(R.string.data_usage_summary_format,
+                                    formatUsedData()));
+                }
             }
         }
 
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
index 6892264..d065c73 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
@@ -18,13 +18,20 @@
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.endsWith;
+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.net.ConnectivityManager;
+import android.telephony.TelephonyManager;
 import android.text.format.Formatter;
 
 import com.android.settings.R;
+import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.SettingsShadowResources;
 
@@ -33,6 +40,7 @@
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
 import org.robolectric.shadows.ShadowApplication;
 
 @RunWith(SettingsRobolectricTestRunner.class)
@@ -41,6 +49,12 @@
     @Mock
     private ConnectivityManager mManager;
     private Context mContext;
+    @Mock
+    TelephonyManager mTelephonyManager;
+    @Mock
+    private SummaryLoader mSummaryLoader;
+    private Activity mActivity;
+    private SummaryLoader.SummaryProvider mSummaryProvider;
 
     /**
      * This set up is contrived to get a passing test so that the build doesn't block without tests.
@@ -54,6 +68,12 @@
         shadowContext.setSystemService(Context.CONNECTIVITY_SERVICE, mManager);
         mContext = shadowContext.getApplicationContext();
         when(mManager.isNetworkSupported(anyInt())).thenReturn(true);
+
+        mActivity = spy(Robolectric.buildActivity(Activity.class).get());
+        when(mActivity.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
+
+        mSummaryProvider = DataUsageSummary.SUMMARY_PROVIDER_FACTORY
+                .createSummaryProvider(mActivity, mSummaryLoader);
     }
 
     @Test
@@ -66,4 +86,18 @@
         final String formattedAsFileSize = Formatter.formatFileSize(mContext, usage);
         assertThat(formattedUsage).isEqualTo(formattedAsFileSize);
     }
+
+    @Test
+    public void setListening_shouldBlankSummaryWithNoSim() {
+        when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_ABSENT);
+        mSummaryProvider.setListening(true);
+        verify(mSummaryLoader).setSummary(mSummaryProvider, null);
+    }
+
+    @Test
+    public void setListening_shouldSetSummaryWithSim() {
+        when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_READY);
+        mSummaryProvider.setListening(true);
+        verify(mSummaryLoader).setSummary(anyObject(), endsWith(" of data used"));
+    }
 }