Merge "[Settings] Show accurate Enterprise networks details" into qt-dev
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index 8a39b82..aad9e79 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -32,14 +32,18 @@
     <string name="wifi_security_short_psk_generic" translatable="false">@string/wifi_security_short_wpa_wpa2</string>
     <!-- Do not translate.  Concise terminology for wifi with 802.1x EAP security -->
     <string name="wifi_security_short_eap" translatable="false">802.1x</string>
+    <!-- Do not translate.  Concise terminology for wifi with WPA 802.1x EAP security -->
+    <string name="wifi_security_short_eap_wpa" translatable="false">WPA-EAP</string>
+    <!-- Do not translate.  Concise terminology for wifi with WPA2/WPA3 802.1x EAP security -->
+    <string name="wifi_security_short_eap_wpa2_wpa3" translatable="false">RSN-EAP</string>
     <!-- Do not translate.  Concise terminology for wifi with WPA3 security -->
     <string name="wifi_security_short_sae" translatable="false">WPA3</string>
     <!-- Do not translate.  Concise terminology for wifi with WPA2/WPA3 transition security -->
     <string name="wifi_security_short_psk_sae" translatable="false">WPA2/WPA3</string>
     <!-- Do not translate.  Concise terminology for wifi with OWE security -->
     <string name="wifi_security_short_owe" translatable="false">OWE</string>
-    <!-- Do not translate.  Concise terminology for wifi with 802.1x EAP Suite-B security -->
-    <string name="wifi_security_short_eap_suiteb" translatable="false">Suite-B</string>
+    <!-- Do not translate.  Concise terminology for wifi with 802.1x EAP Suite-B-192 security -->
+    <string name="wifi_security_short_eap_suiteb" translatable="false">Suite-B-192</string>
 
     <!-- Used in Wi-Fi settings dialogs when Wi-Fi does not have any security. [CHAR LIMIT=40] -->
     <string name="wifi_security_none">None</string>
@@ -55,7 +59,11 @@
     <!-- Do not translate.  Terminology for wifi with unknown PSK type -->
     <string name="wifi_security_psk_generic" translatable="false">@string/wifi_security_wpa_wpa2</string>
     <!-- Do not translate.  Concise terminology for wifi with 802.1x EAP security -->
-    <string name="wifi_security_eap" translatable="false">WPA/WPA2-Enterprise</string>
+    <string name="wifi_security_eap" translatable="false">WPA/WPA2/WPA3-Enterprise</string>
+    <!-- Do not translate.  Concise terminology for wifi with WPA 802.1x EAP security -->
+    <string name="wifi_security_eap_wpa" translatable="false">WPA-Enterprise</string>
+    <!-- Do not translate.  Concise terminology for wifi with WPA2/WPA3 802.1x EAP security -->
+    <string name="wifi_security_eap_wpa2_wpa3" translatable="false">WPA2/WPA3-Enterprise</string>
     <!-- Do not translate.  Concise terminology for Passpoint network -->
     <string name="wifi_security_passpoint" translatable="false">Passpoint</string>
     <!-- Do not translate.  Terminology for wifi with WPA3 security -->
@@ -64,8 +72,8 @@
     <string name="wifi_security_psk_sae" translatable="false">WPA2/WPA3-Personal</string>
     <!-- Do not translate.  Terminology for wifi with OWE security -->
     <string name="wifi_security_owe" translatable="false">Enhanced Open</string>
-    <!-- Do not translate.  Concise terminology for wifi with 802.1x EAP Suite-B security -->
-    <string name="wifi_security_eap_suiteb" translatable="false">WPA3-Enterprise</string>
+    <!-- Do not translate.  Concise terminology for wifi with 802.1x EAP Suite-B-192 security -->
+    <string name="wifi_security_eap_suiteb" translatable="false">WPA3-Enterprise 192-bit</string>
 
     <!-- Summary for the remembered network. -->
     <string name="wifi_remembered">Saved</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index d1e4fdf..34d11b5 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -164,6 +164,7 @@
     static final String KEY_IS_CARRIER_AP = "key_is_carrier_ap";
     static final String KEY_CARRIER_AP_EAP_TYPE = "key_carrier_ap_eap_type";
     static final String KEY_CARRIER_NAME = "key_carrier_name";
