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
This commit is contained in:
Arc Wang
2019-04-09 17:46:08 +08:00
parent 0aa0d665c0
commit 2ef2ed66b6

View File

@@ -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<WifiConfiguration> privilegedWifiConfiguratios =
wifiManager.getPrivilegedConfiguredNetworks();
final List<WifiConfiguration> 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,
final String preSharedKey = removeFirstAndLastDoubleQuotes(getPresharedKey(wifiManager,
wifiConfiguration));
}
if (!TextUtils.isEmpty(ssid)) {
intent.putExtra(EXTRA_WIFI_SSID, ssid);