diff --git a/src/com/android/settings/wifi/WifiSettings2.java b/src/com/android/settings/wifi/WifiSettings2.java
index 5389834..c06aef7 100644
--- a/src/com/android/settings/wifi/WifiSettings2.java
+++ b/src/com/android/settings/wifi/WifiSettings2.java
@@ -62,9 +62,7 @@
 import com.android.settingslib.search.Indexable;
 import com.android.settingslib.search.SearchIndexable;
 import com.android.settingslib.search.SearchIndexableRaw;
-import com.android.settingslib.wifi.AccessPoint;
 import com.android.settingslib.wifi.LongPressWifiEntryPreference;
-import com.android.settingslib.wifi.WifiSavedConfigUtils;
 import com.android.wifitrackerlib.WifiEntry;
 import com.android.wifitrackerlib.WifiPickerTracker;
 
@@ -129,7 +127,9 @@
 
     // Worker thread used for WifiPickerTracker work
     private HandlerThread mWorkerThread;
-    private WifiPickerTracker mWifiPickerTracker;
+
+    @VisibleForTesting
+    WifiPickerTracker mWifiPickerTracker;
 
     private WifiDialog mDialog;
 
@@ -449,12 +449,12 @@
 
     @Override
     public void onNumSavedNetworksChanged() {
-        // TODO(b/70983952): Update the num saved networks preference text here
+        setAdditionalSettingsSummaries();
     }
 
     @Override
     public void onNumSavedSubscriptionsChanged() {
-        // TODO(b/70983952): Update the num saved networks preference text here
+        setAdditionalSettingsSummaries();
     }
 
     /**
@@ -557,36 +557,30 @@
                         ? R.string.wifi_configure_settings_preference_summary_wakeup_on
                         : R.string.wifi_configure_settings_preference_summary_wakeup_off));
 
-        final List<AccessPoint> savedNetworks =
-                WifiSavedConfigUtils.getAllConfigs(getContext(), mWifiManager);
-        final int numSavedNetworks = (savedNetworks != null) ? savedNetworks.size() : 0;
-        mSavedNetworksPreference.setVisible(numSavedNetworks > 0);
-        if (numSavedNetworks > 0) {
+        final int numSavedNetworks = mWifiPickerTracker.getNumSavedNetworks();
+        final int numSavedSubscriptions = mWifiPickerTracker.getNumSavedSubscriptions();
+        if (numSavedNetworks + numSavedSubscriptions > 0) {
+            mSavedNetworksPreference.setVisible(true);
             mSavedNetworksPreference.setSummary(
-                    getSavedNetworkSettingsSummaryText(savedNetworks, numSavedNetworks));
+                    getSavedNetworkSettingsSummaryText(numSavedNetworks, numSavedSubscriptions));
+        } else {
+            mSavedNetworksPreference.setVisible(false);
         }
     }
 
     private String getSavedNetworkSettingsSummaryText(
-            List<AccessPoint> savedNetworks, int numSavedNetworks) {
-        int numSavedPasspointNetworks = 0;
-        for (AccessPoint savedNetwork : savedNetworks) {
-            if (savedNetwork.isPasspointConfig() || savedNetwork.isPasspoint()) {
-                numSavedPasspointNetworks++;
-            }
-        }
-        final int numSavedNormalNetworks = numSavedNetworks - numSavedPasspointNetworks;
-
-        if (numSavedNetworks == numSavedNormalNetworks) {
+            int numSavedNetworks, int numSavedSubscriptions) {
+        if (numSavedSubscriptions == 0) {
             return getResources().getQuantityString(R.plurals.wifi_saved_access_points_summary,
-                    numSavedNormalNetworks, numSavedNormalNetworks);
-        } else if (numSavedNetworks == numSavedPasspointNetworks) {
+                    numSavedNetworks, numSavedNetworks);
+        } else if (numSavedNetworks == 0) {
             return getResources().getQuantityString(
                     R.plurals.wifi_saved_passpoint_access_points_summary,
-                    numSavedPasspointNetworks, numSavedPasspointNetworks);
+                    numSavedSubscriptions, numSavedSubscriptions);
         } else {
+            final int numTotalEntries = numSavedNetworks + numSavedSubscriptions;
             return getResources().getQuantityString(R.plurals.wifi_saved_all_access_points_summary,
-                    numSavedNetworks, numSavedNetworks);
+                    numTotalEntries, numTotalEntries);
         }
     }
 
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSettings2Test.java b/tests/robotests/src/com/android/settings/wifi/WifiSettings2Test.java
index 9a3d14e..a2f5daf 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiSettings2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiSettings2Test.java
@@ -32,10 +32,6 @@
 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;
@@ -49,6 +45,7 @@
 import com.android.settings.testutils.shadow.ShadowDataUsageUtils;
 import com.android.settings.testutils.shadow.ShadowFragment;
 import com.android.settingslib.search.SearchIndexableRaw;
+import com.android.wifitrackerlib.WifiPickerTracker;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -59,7 +56,6 @@
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
-import java.util.ArrayList;
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
@@ -71,10 +67,10 @@
     private PowerManager mPowerManager;
     @Mock
     private DataUsagePreference mDataUsagePreference;
-    @Mock
-    private WifiManager mWifiManager;
     private Context mContext;
     private WifiSettings2 mWifiSettings2;
+    @Mock
+    private WifiPickerTracker mMockWifiPickerTracker;
 
     @Before
     public void setUp() {
@@ -87,7 +83,7 @@
         mWifiSettings2.mAddWifiNetworkPreference = new AddWifiNetworkPreference(mContext);
         mWifiSettings2.mSavedNetworksPreference = new Preference(mContext);
         mWifiSettings2.mConfigureWifiSettingsPreference = new Preference(mContext);
-        mWifiSettings2.mWifiManager = mWifiManager;
+        mWifiSettings2.mWifiPickerTracker = mMockWifiPickerTracker;
     }
 
     @Test
@@ -121,30 +117,10 @@
         verify(wifiSettings).handleAddNetworkRequest(anyInt(), any(Intent.class));
     }
 
-    private List<WifiConfiguration> createMockWifiConfigurations(int count) {
-        final List<WifiConfiguration> mockConfigs = new ArrayList<>();
-        for (int i = 0; i < count; i++) {
-            mockConfigs.add(new WifiConfiguration());
-        }
-        return mockConfigs;
-    }
-
-    private List<PasspointConfiguration> createMockPasspointConfigurations(int count) {
-        final List<PasspointConfiguration> 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(mWifiManager.getConfiguredNetworks())
-                .thenReturn(createMockWifiConfigurations(NUM_NETWORKS));
+        when(mMockWifiPickerTracker.getNumSavedNetworks()).thenReturn(NUM_NETWORKS);
+        when(mMockWifiPickerTracker.getNumSavedSubscriptions()).thenReturn(0 /* count */);
 
         mWifiSettings2.setAdditionalSettingsSummaries();
 
