diff --git a/res/values/strings.xml b/res/values/strings.xml index 13575abe3b0..8b9166ee04d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -12789,6 +12789,9 @@ Connected + + No connection Internet won\u0027t auto\u2011connect diff --git a/src/com/android/settings/network/ProviderModelSliceHelper.java b/src/com/android/settings/network/ProviderModelSliceHelper.java index 440d425fe26..3a0ceeac6fb 100644 --- a/src/com/android/settings/network/ProviderModelSliceHelper.java +++ b/src/com/android/settings/network/ProviderModelSliceHelper.java @@ -24,6 +24,7 @@ import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.net.wifi.WifiManager; import android.telephony.ServiceState; import android.telephony.SignalStrength; import android.telephony.SubscriptionInfo; @@ -231,6 +232,7 @@ public class ProviderModelSliceHelper { } private String getMobileSummary(String networkTypeDescription) { + final WifiManager wifiManager = mContext.getSystemService(WifiManager.class); String summary = networkTypeDescription; if (isDataSimActive()) { summary = mContext.getString(R.string.preference_summary_default_combination, @@ -238,6 +240,8 @@ public class ProviderModelSliceHelper { networkTypeDescription); } else if (!isMobileDataEnabled()) { summary = mContext.getString(R.string.mobile_data_off_summary); + } else if (!wifiManager.isWifiEnabled() && !isDataSimActive()) { + summary = mContext.getString(R.string.mobile_data_no_connection); } return summary; } diff --git a/tests/unit/src/com/android/settings/network/ProviderModelSliceHelperTest.java b/tests/unit/src/com/android/settings/network/ProviderModelSliceHelperTest.java index ac2e24d8061..9c5c88b6d96 100644 --- a/tests/unit/src/com/android/settings/network/ProviderModelSliceHelperTest.java +++ b/tests/unit/src/com/android/settings/network/ProviderModelSliceHelperTest.java @@ -33,6 +33,7 @@ import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.Uri; +import android.net.wifi.WifiManager; import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; import android.telephony.ServiceState; @@ -90,6 +91,8 @@ public class ProviderModelSliceHelperTest { private SubscriptionInfo mDefaultDataSubscriptionInfo; @Mock private Drawable mDrawableWithSignalStrength; + @Mock + private WifiManager mWifiManager; @Before public void setUp() { @@ -102,13 +105,23 @@ public class ProviderModelSliceHelperTest { when(mContext.getSystemService(CarrierConfigManager.class)).thenReturn( mCarrierConfigManager); when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(mBundle); + mBundle.putBoolean(CarrierConfigManager.KEY_INFLATE_SIGNAL_STRENGTH_BOOL, false); when(mContext.getSystemService(ConnectivityManager.class)).thenReturn(mConnectivityManager); when(mConnectivityManager.getActiveNetwork()).thenReturn(mNetwork); when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mTelephonyManager); + when(mTelephonyManager.getServiceState()).thenReturn(mServiceState); + when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager); TestCustomSliceable testCustomSliceable = new TestCustomSliceable(); mProviderModelSliceHelper = new MockProviderModelSliceHelper(mContext, testCustomSliceable); + + final int defaultDataSubId = SubscriptionManager.getDefaultDataSubscriptionId(); + when(mDefaultDataSubscriptionInfo.getSubscriptionId()).thenReturn(defaultDataSubId); + when(mSubscriptionManager.getActiveSubscriptionInfo(defaultDataSubId)).thenReturn( + mDefaultDataSubscriptionInfo); + when(mSubscriptionManager.getAvailableSubscriptionInfoList()).thenReturn( + Arrays.asList(mDefaultDataSubscriptionInfo)); } @Test @@ -155,20 +168,9 @@ public class ProviderModelSliceHelperTest { String expectDisplayName = "Name1"; CharSequence expectedSubtitle = Html.fromHtml("5G", Html.FROM_HTML_MODE_LEGACY); String networkType = "5G"; - - final int defaultDataSubId = SubscriptionManager.getDefaultDataSubscriptionId(); - when(mDefaultDataSubscriptionInfo.getSubscriptionId()).thenReturn(defaultDataSubId); - when(mDefaultDataSubscriptionInfo.getDisplayName()).thenReturn(expectDisplayName); - when(mSubscriptionManager.getActiveSubscriptionInfo(defaultDataSubId)).thenReturn( - mDefaultDataSubscriptionInfo); - when(mSubscriptionManager.getAvailableSubscriptionInfoList()).thenReturn( - Arrays.asList(mDefaultDataSubscriptionInfo)); - - when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE); - mBundle.putBoolean(CarrierConfigManager.KEY_INFLATE_SIGNAL_STRENGTH_BOOL, false); + mockConnections(true, ServiceState.STATE_IN_SERVICE, expectDisplayName, + mTelephonyManager.DATA_CONNECTED, true); addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI); - when(mTelephonyManager.isDataEnabled()).thenReturn(true); - ListBuilder.RowBuilder testRowBuild = mProviderModelSliceHelper.createCarrierRow( networkType); @@ -178,7 +180,7 @@ public class ProviderModelSliceHelperTest { } @Test - public void createCarrierRow_hasDdsAndActiveNetworkIsCellular_verifyTitleAndSummary() { + public void createCarrierRow_wifiOnhasDdsAndActiveNetworkIsCellular_verifyTitleAndSummary() { String expectDisplayName = "Name1"; String networkType = "5G"; String connectedText = ResourcesUtils.getResourcesString(mContext, @@ -186,16 +188,27 @@ public class ProviderModelSliceHelperTest { CharSequence expectedSubtitle = Html.fromHtml(ResourcesUtils.getResourcesString(mContext, "preference_summary_default_combination", connectedText, networkType), Html.FROM_HTML_MODE_LEGACY); + mockConnections(true, ServiceState.STATE_IN_SERVICE, expectDisplayName, + mTelephonyManager.DATA_CONNECTED, true); + addNetworkTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); - final int defaultDataSubId = SubscriptionManager.getDefaultDataSubscriptionId(); - when(mDefaultDataSubscriptionInfo.getSubscriptionId()).thenReturn(defaultDataSubId); - when(mDefaultDataSubscriptionInfo.getDisplayName()).thenReturn(expectDisplayName); - when(mSubscriptionManager.getActiveSubscriptionInfo(defaultDataSubId)).thenReturn( - mDefaultDataSubscriptionInfo); - when(mSubscriptionManager.getAvailableSubscriptionInfoList()).thenReturn( - Arrays.asList(mDefaultDataSubscriptionInfo)); - when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE); - mBundle.putBoolean(CarrierConfigManager.KEY_INFLATE_SIGNAL_STRENGTH_BOOL, false); + ListBuilder.RowBuilder testRowBuild = mProviderModelSliceHelper.createCarrierRow( + networkType); + + assertThat(testRowBuild.getTitle()).isEqualTo(expectDisplayName); + assertThat(testRowBuild.getSubtitle()).isEqualTo(expectedSubtitle); + } + + @Test + public void createCarrierRow_noNetworkAvailable_verifyTitleAndSummary() { + String expectDisplayName = "Name1"; + CharSequence expectedSubtitle = Html.fromHtml( + ResourcesUtils.getResourcesString(mContext, "mobile_data_no_connection"), + Html.FROM_HTML_MODE_LEGACY); + String networkType = ""; + + mockConnections(true, ServiceState.STATE_OUT_OF_SERVICE, expectDisplayName, + mTelephonyManager.DATA_DISCONNECTED, false); addNetworkTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); ListBuilder.RowBuilder testRowBuild = mProviderModelSliceHelper.createCarrierRow( @@ -207,53 +220,40 @@ public class ProviderModelSliceHelperTest { @Test public void isNoCarrierData_mobileDataOnAndNoData_returnTrue() { - when(mTelephonyManager.isDataEnabled()).thenReturn(true); - when(mTelephonyManager.getDataState()).thenReturn(mTelephonyManager.DATA_DISCONNECTED); - when(mTelephonyManager.getServiceState()).thenReturn(mServiceState); - when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE); + mockConnections(true, ServiceState.STATE_IN_SERVICE, "", + mTelephonyManager.DATA_DISCONNECTED, true); assertThat(mProviderModelSliceHelper.isNoCarrierData()).isTrue(); } @Test public void isNoCarrierData_mobileDataOffAndOutOfService_returnTrue() { - when(mTelephonyManager.isDataEnabled()).thenReturn(false); - when(mTelephonyManager.getDataState()).thenReturn(mTelephonyManager.DATA_DISCONNECTED); - when(mTelephonyManager.getServiceState()).thenReturn(mServiceState); - when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); + mockConnections(false, ServiceState.STATE_OUT_OF_SERVICE, "", + mTelephonyManager.DATA_DISCONNECTED, true); assertThat(mProviderModelSliceHelper.isNoCarrierData()).isTrue(); } @Test public void isNoCarrierData_mobileDataOnAndDataConnected_returnFalse() { - when(mTelephonyManager.isDataEnabled()).thenReturn(true); - when(mTelephonyManager.getDataState()).thenReturn(mTelephonyManager.DATA_CONNECTED); - when(mTelephonyManager.getServiceState()).thenReturn(mServiceState); - when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE); + mockConnections(true, ServiceState.STATE_IN_SERVICE, "", mTelephonyManager.DATA_CONNECTED, + true); assertThat(mProviderModelSliceHelper.isNoCarrierData()).isFalse(); } @Test public void isNoCarrierData_mobileDataOffAndVoiceIsInService_returnFalse() { - when(mTelephonyManager.isDataEnabled()).thenReturn(false); - when(mTelephonyManager.getDataState()).thenReturn(mTelephonyManager.DATA_DISCONNECTED); - when(mTelephonyManager.getServiceState()).thenReturn(mServiceState); - when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE); + mockConnections(false, ServiceState.STATE_IN_SERVICE, "", + mTelephonyManager.DATA_DISCONNECTED, true); assertThat(mProviderModelSliceHelper.isNoCarrierData()).isFalse(); } @Test public void getMobileDrawable_noCarrierData_getMobileDrawable() throws Throwable { - when(mTelephonyManager.isDataEnabled()).thenReturn(false); - when(mTelephonyManager.getDataState()).thenReturn(mTelephonyManager.DATA_DISCONNECTED); - when(mTelephonyManager.getServiceState()).thenReturn(mServiceState); - when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); - int defaultDataSubId = SubscriptionManager.getDefaultDataSubscriptionId(); - when(mSubscriptionManager.getActiveSubscriptionInfo(defaultDataSubId)).thenReturn( - mDefaultDataSubscriptionInfo); + mockConnections(false, ServiceState.STATE_OUT_OF_SERVICE, "", + mTelephonyManager.DATA_DISCONNECTED, true); when(mConnectivityManager.getActiveNetwork()).thenReturn(null); Drawable expectDrawable = mock(Drawable.class); @@ -264,15 +264,10 @@ public class ProviderModelSliceHelperTest { @Test public void getMobileDrawable_hasCarrierDataAndDataIsOnCellular_getMobileDrawable() throws Throwable { - when(mTelephonyManager.isDataEnabled()).thenReturn(true); - when(mTelephonyManager.getDataState()).thenReturn(mTelephonyManager.DATA_CONNECTED); - when(mTelephonyManager.getServiceState()).thenReturn(mServiceState); - when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE); - Drawable drawable = mock(Drawable.class); - int defaultDataSubId = SubscriptionManager.getDefaultDataSubscriptionId(); - when(mSubscriptionManager.getActiveSubscriptionInfo(defaultDataSubId)).thenReturn( - mDefaultDataSubscriptionInfo); + mockConnections(true, ServiceState.STATE_IN_SERVICE, "", mTelephonyManager.DATA_CONNECTED, + true); addNetworkTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); + Drawable drawable = mock(Drawable.class); assertThat(mProviderModelSliceHelper.getMobileDrawable(drawable)).isEqualTo( mDrawableWithSignalStrength); @@ -283,14 +278,9 @@ public class ProviderModelSliceHelperTest { @Test public void getMobileDrawable_hasCarrierDataAndDataIsOnWifi_getMobileDrawable() throws Throwable { - when(mTelephonyManager.isDataEnabled()).thenReturn(true); - when(mTelephonyManager.getDataState()).thenReturn(mTelephonyManager.DATA_CONNECTED); - when(mTelephonyManager.getServiceState()).thenReturn(mServiceState); - when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE); + mockConnections(true, ServiceState.STATE_IN_SERVICE, "", mTelephonyManager.DATA_CONNECTED, + true); Drawable drawable = mock(Drawable.class); - int defaultDataSubId = SubscriptionManager.getDefaultDataSubscriptionId(); - when(mSubscriptionManager.getActiveSubscriptionInfo(defaultDataSubId)).thenReturn( - mDefaultDataSubscriptionInfo); addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI); assertThat(mProviderModelSliceHelper.getMobileDrawable(drawable)).isEqualTo( @@ -303,6 +293,16 @@ public class ProviderModelSliceHelperTest { mNetworkCapabilities); } + private void mockConnections(boolean isDataEnabled, int serviceState, String expectDisplayName, + int getDataState, boolean isWifiEnabled) { + when(mTelephonyManager.isDataEnabled()).thenReturn(isDataEnabled); + when(mWifiManager.isWifiEnabled()).thenReturn(isWifiEnabled); + when(mTelephonyManager.getDataState()).thenReturn(getDataState); + + when(mServiceState.getState()).thenReturn(serviceState); + when(mDefaultDataSubscriptionInfo.getDisplayName()).thenReturn(expectDisplayName); + } + private class TestCustomSliceable implements CustomSliceable { TestCustomSliceable() { }