Remove 2 unnecessary wi-fi permissions; thread configuration and wait for wi-fi to enable

git-svn-id: https://zxing.googlecode.com/svn/trunk@1947 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
srowen 2011-09-30 05:20:44 +00:00
parent 8d594c783d
commit 468ec159b8
2 changed files with 55 additions and 23 deletions

View file

@ -167,14 +167,10 @@ versionName is 2.31, 2.4, or 3.0. -->
android:permissionGroup="com.google.zxing.client.android.SHARE_PERMISSIONS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:permissionGroup="com.google.zxing.client.android.SHARE_PERMISSIONS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"
android:permissionGroup="com.google.zxing.client.android.WIFI_PERMISSIONS"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"
android:permissionGroup="com.google.zxing.client.android.WIFI_PERMISSIONS"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"
android:permissionGroup="com.google.zxing.client.android.WIFI_PERMISSIONS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"
android:permissionGroup="com.google.zxing.client.android.WIFI_PERMISSIONS"/>
<uses-permission android:name="android.permission.WAKE_LOCK"
android:permissionGroup="com.google.zxing.client.android.WIFI_PERMISSIONS"/>
</manifest>

View file

@ -18,6 +18,7 @@ package com.google.zxing.client.android.wifi;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.util.Log;
import java.util.List;
import java.util.regex.Pattern;
@ -28,17 +29,44 @@ import java.util.regex.Pattern;
*/
public final class WifiConfigManager {
private static final String TAG = WifiConfigManager.class.getSimpleName();
private static final Pattern HEX_DIGITS = Pattern.compile("[0-9A-Fa-f]+");
private WifiConfigManager() {
}
public static void configure(WifiManager wifiManager, String ssid, String password, String networkTypeString) {
public static void configure(final WifiManager wifiManager,
final String ssid,
final String password,
final String networkTypeString) {
Runnable configureRunnable = new Runnable() {
public void run() {
// Start WiFi, otherwise nothing will work
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
Log.i(TAG, "Enabling wi-fi...");
if (wifiManager.setWifiEnabled(true)) {
Log.i(TAG, "Wi-fi enabled");
} else {
Log.w(TAG, "Wi-fi could not be enabled!");
return;
}
// This happens very quickly, but need to wait for it to enable. A little busy wait?
int count = 0;
while (!wifiManager.isWifiEnabled()) {
if (count >= 10) {
Log.i(TAG, "Took too long to enable wi-fi, quitting");
return;
}
Log.i(TAG, "Still waiting for wi-fi to enable...");
try {
Thread.sleep(1000L);
} catch (InterruptedException ie) {
// continue
}
count++;
}
}
NetworkType networkType = NetworkType.forIntentValue(networkTypeString);
if (networkType == NetworkType.NO_PASSWORD) {
changeNetworkUnEncrypted(wifiManager, ssid);
@ -53,6 +81,9 @@ public final class WifiConfigManager {
}
}
}
};
new Thread(configureRunnable).start();
}
/**
* Update the network: either create a new network or modify an existing network
@ -62,6 +93,7 @@ public final class WifiConfigManager {
private static void updateNetwork(WifiManager wifiManager, WifiConfiguration config) {
Integer foundNetworkID = findNetworkInExistingConfig(wifiManager, config.SSID);
if (foundNetworkID != null) {
Log.i(TAG, "Removing old configuration for network " + config.SSID);
wifiManager.removeNetwork(foundNetworkID);
wifiManager.saveConfiguration();
}
@ -69,8 +101,12 @@ public final class WifiConfigManager {
if (networkId >= 0) {
// Try to disable the current network and start a new one.
if (wifiManager.enableNetwork(networkId, true)) {
wifiManager.reassociate();
Log.i(TAG, "Associating to network " + config.SSID);
} else {
Log.w(TAG, "Failed to enable network " + config.SSID);
}
} else {
Log.w(TAG, "Unable to add network " + config.SSID);
}
}