@@ -157,8 +133,8 @@
 
     @Test
     public void setAdditionalSettingsSummaries_hasSavedPasspointNetwork_preferenceVisible() {
-        when(mWifiManager.getPasspointConfigurations())
-                .thenReturn(createMockPasspointConfigurations(NUM_NETWORKS));
+        when(mMockWifiPickerTracker.getNumSavedNetworks()).thenReturn(0 /* count */);
+        when(mMockWifiPickerTracker.getNumSavedSubscriptions()).thenReturn(NUM_NETWORKS);
 
         mWifiSettings2.setAdditionalSettingsSummaries();
 
@@ -171,10 +147,8 @@
 
     @Test
     public void setAdditionalSettingsSummaries_hasTwoKindsSavedNetwork_preferenceVisible() {
-        when(mWifiManager.getConfiguredNetworks())
-                .thenReturn(createMockWifiConfigurations(NUM_NETWORKS));
-        when(mWifiManager.getPasspointConfigurations())
-                .thenReturn(createMockPasspointConfigurations(NUM_NETWORKS));
+        when(mMockWifiPickerTracker.getNumSavedNetworks()).thenReturn(NUM_NETWORKS);
+        when(mMockWifiPickerTracker.getNumSavedSubscriptions()).thenReturn(NUM_NETWORKS);
 
         mWifiSettings2.setAdditionalSettingsSummaries();
 
@@ -187,8 +161,8 @@
 
     @Test
     public void setAdditionalSettingsSummaries_noSavedNetwork_preferenceInvisible() {
-        when(mWifiManager.getConfiguredNetworks())
-                .thenReturn(createMockWifiConfigurations(0 /* count */));
+        when(mMockWifiPickerTracker.getNumSavedNetworks()).thenReturn(0 /* count */);
+        when(mMockWifiPickerTracker.getNumSavedSubscriptions()).thenReturn(0 /* count */);
 
         mWifiSettings2.setAdditionalSettingsSummaries();
 
