1
1
package de.binarynoise.betterVerboseWiFiLogging
2
2
3
3
import android.net.wifi.ScanResult
4
+ import android.net.wifi.WifiConfiguration
4
5
import android.net.wifi.WifiInfo
5
6
import android.os.Build
6
7
import de.binarynoise.betterVerboseWiFiLogging.WifiEntry.mWifiInfoField
7
8
import de.binarynoise.betterVerboseWiFiLogging.Wrapper.classLoader
8
9
import de.binarynoise.reflection.findDeclaredField
9
10
import de.binarynoise.reflection.findDeclaredMethod
11
+ import org.lsposed.hiddenapibypass.HiddenApiBypass
10
12
11
13
const val wifitrackerlib = " com.android.wifitrackerlib"
12
14
@@ -199,6 +201,7 @@ val channelMap = mapOf(
199
201
object WifiEntry {
200
202
val wifiEntryClass: Class <* > = classLoader.loadClass(" $wifitrackerlib .WifiEntry" )
201
203
204
+ // TODO: check inline in SystemUI
202
205
val getWifiInfoDescription = wifiEntryClass.findDeclaredMethod(" getWifiInfoDescription" )
203
206
204
207
private const val CONNECTED_STATE_CONNECTED = 2
@@ -220,6 +223,11 @@ object WifiEntry {
220
223
append(" standard=${mWifiInfo.wifiStandard} " )
221
224
append(" , " )
222
225
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
+ }
223
231
}
224
232
}
225
233
}
@@ -232,6 +240,40 @@ object WifiEntry {
232
240
val getConnectedState = wifiEntryClass.findDeclaredMethod(" getConnectedState" )
233
241
234
242
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
+ }
235
277
}
236
278
237
279
object StandardWifiEntry {
@@ -243,25 +285,33 @@ object StandardWifiEntry {
243
285
val mTargetScanResults = mTargetScanResultsField[wifiEntry] as ArrayList <ScanResult >
244
286
val mWifiInfo = mWifiInfoField[wifiEntry] as WifiInfo ?
245
287
if (mTargetScanResults.isEmpty()) return " "
246
- return mTargetScanResults.sortedBy { it.frequency }.joinToString(" ,\n " , " [" , " ]" ) {
288
+ return mTargetScanResults.sortedBy { it.frequency }.joinToString(" ,\n " , " [" , " ]" ) { scanResult ->
247
289
buildString {
248
290
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 ) {
251
293
append(" *" )
252
294
}
253
295
append(" , " )
254
296
255
- append(it .frequency)
297
+ append(scanResult .frequency)
256
298
append(" \u202F MHz" )
257
- channelMap[it .frequency]?.let {
299
+ channelMap[scanResult .frequency]?.let {
258
300
append(" \u202F ($it )" )
259
301
}
260
302
append(" , " )
261
303
262
- append(it .level)
304
+ append(scanResult .level)
263
305
append(" \u202F dBm" )
264
306
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
+
265
315
// removed: WiFi-Standard
266
316
// removed: WiFi 11BE info: mldMac, linkId, addLinks
267
317
// removed: age in seconds
0 commit comments