summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsrowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57>2012-08-06 16:07:52 +0400
committersrowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57>2012-08-06 16:07:52 +0400
commit4d30f375d4ccf25a32890e016992f8bc6fa8b047 (patch)
tree8d4d7e9248989a34753c6d54bfc262ef6c3acee9
parentccf72ee2161b6e611d2c1a65bd0c35cd5a19eb4d (diff)
downloadzxing-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.java11
-rw-r--r--src/com/google/zxing/client/android/wifi/WifiConfigManager.java36
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);
}