OSDN Git Service

Fix can't share WEP Wi-Fi network via Wi-Fi QR code generator
authorArc Wang <arcwang@google.com>
Tue, 9 Apr 2019 09:46:08 +0000 (17:46 +0800)
committerArc Wang <arcwang@google.com>
Wed, 10 Apr 2019 05:59:20 +0000 (13:59 +0800)
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

src/com/android/settings/wifi/dpp/WifiDppUtils.java

index 695de76..98673d4 100644 (file)
@@ -128,18 +128,26 @@ public class WifiDppUtils {
         return intent;
     }
 
-    private static String getPresharedKey(WifiManager wifiManager, WifiConfiguration config) {
-        String preSharedKey = config.preSharedKey;
-
-        final List<WifiConfiguration> wifiConfigs = wifiManager.getPrivilegedConfiguredNetworks();
-        for (WifiConfiguration wifiConfig : wifiConfigs) {
-            if (wifiConfig.networkId == config.networkId) {
-                preSharedKey = wifiConfig.preSharedKey;
-                break;
+    private static String getPresharedKey(WifiManager wifiManager,
+            WifiConfiguration wifiConfiguration) {
+        final List<WifiConfiguration> privilegedWifiConfiguratios =
+                wifiManager.getPrivilegedConfiguredNetworks();
+
+        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);