From c5e42b168c5da8ddb943610674d8e8edd72a1ac6 Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 9 Dec 2019 22:13:17 +0800 Subject: [PATCH] Sync QR string generation with AOSP --- .../net/wifi/configuration/WifiConfiguration.kt | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/configuration/WifiConfiguration.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/configuration/WifiConfiguration.kt index db4b46ba..92e96db2 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/configuration/WifiConfiguration.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/configuration/WifiConfiguration.kt @@ -6,6 +6,10 @@ import be.mygod.vpnhotspot.net.wifi.WifiApManager import timber.log.Timber import java.lang.reflect.InvocationTargetException +/** + * WPA2 pre-shared key for use with soft access point + * (requires {@code preSharedKey} to be specified). + */ val WPA2_PSK = WifiConfiguration.KeyMgmt.strings.indexOf("WPA2_PSK") /** @@ -80,21 +84,26 @@ val WifiConfiguration.apKeyManagement get() = allowedKeyManagement.nextSetBit(0) private val qrSanitizer = Regex("([\\\\\":;,])") /** * Documentation: https://github.com/zxing/zxing/wiki/Barcode-Contents#wi-fi-network-config-android-ios-11 + * Based on: https://android.googlesource.com/platform/packages/apps/Settings/+/4a5ff58/src/com/android/settings/wifi/dpp/WifiNetworkConfig.java#161 */ fun WifiConfiguration.toQRString() = StringBuilder("WIFI:").apply { fun String.sanitize() = qrSanitizer.replace(this) { "\\${it.groupValues[1]}" } - var password = true + var password: String? = preSharedKey when (apKeyManagement) { - WifiConfiguration.KeyMgmt.NONE -> password = false + WifiConfiguration.KeyMgmt.NONE -> if (wepKeys != null) { + password = wepKeys[0] + append("T:WEP;") + } WifiConfiguration.KeyMgmt.WPA_PSK, WifiConfiguration.KeyMgmt.WPA_EAP, WPA2_PSK -> append("T:WPA;") + WifiConfiguration.KeyMgmt.SAE -> append("T:SAE;") else -> throw IllegalArgumentException("Unsupported authentication type") } append("S:") append(SSID.sanitize()) append(';') - if (password && preSharedKey != null) { + if (password != null) { append("P:") - append(preSharedKey.sanitize()) + append(password.sanitize()) append(';') } if (hiddenSSID) append("H:true;")