diff --git a/res/values/strings.xml b/res/values/strings.xml index 9c24dd34a9e..3d3aabafe5e 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2303,11 +2303,20 @@ All passwords for this network will be deleted - + 1 network %d networks + + + 1 subscription + %d subscriptions + + + + %d networks & subscriptions + Advanced Wi\u2011Fi diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index da101485c91..6958ecbd7a7 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -78,6 +78,7 @@ import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.wifi.AccessPoint; import com.android.settingslib.wifi.AccessPoint.AccessPointListener; import com.android.settingslib.wifi.AccessPointPreference; +import com.android.settingslib.wifi.WifiSavedConfigUtils; import com.android.settingslib.wifi.WifiTracker; import com.android.settingslib.wifi.WifiTrackerFactory; @@ -954,11 +955,38 @@ public class WifiSettings extends RestrictedSettingsFragment isWifiWakeupEnabled() ? R.string.wifi_configure_settings_preference_summary_wakeup_on : R.string.wifi_configure_settings_preference_summary_wakeup_off)); - final int numSavedNetworks = mWifiTracker.getNumSavedNetworks(); + + final List savedNetworks = + WifiSavedConfigUtils.getAllConfigs(getContext(), mWifiManager); + final int numSavedNetworks = (savedNetworks != null) ? savedNetworks.size() : 0; mSavedNetworksPreference.setVisible(numSavedNetworks > 0); - mSavedNetworksPreference.setSummary( - getResources().getQuantityString(R.plurals.wifi_saved_access_points_summary, - numSavedNetworks, numSavedNetworks)); + if (numSavedNetworks > 0) { + mSavedNetworksPreference.setSummary( + getSavedNetworkSettingsSummaryText(savedNetworks, numSavedNetworks)); + } + } + + private String getSavedNetworkSettingsSummaryText( + List savedNetworks, int numSavedNetworks) { + int numSavedPasspointNetworks = 0; + for (AccessPoint savedNetwork : savedNetworks) { + if (savedNetwork.isPasspointConfig() || savedNetwork.isPasspoint()) { + numSavedPasspointNetworks++; + } + } + final int numSavedNormalNetworks = numSavedNetworks - numSavedPasspointNetworks; + + if (numSavedNetworks == numSavedNormalNetworks) { + return getResources().getQuantityString(R.plurals.wifi_saved_access_points_summary, + numSavedNormalNetworks, numSavedNormalNetworks); + } else if (numSavedNetworks == numSavedPasspointNetworks) { + return getResources().getQuantityString( + R.plurals.wifi_saved_passpoint_access_points_summary, + numSavedPasspointNetworks, numSavedPasspointNetworks); + } else { + return getResources().getQuantityString(R.plurals.wifi_saved_all_access_points_summary, + numSavedNetworks, numSavedNetworks); + } } private boolean isWifiWakeupEnabled() { diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java index 82e6717bf51..e2dc932f6a3 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java @@ -32,6 +32,10 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.res.Resources; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiManager; +import android.net.wifi.hotspot2.PasspointConfiguration; +import android.net.wifi.hotspot2.pps.HomeSp; import android.os.Bundle; import android.os.PowerManager; import android.os.UserManager; @@ -46,6 +50,7 @@ import com.android.settings.search.SearchIndexableRaw; import com.android.settings.testutils.shadow.ShadowDataUsageUtils; import com.android.settingslib.wifi.WifiTracker; +import java.util.ArrayList; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -68,6 +73,8 @@ public class WifiSettingsTest { private PowerManager mPowerManager; @Mock private DataUsagePreference mDataUsagePreference; + @Mock + private WifiManager mWifiManager; private Context mContext; private WifiSettings mWifiSettings; @@ -83,6 +90,7 @@ public class WifiSettingsTest { mWifiSettings.mSavedNetworksPreference = new Preference(mContext); mWifiSettings.mConfigureWifiSettingsPreference = new Preference(mContext); mWifiSettings.mWifiTracker = mWifiTracker; + mWifiSettings.mWifiManager = mWifiManager; } @Test @@ -116,9 +124,30 @@ public class WifiSettingsTest { verify(wifiSettings).handleAddNetworkRequest(anyInt(), any(Intent.class)); } + private List createMockWifiConfigurations(int count) { + final List mockConfigs = new ArrayList<>(); + for (int i = 0; i < count; i++) { + mockConfigs.add(new WifiConfiguration()); + } + return mockConfigs; + } + + private List createMockPasspointConfigurations(int count) { + final List mockConfigs = new ArrayList<>(); + for (int i = 0; i < count; i++) { + final HomeSp sp = new HomeSp(); + sp.setFqdn("fqdn"); + final PasspointConfiguration config = new PasspointConfiguration(); + config.setHomeSp(sp); + mockConfigs.add(config); + } + return mockConfigs; + } + @Test public void setAdditionalSettingsSummaries_hasSavedNetwork_preferenceVisible() { - when(mWifiTracker.getNumSavedNetworks()).thenReturn(NUM_NETWORKS); + when(mWifiManager.getConfiguredNetworks()) + .thenReturn(createMockWifiConfigurations(NUM_NETWORKS)); mWifiSettings.setAdditionalSettingsSummaries(); @@ -129,9 +158,40 @@ public class WifiSettingsTest { NUM_NETWORKS, NUM_NETWORKS)); } + @Test + public void setAdditionalSettingsSummaries_hasSavedPasspointNetwork_preferenceVisible() { + when(mWifiManager.getPasspointConfigurations()) + .thenReturn(createMockPasspointConfigurations(NUM_NETWORKS)); + + mWifiSettings.setAdditionalSettingsSummaries(); + + assertThat(mWifiSettings.mSavedNetworksPreference.isVisible()).isTrue(); + assertThat(mWifiSettings.mSavedNetworksPreference.getSummary()).isEqualTo( + mContext.getResources().getQuantityString( + R.plurals.wifi_saved_passpoint_access_points_summary, + NUM_NETWORKS, NUM_NETWORKS)); + } + + @Test + public void setAdditionalSettingsSummaries_hasTwoKindsSavedNetwork_preferenceVisible() { + when(mWifiManager.getConfiguredNetworks()) + .thenReturn(createMockWifiConfigurations(NUM_NETWORKS)); + when(mWifiManager.getPasspointConfigurations()) + .thenReturn(createMockPasspointConfigurations(NUM_NETWORKS)); + + mWifiSettings.setAdditionalSettingsSummaries(); + + assertThat(mWifiSettings.mSavedNetworksPreference.isVisible()).isTrue(); + assertThat(mWifiSettings.mSavedNetworksPreference.getSummary()).isEqualTo( + mContext.getResources().getQuantityString( + R.plurals.wifi_saved_all_access_points_summary, + NUM_NETWORKS*2, NUM_NETWORKS*2)); + } + @Test public void setAdditionalSettingsSummaries_noSavedNetwork_preferenceInvisible() { - when(mWifiTracker.getNumSavedNetworks()).thenReturn(0); + when(mWifiManager.getConfiguredNetworks()) + .thenReturn(createMockWifiConfigurations(0 /* count */)); mWifiSettings.setAdditionalSettingsSummaries();