diff --git a/src/com/android/settings/network/VpnPreferenceController.java b/src/com/android/settings/network/VpnPreferenceController.java
index d3934f6..0df6582 100644
--- a/src/com/android/settings/network/VpnPreferenceController.java
+++ b/src/com/android/settings/network/VpnPreferenceController.java
@@ -151,6 +151,7 @@
             }
             vpns.put(user.id, cfg);
         }
+        int numberOfNonLegacyVpn = vpns.size() - connectedLegacyVpnCount;
         final UserInfo userInfo = mUserManager.getUserInfo(UserHandle.myUserId());
         final int uid;
         if (userInfo.isRestricted()) {
@@ -165,6 +166,12 @@
         } else {
             summary = getNameForVpnConfig(vpn, UserHandle.of(uid));
         }
+        String summaryOverride = getInsecureVpnSummaryOverride(numberOfNonLegacyVpn);
+        final String finalSummary = (summaryOverride != null) ? summaryOverride : summary;
+        ThreadUtils.postOnMainThread(() -> mPreference.setSummary(finalSummary));
+    }
+
+    protected String getInsecureVpnSummaryOverride(int numberOfNonLegacyVpn) {
         // Optionally add warning icon if an insecure VPN is present.
         if (mPreference instanceof VpnInfoPreference) {
             final int insecureVpnCount = getInsecureVpnCount();
@@ -174,24 +181,22 @@
             if (isInsecureVPN) {
                 // Add the users and the number of legacy vpns to determine if there is more than
                 // one vpn, since there can be more than one VPN per user.
-                final int vpnCount = vpns.size()
-                        + LegacyVpnProfileStore.list(Credentials.VPN).length
-                        - connectedLegacyVpnCount;
+                final int vpnCount = numberOfNonLegacyVpn
+                        + LegacyVpnProfileStore.list(Credentials.VPN).length;
                 if (vpnCount == 1) {
-                    summary = mContext.getString(R.string.vpn_settings_insecure_single);
+                    return mContext.getString(R.string.vpn_settings_insecure_single);
                 } else if (insecureVpnCount == 1) {
-                    summary = mContext.getString(
+                    return mContext.getString(
                             R.string.vpn_settings_single_insecure_multiple_total,
                             insecureVpnCount);
                 } else {
-                    summary = mContext.getString(
+                    return mContext.getString(
                             R.string.vpn_settings_multiple_insecure_multiple_total,
                             insecureVpnCount);
                 }
             }
         }
-        final String finalSummary = summary;
-        ThreadUtils.postOnMainThread(() -> mPreference.setSummary(finalSummary));
+        return null;
     }
 
     @VisibleForTesting