+    static final String KEY_EAPTYPE = "eap_psktype";
     static final AtomicInteger sLastId = new AtomicInteger(0);
 
     /*
@@ -186,6 +187,10 @@
     private static final int PSK_WPA_WPA2 = 3;
     private static final int PSK_SAE = 4;
 
+    private static final int EAP_UNKNOWN = 0;
+    private static final int EAP_WPA = 1; // WPA-EAP
+    private static final int EAP_WPA2_WPA3 = 2; // RSN-EAP
+
     /**
      * The number of distinct wifi levels.
      *
@@ -210,6 +215,7 @@
     private int networkId = WifiConfiguration.INVALID_NETWORK_ID;
 
     private int pskType = PSK_UNKNOWN;
+    private int mEapType = EAP_UNKNOWN;
 
     private WifiConfiguration mConfig;
 
@@ -267,6 +273,9 @@
         if (savedState.containsKey(KEY_PSKTYPE)) {
             pskType = savedState.getInt(KEY_PSKTYPE);
         }
+        if (savedState.containsKey(KEY_EAPTYPE)) {
+            mEapType = savedState.getInt(KEY_EAPTYPE);
+        }
         mInfo = savedState.getParcelable(KEY_WIFIINFO);
         if (savedState.containsKey(KEY_NETWORKINFO)) {
             mNetworkInfo = savedState.getParcelable(KEY_NETWORKINFO);
@@ -776,6 +785,9 @@
             if (security == SECURITY_PSK || security == SECURITY_SAE) {
                 pskType = getPskType(bestResult);
             }
+            if (security == SECURITY_EAP) {
+                mEapType = getEapType(bestResult);
+            }
             mIsCarrierAp = bestResult.isCarrierAp;
             mCarrierApEapType = bestResult.carrierApEapType;
             mCarrierName = bestResult.carrierName;
@@ -810,8 +822,20 @@
         }
         switch(security) {
             case SECURITY_EAP:
-                return concise ? context.getString(R.string.wifi_security_short_eap) :
-                    context.getString(R.string.wifi_security_eap);
+                switch (mEapType) {
+                    case EAP_WPA:
+                        return concise ? context.getString(R.string.wifi_security_short_eap_wpa) :
+                                context.getString(R.string.wifi_security_eap_wpa);
+                    case EAP_WPA2_WPA3:
+                        return concise
+                                ? context.getString(R.string.wifi_security_short_eap_wpa2_wpa3) :
+                                context.getString(R.string.wifi_security_eap_wpa2_wpa3);
+                    case EAP_UNKNOWN:
+                    default:
+                        return concise
+                                ? context.getString(R.string.wifi_security_short_eap) :
+                                context.getString(R.string.wifi_security_eap);
+                }
             case SECURITY_EAP_SUITE_B:
                 return concise ? context.getString(R.string.wifi_security_short_eap_suiteb) :
                         context.getString(R.string.wifi_security_eap_suiteb);
@@ -1161,6 +1185,7 @@
         savedState.putInt(KEY_SECURITY, security);
         savedState.putInt(KEY_SPEED, mSpeed);
         savedState.putInt(KEY_PSKTYPE, pskType);
+        savedState.putInt(KEY_EAPTYPE, mEapType);
         if (mConfig != null) savedState.putParcelable(KEY_CONFIG, mConfig);
         savedState.putParcelable(KEY_WIFIINFO, mInfo);
         savedState.putParcelableArray(KEY_SCANRESULTS,
@@ -1494,6 +1519,18 @@
         }
     }
 
+    private static int getEapType(ScanResult result) {
+        // WPA2-Enterprise and WPA3-Enterprise (non 192-bit) advertise RSN-EAP-CCMP
+        if (result.capabilities.contains("RSN-EAP")) {
+            return EAP_WPA2_WPA3;
+        }
+        // WPA-Enterprise advertises WPA-EAP-TKIP
+        if (result.capabilities.contains("WPA-EAP")) {
+            return EAP_WPA;
+        }
+        return EAP_UNKNOWN;
+    }
+
     private static int getSecurity(ScanResult result) {
         if (result.capabilities.contains("WEP")) {
             return SECURITY_WEP;