From 25827b82d9683160f70d0ecc70ccc687c385e1af Mon Sep 17 00:00:00 2001 From: pk910 Date: Thu, 4 Feb 2016 13:32:20 +0100 Subject: [PATCH] added multiple network configurations --- .../campusapp/fragments/WifiSettings.java | 162 +++++++++++++++++- .../res/layout/fragment_wifi_settings.xml | 15 ++ app/src/main/res/values/strings.xml | 13 ++ 3 files changed, 183 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java index c172ed5..fceca54 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java @@ -2,11 +2,13 @@ package de.dhbwloe.campusapp.fragments; import android.annotation.TargetApi; +import android.app.ActionBar; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiEnterpriseConfig; import android.net.wifi.WifiManager; import android.os.Build; import android.os.Bundle; +import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.util.Base64; import android.view.LayoutInflater; @@ -14,6 +16,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; +import android.widget.TextView; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -59,10 +62,14 @@ public class WifiSettings extends CampusAppFragment { int phase2Method; String caCertStr; + String caName; + String usernameSuffix; String username; String password; + TabLayout.Tab tab; + public WifiNetworkSettingsSet(String name, String ssid, WifiNetworkAuthenticationTypes authType) { this.name = name; this.ssid = ssid; @@ -82,11 +89,17 @@ public class WifiSettings extends CampusAppFragment { return this; } - public WifiNetworkSettingsSet setCACertificate(String certificate) { + 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; @@ -103,11 +116,13 @@ public class WifiSettings extends CampusAppFragment { } private View view; + private TabLayout tablayout; private WifiNetworkSettingsSet[] wifiPresets; private WifiManager wifimanager; + private int selectedNetworkIndex = 0; private void loadDhbwWifiDefinitions() { - int numOfNetworks = 2; + int numOfNetworks = 3; int i = 0; wifiPresets = new WifiNetworkSettingsSet[numOfNetworks]; @@ -117,7 +132,7 @@ public class WifiSettings extends CampusAppFragment { WifiEnterpriseConfig.Eap.PEAP, WifiEnterpriseConfig.Phase2.MSCHAPV2, null - ).setCACertificate("-----BEGIN CERTIFICATE-----\n" + + ).setCACertificate("Deutsche Telekom Root CA 2", "-----BEGIN CERTIFICATE-----\n" + "MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc\n" + "MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj\n" + "IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB\n" + @@ -141,6 +156,36 @@ public class WifiSettings extends CampusAppFragment { "-----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"); } @@ -162,7 +207,10 @@ public class WifiSettings extends CampusAppFragment { break; case WIFI_AUTHTYPE_WPA_ENTERPRISE: WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig(); - enterpriseConfig.setIdentity(settings.username); + 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); @@ -188,6 +236,79 @@ public class WifiSettings extends CampusAppFragment { wifimanager = (WifiManager)AppContext.getMainActivity().getSystemService(AppContext.getMainActivity().WIFI_SERVICE); } + private void updateSelectedNetworkInformation() { + if(view == null) + return; + if(selectedNetworkIndex >= wifiPresets.length) + return; + + WifiNetworkSettingsSet 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); + TextView phase2InfoView = (TextView) view.findViewById(R.id.phase2Info); + TextView cacertInfoView = (TextView) view.findViewById(R.id.cacertInfo); + + ssidInfoView.setText(settings.ssid); + switch(settings.authType) { + case WIFI_AUTHTYPE_NONE: + securityInfoView.setText(R.string.wifiopts_security_open); + break; + case WIFI_AUTHTYPE_WEP: + securityInfoView.setText(R.string.wifiopts_security_wep); + // unsupported! + break; + case WIFI_AUTHTYPE_WPA: + securityInfoView.setText(R.string.wifiopts_security_wpa); + break; + case WIFI_AUTHTYPE_WPA_ENTERPRISE: + securityInfoView.setText(R.string.wifiopts_security_wpa_enterprise); + break; + } + + if(settings.authType == WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE) { + int eapStringId = 0; + switch(settings.eapMethod) { + case WifiEnterpriseConfig.Eap.PEAP: + eapStringId = R.string.wifiopts_eap_peap; + break; + case WifiEnterpriseConfig.Eap.TLS: + eapStringId = R.string.wifiopts_eap_tls; + break; + case WifiEnterpriseConfig.Eap.TTLS: + eapStringId = R.string.wifiopts_eap_ttls; + break; + case WifiEnterpriseConfig.Eap.PWD: + eapStringId = R.string.wifiopts_eap_pwd; + break; + } + if(eapStringId > 0) + eapInfoView.setText(eapStringId); + else + eapInfoView.setText(""); + + int phase2StringId = 0; + switch(settings.phase2Method) { + case WifiEnterpriseConfig.Phase2.MSCHAPV2: + phase2StringId = R.string.wifiopts_phase2_mschapv2; + break; + case WifiEnterpriseConfig.Phase2.GTC: + phase2StringId = R.string.wifiopts_phase2_gtc; + break; + } + if(phase2StringId > 0) + phase2InfoView.setText(phase2StringId); + else + phase2InfoView.setText(""); + + cacertInfoView.setText(settings.caName); + } else { + eapInfoView.setText("-"); + phase2InfoView.setText("-"); + cacertInfoView.setText("-"); + } + + } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -195,6 +316,31 @@ public class WifiSettings extends CampusAppFragment { view = inflater.inflate(R.layout.fragment_wifi_settings, container, false); AppContext.setTitle("DHBW WLAN Settings"); + updateSelectedNetworkInformation(); + + tablayout = (TabLayout) view.findViewById(R.id.tabs); + tablayout.removeAllTabs(); + for(int i = 0; i < wifiPresets.length; i++) { + TabLayout.Tab tab = tablayout.newTab(); + tab.setText(wifiPresets[i].name); + tablayout.addTab(tab); + } + tablayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { + @Override + public void onTabSelected(TabLayout.Tab tab) { + selectedNetworkIndex = tab.getPosition(); + updateSelectedNetworkInformation(); + } + + @Override + public void onTabUnselected(TabLayout.Tab tab) { + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { + } + }); + Button connectBtn = (Button) view.findViewById(R.id.wifiConnectBtn); connectBtn.setOnClickListener(new View.OnClickListener() { @Override @@ -212,9 +358,11 @@ public class WifiSettings extends CampusAppFragment { // connectToDHWiFi not supported! // do something else? } else if (username.length() > 0 && password.length() > 0) { - WifiNetworkSettingsSet settings = wifiPresets[0]; - settings.setAuthData(username, password); - connectToWiFi(settings); + WifiNetworkSettingsSet settings = wifiPresets[selectedNetworkIndex]; + if(settings != null) { + settings.setAuthData(username, password); + connectToWiFi(settings); + } } connectBtn.setEnabled(true); diff --git a/app/src/main/res/layout/fragment_wifi_settings.xml b/app/src/main/res/layout/fragment_wifi_settings.xml index 98f09d3..7c9fc46 100644 --- a/app/src/main/res/layout/fragment_wifi_settings.xml +++ b/app/src/main/res/layout/fragment_wifi_settings.xml @@ -1,5 +1,6 @@ + + + + + Username: Passwort: + Offen + WEP + WPA/WPA2 PSK + WPA/WPA2 Enterprise + + PEAP + TLS + TTLS + PWD + + MSCHAPv2 + GTC + Jetzt Verbinden Settings -- 2.20.1