alpha 0.0.1
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / fragments / WifiSettings.java
index a9bd972e6f71527e980944b9203d86b6379cdc27..1ce70019a32a47e44d283259d6e0685076a9cee4 100644 (file)
@@ -12,6 +12,7 @@ import android.content.res.Resources;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 import android.net.wifi.ScanResult;
+import android.net.wifi.SupplicantState;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiEnterpriseConfig;
 import android.net.wifi.WifiInfo;
@@ -44,6 +45,8 @@ import de.dhbwloe.campusapp.CampusAppContext;
 import de.dhbwloe.campusapp.CampusAppFragment;
 import de.dhbwloe.campusapp.R;
 import de.dhbwloe.campusapp.search.SearchIndices;
+import de.dhbwloe.campusapp.wifi.WifiConfigurationManager;
+import de.dhbwloe.campusapp.wifi.WifiNetworkSettings;
 
 /**
  * A simple {@link Fragment} subclass.
@@ -62,88 +65,56 @@ public class WifiSettings extends CampusAppFragment {
         };
     }
 
-    private enum WifiNetworkAuthenticationTypes {
-        WIFI_AUTHTYPE_NONE,
-        WIFI_AUTHTYPE_WEP,
-        WIFI_AUTHTYPE_WPA,
-        WIFI_AUTHTYPE_WPA_ENTERPRISE,
-    };
-
-    private class WifiNetworkSettingsSet {
-        String name;
-        String ssid;
-        WifiNetworkAuthenticationTypes authType;
-        int[] authAlgorithms;
-        int eapMethod;
-        int phase2Method;
-
-        String caCertStr;
-        String caName;
-
-        String usernameSuffix;
-        String username;
-        String password;
-
-        TabLayout.Tab tab;
-        boolean isInScanResult = false;
-
-        public WifiNetworkSettingsSet(String name, String ssid, WifiNetworkAuthenticationTypes authType) {
-            this.name = name;
-            this.ssid = ssid;
-            this.authType = authType;
-        }
-
-        public WifiNetworkSettingsSet setWpaEnterprise(int[] authAlgorithms, int eapMethod, int phase2Method, String username) {
-            this.authAlgorithms = authAlgorithms;
-            this.eapMethod = eapMethod;
-            this.phase2Method = phase2Method;
-            this.username = username;
-            return this;
-        }
-
-        public WifiNetworkSettingsSet setPassword(String password) {
-            this.password = password;
-            return this;
-        }
-
-        public WifiNetworkSettingsSet setCACertificate(String caname, String certificate) {
-            this.caName = caname;
-            this.caCertStr = certificate;
-            return this;
-        }
-
-        public WifiNetworkSettingsSet setUserSuffix(String suffix) {
-            this.usernameSuffix = suffix;
-            return this;
-        }
-
-        public void setAuthData(String username, String password) {
-            this.username = username;
-            this.password = password;
-        }
-
-        public void setAuthData(String password) {
-            this.password = password;
-        }
-
-        public X509Certificate generateCertificate() throws CertificateException, IOException {
-            byte[] decoded = Base64.decode(caCertStr.replaceAll("-----BEGIN CERTIFICATE-----", "").replaceAll("-----END CERTIFICATE-----", ""), Base64.DEFAULT);
-            return (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(new ByteArrayInputStream(decoded));
-        }
-    }
-
     private View view;
     private TabLayout tablayout;
-    private WifiNetworkSettingsSet[] wifiPresets;
+    private WifiNetworkSettings[] wifiPresets;
     private WifiManager wifiManager;
+    private WifiConfigurationManager wifiConfigManager;
     private ConnectivityManager connectivityManager;
     private int selectedNetworkIndex = 0;
     private boolean networkScanned = false;
     private BroadcastReceiver wifiStateReceiver = new BroadcastReceiver() {
         @Override
-        public void onReceive(Context arg0, Intent arg1) {
-            NetworkInfo networkInfo = (NetworkInfo) arg1.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
-            if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
+        public void onReceive(Context arg0, Intent intent) {
+            String action  = intent.getAction();
+            if(action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)){
+                WifiInfo myWifiInfo = wifiManager.getConnectionInfo();
+
+                WifiNetworkSettings settings = null;
+                for(int i = 0; i < wifiPresets.length; i++) {
+                    if(wifiPresets[i].getSSID().equalsIgnoreCase(myWifiInfo.getSSID())) {
+                        settings = wifiPresets[i];
+                        break;
+                    }
+                }
+
+                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();
+            }
+
+            NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
+            if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
                 updateWifiState();
             }
         }
@@ -155,120 +126,18 @@ public class WifiSettings extends CampusAppFragment {
         }
     };
 
-    private void loadDhbwWifiDefinitions() {
-        int numOfNetworks = 3;
-        int i = 0;
-        wifiPresets = new WifiNetworkSettingsSet[numOfNetworks];
-
-        wifiPresets[i++] = (new WifiNetworkSettingsSet("dhbw-secure", "dhbw-secure", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE)).
-                setWpaEnterprise(
-                        new int[] {WifiConfiguration.KeyMgmt.WPA_EAP, WifiConfiguration.KeyMgmt.IEEE8021X},
-                        WifiEnterpriseConfig.Eap.PEAP,
-                        WifiEnterpriseConfig.Phase2.MSCHAPV2,
-                        null
-                ).setCACertificate("Deutsche Telekom Root CA 2", "-----BEGIN CERTIFICATE-----\n" +
-                "MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc\n" +
-                "MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj\n" +
-                "IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB\n" +
-                "IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE\n" +
-                "RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl\n" +
-                "U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290\n" +
-                "IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU\n" +
-                "ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC\n" +
-                "QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr\n" +
-                "rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S\n" +
-                "NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc\n" +
-                "QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH\n" +
-                "txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP\n" +
-                "BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC\n" +
-                "AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp\n" +
-                "tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa\n" +
-                "IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl\n" +
-                "6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+\n" +
-                "xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU\n" +
-                "Cm26OWMohpLzGITY+9HPBVZkVw==\n" +
-                "-----END CERTIFICATE-----");
-
-        wifiPresets[i++] = (new WifiNetworkSettingsSet("dhbw-wlan", "dhbw-wlan", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_NONE));
-
-        wifiPresets[i++] = (new WifiNetworkSettingsSet("eduroam", "eduroam", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE)).
-                setWpaEnterprise(
-                        new int[] {WifiConfiguration.KeyMgmt.WPA_EAP, WifiConfiguration.KeyMgmt.IEEE8021X},
-                        WifiEnterpriseConfig.Eap.PEAP,
-                        WifiEnterpriseConfig.Phase2.MSCHAPV2,
-                        null
-                ).setCACertificate("Deutsche Telekom Root CA 2", "-----BEGIN CERTIFICATE-----\n" +
-                "MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc\n" +
-                "MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj\n" +
-                "IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB\n" +
-                "IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE\n" +
-                "RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl\n" +
-                "U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290\n" +
-                "IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU\n" +
-                "ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC\n" +
-                "QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr\n" +
-                "rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S\n" +
-                "NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc\n" +
-                "QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH\n" +
-                "txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP\n" +
-                "BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC\n" +
-                "AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp\n" +
-                "tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa\n" +
-                "IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl\n" +
-                "6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+\n" +
-                "xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU\n" +
-                "Cm26OWMohpLzGITY+9HPBVZkVw==\n" +
-                "-----END CERTIFICATE-----").
-                setUserSuffix("@dhbw-loerrach.de");
-    }
-
-
-    @TargetApi(18)
-    private void connectToWiFi(WifiNetworkSettingsSet settings) {
-        WifiConfiguration wifiConfig = new WifiConfiguration();
-        wifiConfig.SSID = settings.ssid;
-        for(int i = 0; i < settings.authAlgorithms.length; i++)
-            wifiConfig.allowedKeyManagement.set(settings.authAlgorithms[i]);
-
-        switch(settings.authType) {
-            case WIFI_AUTHTYPE_NONE:
-                break;
-            case WIFI_AUTHTYPE_WEP:
-                // not supported by our app
-                break;
-            case WIFI_AUTHTYPE_WPA:
-
-                break;
-            case WIFI_AUTHTYPE_WPA_ENTERPRISE:
-                WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
-                String username = settings.username;
-                if(settings.usernameSuffix != null)
-                    username += settings.usernameSuffix;
-                enterpriseConfig.setIdentity(username);
-                enterpriseConfig.setPassword(settings.password);
-                enterpriseConfig.setEapMethod(settings.eapMethod);
-                enterpriseConfig.setPhase2Method(settings.phase2Method);
-                try {
-                    enterpriseConfig.setCaCertificate(settings.generateCertificate());
-                } catch (CertificateException e) {
-                } catch (IOException e) {
-                }
-                wifiConfig.enterpriseConfig = enterpriseConfig;
-                break;
-        }
-        int networkId = wifiManager.addNetwork(wifiConfig);
-        wifiManager.enableNetwork(networkId, true);
-    }
-
-
 
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        loadDhbwWifiDefinitions();
+
+        wifiPresets = WifiNetworkSettings.LoadNetworkSettingPresets(AppContext);
+
         wifiManager = (WifiManager)AppContext.getMainActivity().getSystemService(AppContext.getMainActivity().WIFI_SERVICE);
         connectivityManager = (ConnectivityManager) AppContext.getMainActivity().getSystemService(Activity.CONNECTIVITY_SERVICE);
+
+        wifiConfigManager = new WifiConfigurationManager(wifiManager);
     }
 
     private void updateSelectedNetworkInformation() {
@@ -277,7 +146,7 @@ public class WifiSettings extends CampusAppFragment {
         if(selectedNetworkIndex >= wifiPresets.length)
             return;
 
-        WifiNetworkSettingsSet settings = wifiPresets[selectedNetworkIndex];
+        WifiNetworkSettings settings = wifiPresets[selectedNetworkIndex];
         TextView ssidInfoView = (TextView) view.findViewById(R.id.ssidInfo);
         TextView securityInfoView = (TextView) view.findViewById(R.id.securityInfo);
         TextView eapInfoView = (TextView) view.findViewById(R.id.eapInfo);
@@ -292,7 +161,7 @@ public class WifiSettings extends CampusAppFragment {
         RelativeLayout insecureNetWarning = (RelativeLayout) view.findViewById(R.id.insecureNetWarning);
 
 
-        ssidInfoView.setText(settings.ssid);
+        ssidInfoView.setText(settings.getSSID());
 
         eapInfoRow.setVisibility(View.GONE);
         phase2InfoRow.setVisibility(View.GONE);
@@ -300,7 +169,7 @@ public class WifiSettings extends CampusAppFragment {
         pskInfoRow.setVisibility(View.GONE);
         insecureNetWarning.setVisibility(View.GONE);
 
-        switch(settings.authType) {
+        switch(settings.getAuthType()) {
             case WIFI_AUTHTYPE_NONE:
                 securityInfoView.setText(R.string.wifiopts_security_open);
 
@@ -325,9 +194,9 @@ public class WifiSettings extends CampusAppFragment {
                 break;
         }
 
-        if(settings.authType == WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE) {
+        if(settings.getAuthType() == WifiNetworkSettings.WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE) {
             int eapStringId = 0;
-            switch(settings.eapMethod) {
+            switch(settings.getEapMethod()) {
                 case WifiEnterpriseConfig.Eap.PEAP:
                     eapStringId = R.string.wifiopts_eap_peap;
                     break;
@@ -347,7 +216,7 @@ public class WifiSettings extends CampusAppFragment {
                 eapInfoView.setText("");
 
             int phase2StringId = 0;
-            switch(settings.phase2Method) {
+            switch(settings.getPhase2Method()) {
                 case WifiEnterpriseConfig.Phase2.MSCHAPV2:
                     phase2StringId = R.string.wifiopts_phase2_mschapv2;
                     break;
@@ -360,7 +229,7 @@ public class WifiSettings extends CampusAppFragment {
             else
                 phase2InfoView.setText("");
 
-            cacertInfoView.setText(settings.caName);
+            cacertInfoView.setText(settings.getCAName());
         } else {
 
         }
@@ -370,15 +239,62 @@ public class WifiSettings extends CampusAppFragment {
     private void updateWifiState() {
         NetworkInfo myNetworkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
         WifiInfo myWifiInfo = wifiManager.getConnectionInfo();
+        String ssid = (myWifiInfo != null ? myWifiInfo.getSSID() : null);
+        if(ssid == null)
+            return;
+
+        WifiNetworkSettings settings = null;
+        for(int i = 0; i < wifiPresets.length; i++) {
+            if(wifiPresets[i].getSSID().equalsIgnoreCase(ssid)) {
+                settings = wifiPresets[i];
+                break;
+            }
+        }
+        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);
 
-            String ssid = myWifiInfo.getSSID();
 
+            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);
         }
@@ -394,7 +310,7 @@ public class WifiSettings extends CampusAppFragment {
         for(int i = 0; i < wifiPresets.length; i++) {
             boolean networkFound = false;
             for(ScanResult result : scanResultList) {
-                if(result.SSID != null && result.SSID.equalsIgnoreCase(wifiPresets[i].ssid)) {
+                if(result.SSID != null && result.SSID.equalsIgnoreCase(wifiPresets[i].getSSID())) {
                     networkFound = true;
                     break;
                 }
@@ -407,7 +323,7 @@ public class WifiSettings extends CampusAppFragment {
     private void updateWifiConnectButton() {
         if(selectedNetworkIndex >= wifiPresets.length)
             return;
-        WifiNetworkSettingsSet preset = wifiPresets[selectedNetworkIndex];
+        WifiNetworkSettings preset = wifiPresets[selectedNetworkIndex];
 
         boolean buttonEnabled = false;
         int buttonTextId = 0;
@@ -416,8 +332,10 @@ public class WifiSettings extends CampusAppFragment {
 
         if(!wifiManager.isWifiEnabled()) {
             buttonTextId = R.string.wifisettings_connect_button_disabled;
-        } else if(networkInfo.isConnectedOrConnecting() && wifiInfo.getSSID() != null && wifiInfo.getSSID().equalsIgnoreCase(preset.ssid)) {
+        } else if(networkInfo.isConnectedOrConnecting() && wifiInfo.getSSID() != null && wifiInfo.getSSID().equalsIgnoreCase(preset.getSSID())) {
             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) {
@@ -445,7 +363,7 @@ public class WifiSettings extends CampusAppFragment {
         tablayout.removeAllTabs();
         for(int i = 0; i < wifiPresets.length; i++) {
             TabLayout.Tab tab = tablayout.newTab();
-            tab.setText(wifiPresets[i].name);
+            tab.setText(wifiPresets[i].getName());
             tablayout.addTab(tab);
         }
         tablayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@@ -468,9 +386,7 @@ public class WifiSettings extends CampusAppFragment {
         connectBtn.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                Button connectBtn = (Button) v;
-                connectBtn.setEnabled(false);
-                WifiNetworkSettingsSet settings = wifiPresets[selectedNetworkIndex];
+                WifiNetworkSettings settings = wifiPresets[selectedNetworkIndex];
                 if(!settings.isInScanResult) {
                     networkScanned = false;
                     wifiManager.startScan();
@@ -478,24 +394,24 @@ public class WifiSettings extends CampusAppFragment {
                     return;
                 }
 
+
+
                 EditText usernameEdt = (EditText) view.findViewById(R.id.wifiUsername);
                 EditText passwordEdt = (EditText) view.findViewById(R.id.wifiPassword);
 
                 String username = usernameEdt.getText().toString();
                 String password = passwordEdt.getText().toString();
 
-                if (Build.VERSION.SDK_INT < 18) {
-                    // connectToDHWiFi not supported!
-                    // do something else?
-                } else if (username.length() > 0 && password.length() > 0) {
-
+               if (username.length() > 0 && password.length() > 0) {
                     if(settings != null) {
+                        settings.isTryConnecting = true;
                         settings.setAuthData(username, password);
-                        connectToWiFi(settings);
+
+                        wifiConfigManager.connect(settings);
                     }
-                }
 
-                connectBtn.setEnabled(true);
+                   updateWifiConnectButton();
+                }
             }
         });
 
@@ -512,7 +428,10 @@ public class WifiSettings extends CampusAppFragment {
         if(AppContext == null)
             AppContext = CampusAppContext.getInstance();
 
-        AppContext.getMainActivity().registerReceiver(this.wifiStateReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
+        filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
+        AppContext.getMainActivity().registerReceiver(this.wifiStateReceiver, new IntentFilter(filter));
         AppContext.getMainActivity().registerReceiver(this.wifiScanReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
 
         networkScanned = false;