added wifi scanner to wifi settings page
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / fragments / WifiSettings.java
1 package de.dhbwloe.campusapp.fragments;
2
3
4 import android.annotation.TargetApi;
5 import android.app.ActionBar;
6 import android.app.Activity;
7 import android.content.BroadcastReceiver;
8 import android.content.Context;
9 import android.content.Intent;
10 import android.content.IntentFilter;
11 import android.content.res.Resources;
12 import android.net.ConnectivityManager;
13 import android.net.NetworkInfo;
14 import android.net.wifi.ScanResult;
15 import android.net.wifi.WifiConfiguration;
16 import android.net.wifi.WifiEnterpriseConfig;
17 import android.net.wifi.WifiInfo;
18 import android.net.wifi.WifiManager;
19 import android.os.Build;
20 import android.os.Bundle;
21 import android.support.design.widget.TabLayout;
22 import android.support.v4.app.Fragment;
23 import android.util.Base64;
24 import android.util.Log;
25 import android.view.LayoutInflater;
26 import android.view.View;
27 import android.view.ViewGroup;
28 import android.widget.Button;
29 import android.widget.EditText;
30 import android.widget.RelativeLayout;
31 import android.widget.TableRow;
32 import android.widget.TextView;
33
34 import java.io.ByteArrayInputStream;
35 import java.io.IOException;
36 import java.io.StringReader;
37 import java.lang.reflect.Field;
38 import java.security.cert.CertificateException;
39 import java.security.cert.CertificateFactory;
40 import java.security.cert.X509Certificate;
41 import java.util.List;
42
43 import de.dhbwloe.campusapp.CampusAppContext;
44 import de.dhbwloe.campusapp.CampusAppFragment;
45 import de.dhbwloe.campusapp.R;
46 import de.dhbwloe.campusapp.search.SearchIndices;
47
48 /**
49  * A simple {@link Fragment} subclass.
50  */
51 public class WifiSettings extends CampusAppFragment {
52     /* implement this for search results ;) */
53     public static SearchIndices[] GetSearchIndices() {
54         return new SearchIndices[]{
55                 new SearchIndices("WifiSettings", true) {{
56                     setUpdateTime(1);
57                     setTarget("#WifiSettings");
58                     setTitle("Wifi Settings");
59                     setDescription("WLAN Konfiguration für dieses Gerät");
60                     addKeyWord("wlan, secure, dhbw-secure, wifi, w-lan, wireless, internet, netzwerk");
61                 }},
62         };
63     }
64
65     private enum WifiNetworkAuthenticationTypes {
66         WIFI_AUTHTYPE_NONE,
67         WIFI_AUTHTYPE_WEP,
68         WIFI_AUTHTYPE_WPA,
69         WIFI_AUTHTYPE_WPA_ENTERPRISE,
70     };
71
72     private class WifiNetworkSettingsSet {
73         String name;
74         String ssid;
75         WifiNetworkAuthenticationTypes authType;
76         int[] authAlgorithms;
77         int eapMethod;
78         int phase2Method;
79
80         String caCertStr;
81         String caName;
82
83         String usernameSuffix;
84         String username;
85         String password;
86
87         TabLayout.Tab tab;
88         boolean isInScanResult = false;
89
90         public WifiNetworkSettingsSet(String name, String ssid, WifiNetworkAuthenticationTypes authType) {
91             this.name = name;
92             this.ssid = ssid;
93             this.authType = authType;
94         }
95
96         public WifiNetworkSettingsSet setWpaEnterprise(int[] authAlgorithms, int eapMethod, int phase2Method, String username) {
97             this.authAlgorithms = authAlgorithms;
98             this.eapMethod = eapMethod;
99             this.phase2Method = phase2Method;
100             this.username = username;
101             return this;
102         }
103
104         public WifiNetworkSettingsSet setPassword(String password) {
105             this.password = password;
106             return this;
107         }
108
109         public WifiNetworkSettingsSet setCACertificate(String caname, String certificate) {
110             this.caName = caname;
111             this.caCertStr = certificate;
112             return this;
113         }
114
115         public WifiNetworkSettingsSet setUserSuffix(String suffix) {
116             this.usernameSuffix = suffix;
117             return this;
118         }
119
120         public void setAuthData(String username, String password) {
121             this.username = username;
122             this.password = password;
123         }
124
125         public void setAuthData(String password) {
126             this.password = password;
127         }
128
129         public X509Certificate generateCertificate() throws CertificateException, IOException {
130             byte[] decoded = Base64.decode(caCertStr.replaceAll("-----BEGIN CERTIFICATE-----", "").replaceAll("-----END CERTIFICATE-----", ""), Base64.DEFAULT);
131             return (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(new ByteArrayInputStream(decoded));
132         }
133     }
134
135     private View view;
136     private TabLayout tablayout;
137     private WifiNetworkSettingsSet[] wifiPresets;
138     private WifiManager wifiManager;
139     private ConnectivityManager connectivityManager;
140     private int selectedNetworkIndex = 0;
141     private boolean networkScanned = false;
142     private BroadcastReceiver wifiStateReceiver = new BroadcastReceiver() {
143         @Override
144         public void onReceive(Context arg0, Intent arg1) {
145             NetworkInfo networkInfo = (NetworkInfo) arg1.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
146             if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
147                 updateWifiState();
148             }
149         }
150     };
151     private BroadcastReceiver wifiScanReceiver = new BroadcastReceiver() {
152         @Override
153         public void onReceive(Context arg0, Intent arg1) {
154             updateWifiScanState();
155         }
156     };
157
158     private void loadDhbwWifiDefinitions() {
159         int numOfNetworks = 3;
160         int i = 0;
161         wifiPresets = new WifiNetworkSettingsSet[numOfNetworks];
162
163         wifiPresets[i++] = (new WifiNetworkSettingsSet("dhbw-secure", "dhbw-secure", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE)).
164                 setWpaEnterprise(
165                         new int[] {WifiConfiguration.KeyMgmt.WPA_EAP, WifiConfiguration.KeyMgmt.IEEE8021X},
166                         WifiEnterpriseConfig.Eap.PEAP,
167                         WifiEnterpriseConfig.Phase2.MSCHAPV2,
168                         null
169                 ).setCACertificate("Deutsche Telekom Root CA 2", "-----BEGIN CERTIFICATE-----\n" +
170                 "MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc\n" +
171                 "MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj\n" +
172                 "IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB\n" +
173                 "IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE\n" +
174                 "RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl\n" +
175                 "U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290\n" +
176                 "IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU\n" +
177                 "ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC\n" +
178                 "QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr\n" +
179                 "rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S\n" +
180                 "NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc\n" +
181                 "QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH\n" +
182                 "txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP\n" +
183                 "BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC\n" +
184                 "AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp\n" +
185                 "tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa\n" +
186                 "IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl\n" +
187                 "6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+\n" +
188                 "xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU\n" +
189                 "Cm26OWMohpLzGITY+9HPBVZkVw==\n" +
190                 "-----END CERTIFICATE-----");
191
192         wifiPresets[i++] = (new WifiNetworkSettingsSet("dhbw-wlan", "dhbw-wlan", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_NONE));
193
194         wifiPresets[i++] = (new WifiNetworkSettingsSet("eduroam", "eduroam", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE)).
195                 setWpaEnterprise(
196                         new int[] {WifiConfiguration.KeyMgmt.WPA_EAP, WifiConfiguration.KeyMgmt.IEEE8021X},
197                         WifiEnterpriseConfig.Eap.PEAP,
198                         WifiEnterpriseConfig.Phase2.MSCHAPV2,
199                         null
200                 ).setCACertificate("Deutsche Telekom Root CA 2", "-----BEGIN CERTIFICATE-----\n" +
201                 "MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc\n" +
202                 "MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj\n" +
203                 "IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB\n" +
204                 "IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE\n" +
205                 "RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl\n" +
206                 "U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290\n" +
207                 "IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU\n" +
208                 "ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC\n" +
209                 "QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr\n" +
210                 "rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S\n" +
211                 "NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc\n" +
212                 "QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH\n" +
213                 "txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP\n" +
214                 "BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC\n" +
215                 "AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp\n" +
216                 "tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa\n" +
217                 "IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl\n" +
218                 "6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+\n" +
219                 "xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU\n" +
220                 "Cm26OWMohpLzGITY+9HPBVZkVw==\n" +
221                 "-----END CERTIFICATE-----").
222                 setUserSuffix("@dhbw-loerrach.de");
223     }
224
225
226     @TargetApi(18)
227     private void connectToWiFi(WifiNetworkSettingsSet settings) {
228         WifiConfiguration wifiConfig = new WifiConfiguration();
229         wifiConfig.SSID = settings.ssid;
230         for(int i = 0; i < settings.authAlgorithms.length; i++)
231             wifiConfig.allowedKeyManagement.set(settings.authAlgorithms[i]);
232
233         switch(settings.authType) {
234             case WIFI_AUTHTYPE_NONE:
235                 break;
236             case WIFI_AUTHTYPE_WEP:
237                 // not supported by our app
238                 break;
239             case WIFI_AUTHTYPE_WPA:
240
241                 break;
242             case WIFI_AUTHTYPE_WPA_ENTERPRISE:
243                 WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
244                 String username = settings.username;
245                 if(settings.usernameSuffix != null)
246                     username += settings.usernameSuffix;
247                 enterpriseConfig.setIdentity(username);
248                 enterpriseConfig.setPassword(settings.password);
249                 enterpriseConfig.setEapMethod(settings.eapMethod);
250                 enterpriseConfig.setPhase2Method(settings.phase2Method);
251                 try {
252                     enterpriseConfig.setCaCertificate(settings.generateCertificate());
253                 } catch (CertificateException e) {
254                 } catch (IOException e) {
255                 }
256                 wifiConfig.enterpriseConfig = enterpriseConfig;
257                 break;
258         }
259         int networkId = wifiManager.addNetwork(wifiConfig);
260         wifiManager.enableNetwork(networkId, true);
261     }
262
263
264
265
266     @Override
267     public void onCreate(Bundle savedInstanceState) {
268         super.onCreate(savedInstanceState);
269         loadDhbwWifiDefinitions();
270         wifiManager = (WifiManager)AppContext.getMainActivity().getSystemService(AppContext.getMainActivity().WIFI_SERVICE);
271         connectivityManager = (ConnectivityManager) AppContext.getMainActivity().getSystemService(Activity.CONNECTIVITY_SERVICE);
272     }
273
274     private void updateSelectedNetworkInformation() {
275         if(view == null)
276             return;
277         if(selectedNetworkIndex >= wifiPresets.length)
278             return;
279
280         WifiNetworkSettingsSet settings = wifiPresets[selectedNetworkIndex];
281         TextView ssidInfoView = (TextView) view.findViewById(R.id.ssidInfo);
282         TextView securityInfoView = (TextView) view.findViewById(R.id.securityInfo);
283         TextView eapInfoView = (TextView) view.findViewById(R.id.eapInfo);
284         TextView phase2InfoView = (TextView) view.findViewById(R.id.phase2Info);
285         TextView cacertInfoView = (TextView) view.findViewById(R.id.cacertInfo);
286
287         TableRow eapInfoRow = (TableRow) view.findViewById(R.id.eapInfoRow);
288         TableRow phase2InfoRow = (TableRow) view.findViewById(R.id.phase2InfoRow);
289         TableRow cacertInfoRow = (TableRow) view.findViewById(R.id.cacertInfoRow);
290         TableRow pskInfoRow = (TableRow) view.findViewById(R.id.pskInfoRow);
291
292         RelativeLayout insecureNetWarning = (RelativeLayout) view.findViewById(R.id.insecureNetWarning);
293
294
295         ssidInfoView.setText(settings.ssid);
296
297         eapInfoRow.setVisibility(View.GONE);
298         phase2InfoRow.setVisibility(View.GONE);
299         cacertInfoRow.setVisibility(View.GONE);
300         pskInfoRow.setVisibility(View.GONE);
301         insecureNetWarning.setVisibility(View.GONE);
302
303         switch(settings.authType) {
304             case WIFI_AUTHTYPE_NONE:
305                 securityInfoView.setText(R.string.wifiopts_security_open);
306
307                 insecureNetWarning.setVisibility(View.VISIBLE);
308                 break;
309             case WIFI_AUTHTYPE_WEP:
310                 securityInfoView.setText(R.string.wifiopts_security_wep);
311                 insecureNetWarning.setVisibility(View.VISIBLE);
312                 // unsupported!
313                 break;
314             case WIFI_AUTHTYPE_WPA:
315                 securityInfoView.setText(R.string.wifiopts_security_wpa);
316
317                 pskInfoRow.setVisibility(View.VISIBLE);
318                 break;
319             case WIFI_AUTHTYPE_WPA_ENTERPRISE:
320                 securityInfoView.setText(R.string.wifiopts_security_wpa_enterprise);
321
322                 eapInfoRow.setVisibility(View.VISIBLE);
323                 phase2InfoRow.setVisibility(View.VISIBLE);
324                 cacertInfoRow.setVisibility(View.VISIBLE);
325                 break;
326         }
327
328         if(settings.authType == WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE) {
329             int eapStringId = 0;
330             switch(settings.eapMethod) {
331                 case WifiEnterpriseConfig.Eap.PEAP:
332                     eapStringId = R.string.wifiopts_eap_peap;
333                     break;
334                 case WifiEnterpriseConfig.Eap.TLS:
335                     eapStringId = R.string.wifiopts_eap_tls;
336                     break;
337                 case WifiEnterpriseConfig.Eap.TTLS:
338                     eapStringId = R.string.wifiopts_eap_ttls;
339                     break;
340                 case WifiEnterpriseConfig.Eap.PWD:
341                     eapStringId = R.string.wifiopts_eap_pwd;
342                     break;
343             }
344             if(eapStringId > 0)
345                 eapInfoView.setText(eapStringId);
346             else
347                 eapInfoView.setText("");
348
349             int phase2StringId = 0;
350             switch(settings.phase2Method) {
351                 case WifiEnterpriseConfig.Phase2.MSCHAPV2:
352                     phase2StringId = R.string.wifiopts_phase2_mschapv2;
353                     break;
354                 case WifiEnterpriseConfig.Phase2.GTC:
355                     phase2StringId = R.string.wifiopts_phase2_gtc;
356                     break;
357             }
358             if(phase2StringId > 0)
359                 phase2InfoView.setText(phase2StringId);
360             else
361                 phase2InfoView.setText("");
362
363             cacertInfoView.setText(settings.caName);
364         } else {
365
366         }
367         updateWifiConnectButton();
368     }
369
370     private void updateWifiState() {
371         NetworkInfo myNetworkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
372         WifiInfo myWifiInfo = wifiManager.getConnectionInfo();
373
374         Resources resources = AppContext.getMainActivity().getResources();
375         String status;
376         if(myNetworkInfo.isConnectedOrConnecting()) {
377             int statusId = (myNetworkInfo.isConnected() ? R.string.wifisettings_status_connected : R.string.wifisettings_status_connecting);
378
379             String ssid = myWifiInfo.getSSID();
380
381             status = String.format(resources.getString(statusId), ssid);
382         } else {
383             status = resources.getString(R.string.wifisettings_status_disconnected);
384         }
385
386         TextView statusTextView = (TextView)view.findViewById(R.id.wifiStatusText);
387         statusTextView.setText(status);
388         updateWifiConnectButton();
389     }
390
391     private void updateWifiScanState() {
392         networkScanned = true;
393         List<ScanResult> scanResultList = wifiManager.getScanResults();
394         for(int i = 0; i < wifiPresets.length; i++) {
395             boolean networkFound = false;
396             for(ScanResult result : scanResultList) {
397                 if(result.SSID != null && result.SSID.equalsIgnoreCase(wifiPresets[i].ssid)) {
398                     networkFound = true;
399                     break;
400                 }
401             }
402             wifiPresets[i].isInScanResult = networkFound;
403         }
404         updateWifiConnectButton();
405     }
406
407     private void updateWifiConnectButton() {
408         if(selectedNetworkIndex >= wifiPresets.length)
409             return;
410         WifiNetworkSettingsSet preset = wifiPresets[selectedNetworkIndex];
411
412         boolean buttonEnabled = false;
413         int buttonTextId = 0;
414         NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
415         WifiInfo wifiInfo = wifiManager.getConnectionInfo();
416
417         if(!wifiManager.isWifiEnabled()) {
418             buttonTextId = R.string.wifisettings_connect_button_disabled;
419         } else if(networkInfo.isConnectedOrConnecting() && wifiInfo.getSSID() != null && wifiInfo.getSSID().equalsIgnoreCase(preset.ssid)) {
420             buttonTextId = R.string.wifisettings_connect_button_ready;
421         } else if(!networkScanned) {
422             buttonTextId = R.string.wifisettings_connect_button_scan;
423         } else if(!preset.isInScanResult) {
424             buttonTextId = R.string.wifisettings_connect_button_notfound;
425             buttonEnabled = true;
426         } else {
427             buttonEnabled = true;
428             buttonTextId = R.string.wifisettings_connect_button;
429         }
430
431         Button connectBtn = (Button) view.findViewById(R.id.wifiConnectBtn);
432         connectBtn.setEnabled(buttonEnabled);
433         connectBtn.setText(buttonTextId);
434     }
435
436     @Override
437     public View onCreateView(LayoutInflater inflater, ViewGroup container,
438                              Bundle savedInstanceState) {
439         view = inflater.inflate(R.layout.fragment_wifi_settings, container, false);
440         AppContext.setTitle("DHBW WLAN Settings");
441
442         updateSelectedNetworkInformation();
443
444         tablayout = (TabLayout) view.findViewById(R.id.tabs);
445         tablayout.removeAllTabs();
446         for(int i = 0; i < wifiPresets.length; i++) {
447             TabLayout.Tab tab = tablayout.newTab();
448             tab.setText(wifiPresets[i].name);
449             tablayout.addTab(tab);
450         }
451         tablayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
452             @Override
453             public void onTabSelected(TabLayout.Tab tab) {
454                 selectedNetworkIndex = tab.getPosition();
455                 updateSelectedNetworkInformation();
456             }
457
458             @Override
459             public void onTabUnselected(TabLayout.Tab tab) {
460             }
461
462             @Override
463             public void onTabReselected(TabLayout.Tab tab) {
464             }
465         });
466
467         Button connectBtn = (Button) view.findViewById(R.id.wifiConnectBtn);
468         connectBtn.setOnClickListener(new View.OnClickListener() {
469             @Override
470             public void onClick(View v) {
471                 Button connectBtn = (Button) v;
472                 connectBtn.setEnabled(false);
473                 WifiNetworkSettingsSet settings = wifiPresets[selectedNetworkIndex];
474                 if(!settings.isInScanResult) {
475                     networkScanned = false;
476                     wifiManager.startScan();
477                     updateWifiConnectButton();
478                     return;
479                 }
480
481                 EditText usernameEdt = (EditText) view.findViewById(R.id.wifiUsername);
482                 EditText passwordEdt = (EditText) view.findViewById(R.id.wifiPassword);
483
484                 String username = usernameEdt.getText().toString();
485                 String password = passwordEdt.getText().toString();
486
487                 if (Build.VERSION.SDK_INT < 18) {
488                     // connectToDHWiFi not supported!
489                     // do something else?
490                 } else if (username.length() > 0 && password.length() > 0) {
491
492                     if(settings != null) {
493                         settings.setAuthData(username, password);
494                         connectToWiFi(settings);
495                     }
496                 }
497
498                 connectBtn.setEnabled(true);
499             }
500         });
501
502         updateWifiState();
503         updateWifiScanState();
504
505         return view;
506     }
507
508     @Override
509     public void onResume() {
510         super.onResume();
511
512         if(AppContext == null)
513             AppContext = CampusAppContext.getInstance();
514
515         AppContext.getMainActivity().registerReceiver(this.wifiStateReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
516         AppContext.getMainActivity().registerReceiver(this.wifiScanReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
517
518         networkScanned = false;
519         wifiManager.startScan();
520         updateWifiConnectButton();
521
522         Log.i("WifiSettings", "registered wifi state receiver");
523     }
524
525     @Override
526         public void onPause() {
527         super.onPause();
528
529         AppContext.getMainActivity().unregisterReceiver(this.wifiStateReceiver);
530         AppContext.getMainActivity().unregisterReceiver(this.wifiScanReceiver);
531
532         Log.i("WifiSettings", "unregistered wifi state receiver");
533     }
534
535 }