diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java index 6d9ef3836c8..b05d1809132 100644 --- a/src/com/android/settings/datausage/DataUsageSummary.java +++ b/src/com/android/settings/datausage/DataUsageSummary.java @@ -28,6 +28,7 @@ import android.support.v7.preference.PreferenceScreen; 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 @@ public class DataUsageSummary extends DataUsageBaseFragment implements Indexable @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 689226445c4..d065c736063 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 @@ package com.android.settings.datausage; 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.Test; 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 @@ public class DataUsageSummaryTest { @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 @@ public class DataUsageSummaryTest { 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 @@ public class DataUsageSummaryTest { 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")); + } }