From 2ef2ed66b6857d6527c44d7a738ef9a282dc7886 Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Tue, 9 Apr 2019 17:46:08 +0800 Subject: [PATCH] Fix can't share WEP Wi-Fi network via Wi-Fi QR code generator For a WEP Wi-Fi network, we should get the password from WifiConfiguration#wepKeys instead of WifiConfiguration#preSharedKey. Bug: 130204717 Test: manual Change-Id: I766a767f3d605c7fbf0b71d263fd111f159c7cde --- .../settings/wifi/dpp/WifiDppUtils.java | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/com/android/settings/wifi/dpp/WifiDppUtils.java b/src/com/android/settings/wifi/dpp/WifiDppUtils.java index 695de76fffb..98673d4911f 100644 --- a/src/com/android/settings/wifi/dpp/WifiDppUtils.java +++ b/src/com/android/settings/wifi/dpp/WifiDppUtils.java @@ -128,18 +128,26 @@ public class WifiDppUtils { return intent; } - private static String getPresharedKey(WifiManager wifiManager, WifiConfiguration config) { - String preSharedKey = config.preSharedKey; + private static String getPresharedKey(WifiManager wifiManager, + WifiConfiguration wifiConfiguration) { + final List privilegedWifiConfiguratios = + wifiManager.getPrivilegedConfiguredNetworks(); - final List wifiConfigs = wifiManager.getPrivilegedConfiguredNetworks(); - for (WifiConfiguration wifiConfig : wifiConfigs) { - if (wifiConfig.networkId == config.networkId) { - preSharedKey = wifiConfig.preSharedKey; - break; + for (WifiConfiguration privilegedWifiConfiguration : privilegedWifiConfiguratios) { + if (privilegedWifiConfiguration.networkId == wifiConfiguration.networkId) { + // WEP uses a shared key hence the AuthAlgorithm.SHARED is used + // to identify it. + if (wifiConfiguration.allowedKeyManagement.get(KeyMgmt.NONE) + && wifiConfiguration.allowedAuthAlgorithms.get( + WifiConfiguration.AuthAlgorithm.SHARED)) { + return privilegedWifiConfiguration + .wepKeys[privilegedWifiConfiguration.wepTxKeyIndex]; + } else { + return privilegedWifiConfiguration.preSharedKey; + } } } - - return preSharedKey; + return wifiConfiguration.preSharedKey; } private static String removeFirstAndLastDoubleQuotes(String str) { @@ -268,14 +276,11 @@ public class WifiDppUtils { WifiConfiguration wifiConfiguration) { final String ssid = removeFirstAndLastDoubleQuotes(wifiConfiguration.SSID); final String security = getSecurityString(wifiConfiguration); - String preSharedKey = wifiConfiguration.preSharedKey; - if (preSharedKey != null) { - // When the value of this key is read, the actual key is not returned, just a "*". - // Call privileged system API to obtain actual key. - preSharedKey = removeFirstAndLastDoubleQuotes(getPresharedKey(wifiManager, - wifiConfiguration)); - } + // When the value of this key is read, the actual key is not returned, just a "*". + // Call privileged system API to obtain actual key. + final String preSharedKey = removeFirstAndLastDoubleQuotes(getPresharedKey(wifiManager, + wifiConfiguration)); if (!TextUtils.isEmpty(ssid)) { intent.putExtra(EXTRA_WIFI_SSID, ssid);