diff options
| author | srowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57> | 2012-08-06 16:07:52 +0400 |
|---|---|---|
| committer | srowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57> | 2012-08-06 16:07:52 +0400 |
| commit | 4d30f375d4ccf25a32890e016992f8bc6fa8b047 (patch) | |
| tree | 8d4d7e9248989a34753c6d54bfc262ef6c3acee9 | |
| parent | ccf72ee2161b6e611d2c1a65bd0c35cd5a19eb4d (diff) | |
| download | zxing-android-embedded-4d30f375d4ccf25a32890e016992f8bc6fa8b047.tar.xz | |
Issue 1218 add possible support for hidden SSIDs
git-svn-id: http://zxing.googlecode.com/svn/trunk/android@2371 59b500cc-1b3d-0410-9834-0bbf25fbcc57
| -rw-r--r-- | src/com/google/zxing/client/android/result/WifiResultHandler.java | 11 | ||||
| -rw-r--r-- | src/com/google/zxing/client/android/wifi/WifiConfigManager.java | 36 |
2 files changed, 23 insertions, 24 deletions
diff --git a/src/com/google/zxing/client/android/result/WifiResultHandler.java b/src/com/google/zxing/client/android/result/WifiResultHandler.java index 169b4a9e..7f19d31c 100644 --- a/src/com/google/zxing/client/android/result/WifiResultHandler.java +++ b/src/com/google/zxing/client/android/result/WifiResultHandler.java @@ -28,7 +28,8 @@ import com.google.zxing.client.result.WifiParsedResult; /** * Handles address book entries. * - * @author viki@google.com (Vikram Aggarwal) + * @author Vikram Aggarwal + * @author Sean Owen */ public final class WifiResultHandler extends ResultHandler { @@ -52,15 +53,11 @@ public final class WifiResultHandler extends ResultHandler { @Override public void handleButtonPress(int index) { - // Get the underlying wifi config - WifiParsedResult wifiResult = (WifiParsedResult) getResult(); if (index == 0) { - String ssid = wifiResult.getSsid(); - String password = wifiResult.getPassword(); - String networkType = wifiResult.getNetworkEncryption(); + WifiParsedResult wifiResult = (WifiParsedResult) getResult(); WifiManager wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE); Toast.makeText(getActivity(), R.string.wifi_changing_network, Toast.LENGTH_LONG).show(); - WifiConfigManager.configure(wifiManager, ssid, password, networkType); + WifiConfigManager.configure(wifiManager, wifiResult); parent.restartPreviewAfterDelay(0L); } } diff --git a/src/com/google/zxing/client/android/wifi/WifiConfigManager.java b/src/com/google/zxing/client/android/wifi/WifiConfigManager.java index f8bf1069..c928fb27 100644 --- a/src/com/google/zxing/client/android/wifi/WifiConfigManager.java +++ b/src/com/google/zxing/client/android/wifi/WifiConfigManager.java @@ -23,6 +23,8 @@ import android.util.Log; import java.util.List; import java.util.regex.Pattern; +import com.google.zxing.client.result.WifiParsedResult; + /** * @author Vikram Aggarwal * @author Sean Owen @@ -36,10 +38,7 @@ public final class WifiConfigManager { private WifiConfigManager() { } - public static void configure(final WifiManager wifiManager, - final String ssid, - final String password, - final String networkTypeString) { + public static void configure(final WifiManager wifiManager, final WifiParsedResult wifiResult) { Runnable configureRunnable = new Runnable() { @Override public void run() { @@ -68,6 +67,7 @@ public final class WifiConfigManager { count++; } } + String networkTypeString = wifiResult.getNetworkEncryption(); NetworkType networkType; try { networkType = NetworkType.forIntentValue(networkTypeString); @@ -76,15 +76,16 @@ public final class WifiConfigManager { return; } if (networkType == NetworkType.NO_PASSWORD) { - changeNetworkUnEncrypted(wifiManager, ssid); + changeNetworkUnEncrypted(wifiManager, wifiResult); } else { + String password = wifiResult.getPassword(); if (password == null || password.length() == 0) { throw new IllegalArgumentException(); } if (networkType == NetworkType.WEP) { - changeNetworkWEP(wifiManager, ssid, password); + changeNetworkWEP(wifiManager, wifiResult); } else if (networkType == NetworkType.WPA) { - changeNetworkWPA(wifiManager, ssid, password); + changeNetworkWPA(wifiManager, wifiResult); } } } @@ -118,7 +119,7 @@ public final class WifiConfigManager { } } - private static WifiConfiguration changeNetworkCommon(String ssid) { + private static WifiConfiguration changeNetworkCommon(WifiParsedResult wifiResult) { WifiConfiguration config = new WifiConfiguration(); config.allowedAuthAlgorithms.clear(); config.allowedGroupCiphers.clear(); @@ -126,14 +127,15 @@ public final class WifiConfigManager { config.allowedPairwiseCiphers.clear(); config.allowedProtocols.clear(); // Android API insists that an ascii SSID must be quoted to be correctly handled. - config.SSID = quoteNonHex(ssid); + config.SSID = quoteNonHex(wifiResult.getSsid()); + config.hiddenSSID = wifiResult.isHidden(); return config; } // Adding a WEP network - private static void changeNetworkWEP(WifiManager wifiManager, String ssid, String password) { - WifiConfiguration config = changeNetworkCommon(ssid); - config.wepKeys[0] = quoteNonHex(password, 10, 26, 58); + private static void changeNetworkWEP(WifiManager wifiManager, WifiParsedResult wifiResult) { + WifiConfiguration config = changeNetworkCommon(wifiResult); + config.wepKeys[0] = quoteNonHex(wifiResult.getPassword(), 10, 26, 58); config.wepTxKeyIndex = 0; config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); @@ -145,10 +147,10 @@ public final class WifiConfigManager { } // Adding a WPA or WPA2 network - private static void changeNetworkWPA(WifiManager wifiManager, String ssid, String password) { - WifiConfiguration config = changeNetworkCommon(ssid); + private static void changeNetworkWPA(WifiManager wifiManager, WifiParsedResult wifiResult) { + WifiConfiguration config = changeNetworkCommon(wifiResult); // Hex passwords that are 64 bits long are not to be quoted. - config.preSharedKey = quoteNonHex(password, 64); + config.preSharedKey = quoteNonHex(wifiResult.getPassword(), 64); config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); config.allowedProtocols.set(WifiConfiguration.Protocol.WPA); // For WPA config.allowedProtocols.set(WifiConfiguration.Protocol.RSN); // For WPA2 @@ -162,8 +164,8 @@ public final class WifiConfigManager { } // Adding an open, unsecured network - private static void changeNetworkUnEncrypted(WifiManager wifiManager, String ssid) { - WifiConfiguration config = changeNetworkCommon(ssid); + private static void changeNetworkUnEncrypted(WifiManager wifiManager, WifiParsedResult wifiResult) { + WifiConfiguration config = changeNetworkCommon(wifiResult); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); updateNetwork(wifiManager, config); } |
