11package de.binarynoise.betterVerboseWiFiLogging
22
33import android.net.wifi.ScanResult
4+ import android.net.wifi.WifiConfiguration
45import android.net.wifi.WifiInfo
56import android.os.Build
67import de.binarynoise.betterVerboseWiFiLogging.WifiEntry.mWifiInfoField
78import de.binarynoise.betterVerboseWiFiLogging.Wrapper.classLoader
89import de.binarynoise.reflection.findDeclaredField
910import de.binarynoise.reflection.findDeclaredMethod
11+ import org.lsposed.hiddenapibypass.HiddenApiBypass
1012
1113const val wifitrackerlib = " com.android.wifitrackerlib"
1214
@@ -199,6 +201,7 @@ val channelMap = mapOf(
199201object WifiEntry {
200202 val wifiEntryClass: Class <* > = classLoader.loadClass(" $wifitrackerlib .WifiEntry" )
201203
204+ // TODO: check inline in SystemUI
202205 val getWifiInfoDescription = wifiEntryClass.findDeclaredMethod(" getWifiInfoDescription" )
203206
204207 private const val CONNECTED_STATE_CONNECTED = 2
@@ -220,6 +223,11 @@ object WifiEntry {
220223 append(" standard=${mWifiInfo.wifiStandard} " )
221224 append(" , " )
222225 append(" rssi=$rssi \u202F dBm" )
226+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .S ) {
227+ append(" , " )
228+ // append("securityType=")
229+ append(securityTypeToString(currentSecurityType))
230+ }
223231 }
224232 }
225233 }
@@ -232,6 +240,40 @@ object WifiEntry {
232240 val getConnectedState = wifiEntryClass.findDeclaredMethod(" getConnectedState" )
233241
234242 val mWifiInfoField = wifiEntryClass.findDeclaredField(" mWifiInfo" )
243+
244+
245+ @Suppress(" DEPRECATION" )
246+ val getSecurityTypeNameMethod = WifiConfiguration ::class .java.getDeclaredMethod(" getSecurityTypeName" , Int ::class .java)
247+
248+ @Suppress(" DEPRECATION" )
249+ val WifiConfigurationFields = HiddenApiBypass .getStaticFields(WifiConfiguration ::class .java);
250+
251+ val SECURITY_TYPE_PASSPOINT_R1_R2 = WifiConfigurationFields .first { it.name == " SECURITY_TYPE_PASSPOINT_R1_R2" }.getInt(null )
252+ val SECURITY_TYPE_PASSPOINT_R3 = WifiConfigurationFields .first { it.name == " SECURITY_TYPE_PASSPOINT_R3" }.getInt(null )
253+
254+ @Suppress(" DEPRECATION" )
255+ fun convertWifiConfigurationSecurityTypeBack (/* @WifiInfo.SecurityType */ wifiInfoSecurity : Int ): /* @WifiAnnotations .SecurityType */ Int =
256+ when (wifiInfoSecurity) {
257+ WifiInfo .SECURITY_TYPE_OPEN -> WifiConfiguration .SECURITY_TYPE_OPEN
258+ WifiInfo .SECURITY_TYPE_WEP -> WifiConfiguration .SECURITY_TYPE_WEP
259+ WifiInfo .SECURITY_TYPE_PSK -> WifiConfiguration .SECURITY_TYPE_PSK
260+ WifiInfo .SECURITY_TYPE_EAP -> WifiConfiguration .SECURITY_TYPE_EAP
261+ WifiInfo .SECURITY_TYPE_SAE -> WifiConfiguration .SECURITY_TYPE_SAE
262+ WifiInfo .SECURITY_TYPE_OWE -> WifiConfiguration .SECURITY_TYPE_OWE
263+ WifiInfo .SECURITY_TYPE_WAPI_PSK -> WifiConfiguration .SECURITY_TYPE_WAPI_PSK
264+ WifiInfo .SECURITY_TYPE_WAPI_CERT -> WifiConfiguration .SECURITY_TYPE_WAPI_CERT
265+ WifiInfo .SECURITY_TYPE_EAP_WPA3_ENTERPRISE -> WifiConfiguration .SECURITY_TYPE_EAP_WPA3_ENTERPRISE
266+ WifiInfo .SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT -> WifiConfiguration .SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT
267+ WifiInfo .SECURITY_TYPE_PASSPOINT_R1_R2 -> SECURITY_TYPE_PASSPOINT_R1_R2
268+ WifiInfo .SECURITY_TYPE_PASSPOINT_R3 -> SECURITY_TYPE_PASSPOINT_R3
269+ WifiInfo .SECURITY_TYPE_DPP -> WifiConfiguration .SECURITY_TYPE_DPP
270+ else -> WifiInfo .SECURITY_TYPE_UNKNOWN
271+ }
272+
273+
274+ fun securityTypeToString (type : Int ): String {
275+ return getSecurityTypeNameMethod(null , convertWifiConfigurationSecurityTypeBack(type)) as String
276+ }
235277}
236278
237279object StandardWifiEntry {
@@ -243,25 +285,33 @@ object StandardWifiEntry {
243285 val mTargetScanResults = mTargetScanResultsField[wifiEntry] as ArrayList <ScanResult >
244286 val mWifiInfo = mWifiInfoField[wifiEntry] as WifiInfo ?
245287 if (mTargetScanResults.isEmpty()) return " "
246- return mTargetScanResults.sortedBy { it.frequency }.joinToString(" ,\n " , " [" , " ]" ) {
288+ return mTargetScanResults.sortedBy { it.frequency }.joinToString(" ,\n " , " [" , " ]" ) { scanResult ->
247289 buildString {
248290 append(" {" )
249- append(it .BSSID )
250- if (mWifiInfo != null && mWifiInfo.bssid == it .BSSID ) {
291+ append(scanResult .BSSID )
292+ if (mWifiInfo != null && mWifiInfo.bssid == scanResult .BSSID ) {
251293 append(" *" )
252294 }
253295 append(" , " )
254296
255- append(it .frequency)
297+ append(scanResult .frequency)
256298 append(" \u202F MHz" )
257- channelMap[it .frequency]?.let {
299+ channelMap[scanResult .frequency]?.let {
258300 append(" \u202F ($it )" )
259301 }
260302 append(" , " )
261303
262- append(it .level)
304+ append(scanResult .level)
263305 append(" \u202F dBm" )
264306
307+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU ) {
308+ append(" , " )
309+ // append("securityType=")
310+ append(" [" )
311+ append(scanResult.securityTypes.joinToString { WifiEntry .securityTypeToString(it) })
312+ append(" ]" )
313+ }
314+
265315 // removed: WiFi-Standard
266316 // removed: WiFi 11BE info: mldMac, linkId, addLinks
267317 // removed: age in seconds
0 commit comments