public void onReceive(Context arg0, Intent intent) {
String action = intent.getAction();
if(action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)){
- WifiInfo myWifiInfo = wifiManager.getConnectionInfo();
+ WifiInfo wifiInfo = wifiManager.getConnectionInfo();
+ SupplicantState wifiState = ((SupplicantState) intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE));
- WifiNetworkSettings settings = null;
- for(int i = 0; i < wifiPresets.length; i++) {
- if(wifiPresets[i].getSSID().equalsIgnoreCase(myWifiInfo.getSSID())) {
- settings = wifiPresets[i];
- break;
- }
- }
-
- if(settings != null) {
- SupplicantState supl_state = ((SupplicantState) intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE));
- switch (supl_state) {
- case ASSOCIATING:
- settings.isAssociating = true;
- settings.isAssociated = false;
- settings.isAuthenticated = false;
- settings.isDisconnected = false;
- break;
- case ASSOCIATED:
- settings.isAssociated = true;
- break;
- case COMPLETED:
- settings.isAuthenticated = true;
- break;
- case DISCONNECTED:
- settings.isAssociated = false;
- settings.isAssociating = false;
- settings.isDisconnected = true;
- break;
- default:
- break;
- }
- updateWifiState();
- }
+ wifiConfigManager.updateWifiState(wifiInfo, wifiState);
}
- NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
- if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
- updateWifiState();
- }
+ updateWifiState();
}
};
private BroadcastReceiver wifiScanReceiver = new BroadcastReceiver() {
wifiManager = (WifiManager)AppContext.getMainActivity().getSystemService(AppContext.getMainActivity().WIFI_SERVICE);
connectivityManager = (ConnectivityManager) AppContext.getMainActivity().getSystemService(Activity.CONNECTIVITY_SERVICE);
- wifiConfigManager = new WifiConfigurationManager(wifiManager);
+ wifiConfigManager = new WifiConfigurationManager(wifiManager, this);
+ }
+
+ public String trimWifiSSID(String ssid) {
+ if(ssid == null)
+ return null;
+ if(ssid.matches("^\"(.*)\"$")) {
+ ssid = ssid.substring(1, ssid.length()-1);
+ }
+
+ return ssid;
}
private void updateSelectedNetworkInformation() {
updateWifiConnectButton();
}
- private void updateWifiState() {
+ public void updateWifiState() {
NetworkInfo myNetworkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
WifiInfo myWifiInfo = wifiManager.getConnectionInfo();
- String ssid = (myWifiInfo != null ? myWifiInfo.getSSID() : null);
+ String ssid = trimWifiSSID(myWifiInfo != null ? myWifiInfo.getSSID() : null);
if(ssid == null)
return;
if(settings == null)
return;
- if(settings.isTryConnecting) {
- boolean success = false;
- if(settings.isDisconnected) {
- settings.failedAuthentication = true;
- settings.isTryConnecting = false;
- } else if(settings.isAssociated) {
- settings.isTryConnecting = false;
- success = true;
- }
- if(!settings.isTryConnecting) {
- // success
- // TODO: continue
- }
- }
-
-
Resources resources = AppContext.getMainActivity().getResources();
String status;
if(myNetworkInfo.isConnectedOrConnecting()) {
int statusId = (myNetworkInfo.isConnected() ? R.string.wifisettings_status_connected : R.string.wifisettings_status_connecting);
-
-
- ssid = ssid.replace("\"", "");
status = String.format(resources.getString(statusId), ssid);
-
-
-
-
- //if(networkConnecting && wifiPresets[connectingNetworkIndex].getSSID().equalsIgnoreCase(ssid)) {
-
- /*
-
- wifiConfigManager.finalizeConnection(wifiPresets[connectingNetworkIndex], myNetworkInfo, myWifiInfo, new WifiConfigurationManager.WifiConfigurationComplete() {
- @Override
- public void onWifiConfigurationComplete(WifiNetworkSettings settings, String response) {
- networkConnecting = false;
- connectingNetworkIndex = 0;
- updateWifiConnectButton();
- }
- });
- */
- //}
} else {
status = resources.getString(R.string.wifisettings_status_disconnected);
}
-
TextView statusTextView = (TextView)view.findViewById(R.id.wifiStatusText);
statusTextView.setText(status);
+
updateWifiConnectButton();
}
int buttonTextId = 0;
NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
+ WifiConfigurationManager.WifiConnectionStatus status = wifiConfigManager.getWifiState(preset);
+ String ssid = trimWifiSSID(wifiInfo != null ? wifiInfo.getSSID() : null);
+
+ Log.i("Wifi", ssid + "|" + preset.getSSID());
if(!wifiManager.isWifiEnabled()) {
buttonTextId = R.string.wifisettings_connect_button_disabled;
- } else if(networkInfo.isConnectedOrConnecting() && wifiInfo.getSSID() != null && wifiInfo.getSSID().equalsIgnoreCase(preset.getSSID())) {
+ } else if(networkInfo.isConnectedOrConnecting() && ssid != null && ssid.equalsIgnoreCase(preset.getSSID()) && status == WifiConfigurationManager.WifiConnectionStatus.WIFISTATE_NULL) {
buttonTextId = R.string.wifisettings_connect_button_ready;
- } else if(preset.isTryConnecting) {
- buttonTextId = R.string.wifisettings_connect_button_connecting;
} else if(!networkScanned) {
buttonTextId = R.string.wifisettings_connect_button_scan;
} else if(!preset.isInScanResult) {
buttonTextId = R.string.wifisettings_connect_button_notfound;
buttonEnabled = true;
} else {
- buttonEnabled = true;
- buttonTextId = R.string.wifisettings_connect_button;
+ buttonTextId = 0;
+ if(status != WifiConfigurationManager.WifiConnectionStatus.WIFISTATE_NULL) {
+ switch (status) {
+ case WIFISTATE_CONNECTING:
+ buttonTextId = R.string.wifisettings_connect_button_connecting;
+ break;
+ case WIFISTATE_AUTHENTICATING:
+ buttonTextId = R.string.wifisettings_connect_button_authenticating;
+ break;
+ case WIFISTATE_CONNECTED:
+ buttonTextId = R.string.wifisettings_connect_button_ready;
+ break;
+ case WIFISTATE_FAILED:
+ buttonTextId = R.string.wifisettings_connect_button_failed;
+ buttonEnabled = true;
+ break;
+ }
+ }
+ if(wifiConfigManager.isLocked(preset) && buttonTextId == 0) {
+ buttonTextId = R.string.wifisettings_connect_button_connecting;
+ }
+
+ if(buttonTextId == 0) {
+ buttonEnabled = true;
+ buttonTextId = R.string.wifisettings_connect_button;
+ }
}
Button connectBtn = (Button) view.findViewById(R.id.wifiConnectBtn);
if (username.length() > 0 && password.length() > 0) {
if(settings != null) {
- settings.isTryConnecting = true;
settings.setAuthData(username, password);
wifiConfigManager.connect(settings);