WifiSettings überarbeitet, kleine fixes
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / fragments / WifiSettings.java
index 615d7badad4acf4424709fbe9d7cf748436f6ba4..ae5d8e0a1aa6e85bf3ddf30d9d451f305ebd1ec5 100644 (file)
@@ -78,47 +78,13 @@ public class WifiSettings extends CampusAppFragment {
         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() {
@@ -139,7 +105,17 @@ public class WifiSettings extends CampusAppFragment {
         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() {
@@ -238,10 +214,10 @@ public class WifiSettings extends CampusAppFragment {
         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;
 
@@ -255,54 +231,17 @@ public class WifiSettings extends CampusAppFragment {
         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();
     }
 
@@ -331,21 +270,47 @@ public class WifiSettings extends CampusAppFragment {
         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);
@@ -406,7 +371,6 @@ public class WifiSettings extends CampusAppFragment {
 
                if (username.length() > 0 && password.length() > 0) {
                     if(settings != null) {
-                        settings.isTryConnecting = true;
                         settings.setAuthData(username, password);
 
                         wifiConfigManager.connect(settings);