added multiple network configurations
authorpk910 <philipp@pk910.de>
Thu, 4 Feb 2016 12:32:20 +0000 (13:32 +0100)
committerpk910 <philipp@pk910.de>
Thu, 4 Feb 2016 12:32:20 +0000 (13:32 +0100)
app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java
app/src/main/res/layout/fragment_wifi_settings.xml
app/src/main/res/values/strings.xml

index c172ed5f241f0e10da180a002c94031218eef751..fceca54869de7be2dcd55218aa419dd62426ead7 100644 (file)
@@ -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);
index 98f09d30bf2ac4e207bd8dbe50c5c7fe504cd7a1..7c9fc46a5ce576259e7f50993f4bf9d480316db4 100644 (file)
@@ -1,5 +1,6 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
         android:layout_height="wrap_content"
         android:text="@string/wifisettings_about_wifi" />
 
+    <android.support.design.widget.AppBarLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
+        android:layout_marginTop="8dp">
+
+        <android.support.design.widget.TabLayout
+            android:id="@+id/tabs"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:tabMode="scrollable"
+            />
+    </android.support.design.widget.AppBarLayout>
+
     <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
index 8469d21b03c639588058d7cb7c22facd72aae3cb..1b0b9fe09cfb7a1d74d6bb0c80e757347619dc65 100644 (file)
     <string name="wifisettings_username_caption">Username:</string>
     <string name="wifisettings_password_caption">Passwort:</string>
 
+    <string name="wifiopts_security_open">Offen</string>
+    <string name="wifiopts_security_wep">WEP</string>
+    <string name="wifiopts_security_wpa">WPA/WPA2 PSK</string>
+    <string name="wifiopts_security_wpa_enterprise">WPA/WPA2 Enterprise</string>
+
+    <string name="wifiopts_eap_peap">PEAP</string>
+    <string name="wifiopts_eap_tls">TLS</string>
+    <string name="wifiopts_eap_ttls">TTLS</string>
+    <string name="wifiopts_eap_pwd">PWD</string>
+
+    <string name="wifiopts_phase2_mschapv2">MSCHAPv2</string>
+    <string name="wifiopts_phase2_gtc">GTC</string>
+
     <string name="wifisettings_connect_button">Jetzt Verbinden</string>
     <string name="title_activity_settings">Settings</string>