WifiSettings überarbeitet, kleine fixes
authorpk910 <philipp@pk910.de>
Fri, 4 Mar 2016 10:39:57 +0000 (11:39 +0100)
committerpk910 <philipp@pk910.de>
Fri, 4 Mar 2016 10:39:57 +0000 (11:39 +0100)
20 files changed:
app/src/main/java/de/dhbwloe/campusapp/fragments/Dashboard.java
app/src/main/java/de/dhbwloe/campusapp/fragments/DashboardMensa.java
app/src/main/java/de/dhbwloe/campusapp/fragments/DashboardNewsDhbw.java
app/src/main/java/de/dhbwloe/campusapp/fragments/DashboardNewsStuv.java
app/src/main/java/de/dhbwloe/campusapp/fragments/MensaCard.java
app/src/main/java/de/dhbwloe/campusapp/fragments/MensaTagesplanListAdapter.java
app/src/main/java/de/dhbwloe/campusapp/fragments/News.java
app/src/main/java/de/dhbwloe/campusapp/fragments/Settings.java
app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java
app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaTagesplan.java
app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaplanManager.java
app/src/main/java/de/dhbwloe/campusapp/network/XmlRequestHelper.java
app/src/main/java/de/dhbwloe/campusapp/wifi/SecureLoginManager.java
app/src/main/java/de/dhbwloe/campusapp/wifi/SecureLoginTask.java
app/src/main/java/de/dhbwloe/campusapp/wifi/WifiConfigurationManager.java
app/src/main/java/de/dhbwloe/campusapp/wifi/WifiNetworkSettings.java
app/src/main/res/layout/fragment_mensa_tagesplan_listitem.xml
app/src/main/res/layout/fragment_settings.xml
app/src/main/res/values/colors.xml
app/src/main/res/values/strings.xml

index 574a4a786dee0f3d5feeeffa16742ad749113085..f7413c813a944c820f666780a745d5ce7c6160ca 100644 (file)
@@ -48,6 +48,8 @@ public class Dashboard extends CampusAppFragment {
         try {
             view = inflater.inflate(R.layout.fragment_dashboard, container, false);
         } catch (InflateException e) {
+            if(view == null)
+                return null;
         }
         AppContext.setTitle(AppContext.getResString(R.string.dashboard_title));
 
index ccc2589de39d9e6f7c4b650f02223d5252341565..fa75c5c8f5aff4caf0beae0ec31ef7e68a338478 100644 (file)
@@ -72,6 +72,10 @@ public class DashboardMensa extends CampusAppFragment {
         int i = 0;
         LayoutInflater li = LayoutInflater.from(AppContext.getMainActivity());
         do {
+            String menuTitle = cmenue.getMenuName();
+            if(menuTitle == null || menuTitle.matches("^Buffet"))
+                continue;
+
             RelativeLayout menu = (RelativeLayout) li.inflate(R.layout.fragment_dashboard_mensa_menu, null, false);
             menueContainer.addView(menu);
 
@@ -79,8 +83,8 @@ public class DashboardMensa extends CampusAppFragment {
             TextView menuPrice = (TextView) menu.findViewById(R.id.menuPrice);
 
             menuName.setText(cmenue.getName());
-            double price = cmenue.getStudentPrice();
-            menuPrice.setText(Double.toString(price));
+            String priceStr = cmenue.getFormatedRolePrice();
+            menuPrice.setText(priceStr);
         } while(i < dayplans.length && (cmenue = dayplans[++i]) != null && cmenue.getPlanDate() == dayplan.getPlanDate());
     }
 
index 3f1c3c2fa49aeddd3b71fb30baf6f9ccb7807fce..48342fa310503202dcb7963ed95488e836e944a5 100644 (file)
@@ -7,13 +7,17 @@ import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+
 import de.dhbwloe.campusapp.CampusAppFragment;
 import de.dhbwloe.campusapp.R;
 
 /**
  * A simple {@link Fragment} subclass.
  */
-public class DashboardNewsDhbw extends CampusAppFragment {
+public class DashboardNewsDhbw extends News {
 
 
     public DashboardNewsDhbw() {
@@ -24,8 +28,31 @@ public class DashboardNewsDhbw extends CampusAppFragment {
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
-        // Inflate the layout for this fragment
-        return inflater.inflate(R.layout.fragment_dashboard_news_dhbw, container, false);
+        oFragmentView = inflater.inflate(R.layout.fragment_dashboard_news_stuv, container, false);
+
+        return oFragmentView;
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        refreshStuvNews();
+    }
+
+    private void refreshStuvNews() {
+        loadNewsSource("DHBW", true);
+
+        Collections.sort(newsListItems, new Comparator<NewsListItem>() {
+            @Override
+            public int compare(NewsListItem item2, NewsListItem item1) {
+                long now = (new Date()).getTime() / 1000;
+                return (int) (item2.getTimeDifference(now) - item1.getTimeDifference(now));
+            }
+        });
+
+
+        // show newsListItems
     }
 
 }
index 73d83ec74cfb31bbef19766fea834f776aa8f9fd..ba692a6cc4ae3ea056e76e969d01305c0fd61600 100644 (file)
@@ -7,13 +7,17 @@ import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+
 import de.dhbwloe.campusapp.CampusAppFragment;
 import de.dhbwloe.campusapp.R;
 
 /**
  * A simple {@link Fragment} subclass.
  */
-public class DashboardNewsStuv extends CampusAppFragment {
+public class DashboardNewsStuv extends News {
 
 
     public DashboardNewsStuv() {
@@ -24,8 +28,31 @@ public class DashboardNewsStuv extends CampusAppFragment {
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
-        // Inflate the layout for this fragment
-        return inflater.inflate(R.layout.fragment_dashboard_news_stuv, container, false);
+        oFragmentView = inflater.inflate(R.layout.fragment_dashboard_news_stuv, container, false);
+
+        return oFragmentView;
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        refreshStuvNews();
+    }
+
+    private void refreshStuvNews() {
+        loadNewsSource("STUV", false);
+        loadEventsSource("STUV", false);
+
+        Collections.sort(newsListItems, new Comparator<NewsListItem>() {
+            @Override
+            public int compare(NewsListItem item2, NewsListItem item1) {
+                long now = (new Date()).getTime() / 1000;
+                return (int) (item2.getTimeDifference(now) - item1.getTimeDifference(now));
+            }
+        });
+
+        // show newsListItems
     }
 
 }
index 93b91321879244419d637d4770c47e9598331337..3933be96d10bd5416cef539e6200d3a964d61174 100644 (file)
@@ -43,8 +43,8 @@ public class MensaCard extends CampusAppFragment {
     public void showNfcCardData(Bundle bundle) {
         TextView cardDataView = (TextView)view.findViewById(R.id.balanceTxt);
         double balance = bundle.getDouble("balance");
-        DecimalFormat df = new DecimalFormat("#,###.00");
-        cardDataView.setText(df.format(balance)+" €");
+        DecimalFormat df = new DecimalFormat(AppContext.getResString(R.string.mensaformat_price));
+        cardDataView.setText(df.format(balance));
     }
 
 }
index f0bf2a15e37531e46abc4eaabc502d6a3be4341c..c8509e8f878dbfd37c39943f22c1395b771105c5 100644 (file)
@@ -50,6 +50,8 @@ public class MensaTagesplanListAdapter  extends ArrayAdapter<de.dhbwloe.campusap
             holder.txtMenueName.setText(item.getMenuName());
         if(holder.txtName != null)
             holder.txtName.setText(item.getName());
+        if(holder.txtPrice != null)
+            holder.txtPrice.setText(item.getFormatedRolePrice());
 
         return row;
     }
@@ -57,10 +59,12 @@ public class MensaTagesplanListAdapter  extends ArrayAdapter<de.dhbwloe.campusap
     static class RecordHolder {
         TextView txtMenueName;
         TextView txtName;
+        TextView txtPrice;
 
         public RecordHolder(View view) {
             this.txtMenueName = (TextView) view.findViewById(R.id.txtMenueName);
             this.txtName = (TextView) view.findViewById(R.id.txtName);
+            this.txtPrice = (TextView) view.findViewById(R.id.txtMenuePrice);
         }
     }
 }
\ No newline at end of file
index 5efb4f7b429c4e68cbdaa00d305e400c461bceaf..2d4be417a0521b47d26a24a0ae144e6260af30f8 100644 (file)
@@ -42,7 +42,7 @@ public class News extends CampusAppFragment {
 
     private View view;
     private NewsListAdapter listAdapter;
-    private ArrayList<NewsListItem> newsListItems = new ArrayList<NewsListItem>();
+    protected ArrayList<NewsListItem> newsListItems = new ArrayList<NewsListItem>();
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -86,10 +86,11 @@ public class News extends CampusAppFragment {
     @Override
     public void onResume() {
         super.onResume();
-        refreshNewsItems();
+        if(view != null)
+            refreshNewsItems();
     }
 
-    private void refreshNewsItems() {
+    protected void refreshNewsItems() {
         newsListItems.clear();
 
         CheckBox showDhbwNewsChkbok = (CheckBox) view.findViewById(R.id.showDhbwNews);
@@ -109,14 +110,15 @@ public class News extends CampusAppFragment {
         Collections.sort(newsListItems, new Comparator<NewsListItem>() {
             @Override
             public int compare(NewsListItem item2, NewsListItem item1) {
-                long now = (new Date()).getTime()/1000;
+                long now = (new Date()).getTime() / 1000;
                 return (int) (item2.getTimeDifference(now) - item1.getTimeDifference(now));
             }
         });
-        listAdapter.notifyDataSetChanged();
+        if(listAdapter != null)
+            listAdapter.notifyDataSetChanged();
     }
 
-    private void loadNewsSource(String sourceName, boolean isDhbw) {
+    protected void loadNewsSource(String sourceName, boolean isDhbw) {
         long now = (new Date()).getTime() / 1000;
 
         NewsItem[] news = AppContext.getDatabaseManager().getNewsItems(sourceName, now, now - (86400 * 30 * 6)); // load 6 month
@@ -126,7 +128,7 @@ public class News extends CampusAppFragment {
         }
     }
 
-    private void loadEventsSource(String sourceName, boolean isDhbw) {
+    protected void loadEventsSource(String sourceName, boolean isDhbw) {
         long now = (new Date()).getTime() / 1000;
 
         CourseEvent[] events = AppContext.getDatabaseManager().getCourseCalendarTimetable(sourceName, now, 30 * 6); // load 6 month
index 85a444235abc457b58fcc58f2b708c7ddb836e94..d320591baed7cc408d593d2012c24228b919648b 100644 (file)
@@ -6,6 +6,8 @@ import android.support.v4.app.Fragment;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.EditText;
+import android.widget.Spinner;
 
 import de.dhbwloe.campusapp.CampusAppFragment;
 import de.dhbwloe.campusapp.R;
@@ -14,7 +16,8 @@ import de.dhbwloe.campusapp.R;
  * A simple {@link Fragment} subclass.
  */
 public class Settings extends CampusAppFragment {
-
+    private EditText courseNameInput;
+    private Spinner mensaRoleInput;
 
     public Settings() {
         // Required empty public constructor
@@ -24,8 +27,58 @@ public class Settings extends CampusAppFragment {
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
-        // Inflate the layout for this fragment
-        return inflater.inflate(R.layout.fragment_settings, container, false);
+        oFragmentView = inflater.inflate(R.layout.fragment_settings, container, false);
+
+        courseNameInput = (EditText) oFragmentView.findViewById(R.id.courseNameInput);
+        mensaRoleInput = (Spinner) oFragmentView.findViewById(R.id.mensaRoleInput);
+
+        return oFragmentView;
+    }
+
+
+    @Override
+    public void onStart() {
+        super.onStart();
+
+        String courseName = AppContext.getDatabaseManager().getRuntimeCache("CourseName");
+        if(courseName == null || courseName.isEmpty())
+            courseName = "";
+        courseNameInput.setText(courseName);
+
+        String mensaRoleName = AppContext.getDatabaseManager().getRuntimeCache("MensaRole");
+        if (mensaRoleName == null || mensaRoleName.isEmpty())
+            mensaRoleName = "0";
+        int mensaRole = Integer.parseInt(mensaRoleName);
+        mensaRoleInput.setSelection(mensaRole);
     }
 
+    @Override
+    public void onStop() {
+        super.onStop();
+        boolean overrideNavigation = false;
+
+        String courseName = AppContext.getDatabaseManager().getRuntimeCache("CourseName");
+        if (courseName == null || courseName.isEmpty())
+            courseName = "";
+
+        String newCourseName = courseNameInput.getText().toString();
+        if(!courseName.equalsIgnoreCase(newCourseName)) {
+            AppContext.getDatabaseManager().setRuntimeCache("CourseName", newCourseName);
+            overrideNavigation = true;
+        }
+
+        String mensaRoleName = AppContext.getDatabaseManager().getRuntimeCache("MensaRole");
+        if (mensaRoleName == null || mensaRoleName.isEmpty())
+            mensaRoleName = "";
+        String newMensaRoleName = Integer.toString(mensaRoleInput.getSelectedItemPosition());
+        if(!mensaRoleName.equalsIgnoreCase(newMensaRoleName)) {
+            AppContext.getDatabaseManager().setRuntimeCache("MensaRole", newMensaRoleName);
+            overrideNavigation = true;
+        }
+
+        if(overrideNavigation) {
+            AppContext.getNavigationManager().navigatePage("Splashscreen", null, false);
+
+        }
+    }
 }
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);
index 6afb30660eb168932117c15448bdc744033de821..610e62e9602296e3a1b021a7afea97d05a291431 100644 (file)
@@ -1,12 +1,16 @@
 package de.dhbwloe.campusapp.mensaplan;
 
 import java.text.DateFormat;
+import java.text.DecimalFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Locale;
 import java.util.zip.CRC32;
 
+import de.dhbwloe.campusapp.CampusAppContext;
+import de.dhbwloe.campusapp.R;
+
 /**
  * Created by pk910 on 22.01.2016.
  */
@@ -110,6 +114,18 @@ public class MensaTagesplan {
         return price;
     }
 
+    public String getFormatedRolePrice() {
+        String mensaRoleName = CampusAppContext.getInstance().getDatabaseManager().getRuntimeCache("MensaRole");
+        if (mensaRoleName == null || mensaRoleName.isEmpty())
+            mensaRoleName = "0";
+        int mensaRole = Integer.parseInt(mensaRoleName);
+        double price = (aPriceArray[mensaRole] / 100.0);
+
+        DecimalFormat df = new DecimalFormat(CampusAppContext.getInstance().getResString(R.string.mensaformat_price));
+        String formatedPrice = df.format(price);
+        return formatedPrice;
+    }
+
     public void setIsNew() {
         bIsNew = true;
     }
index 20ef99a50c76a21bca1485a4067e5c5eacc47bee..355ab16ac504aed11081777851c15f6b8fd491df 100644 (file)
@@ -59,7 +59,7 @@ public class MensaplanManager extends XmlRequestHelper {
         // 2,90€( pro 100g)?
         if(pricestr == null)
             return 0;
-        Pattern r = Pattern.compile("^([0-9,]+)€( pro [0-9]+[a-z]+)$");
+        Pattern r = Pattern.compile("^([0-9,]+)€( pro [0-9]+[a-z]+)?$");
         Matcher m = r.matcher(pricestr);
         if (m.find()) {
             NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
index f9c59fbd679a39d9b7c6fc9b10dc915b983a53dc..f1507ef9f7fc4a488b4b9c5f417b58f37f8738c8 100644 (file)
@@ -56,7 +56,7 @@ public abstract class XmlRequestHelper {
                 String error = null;
                 try {
                     error = new String(errorResponse, "US-ASCII");
-                } catch (UnsupportedEncodingException e1) {
+                } catch (Exception e1) {
                 }
                 Log.i("HTTPClient", "  Error: " + statusCode + " - " + error);
                 onXmlRequestFail(statusCode, error);
index d98c6264df789c35a46250a64f27cf38e7fe46cc..073a76b0429384ccb8d36a8cfc9006eb369fe665 100644 (file)
@@ -109,6 +109,7 @@ public class SecureLoginManager extends AsyncTask<SecureLoginTask, Void, SecureL
 
             URL url = new URL(SECURELOGIN_URL);
             URLConnection conn = url.openConnection();
+
             if (conn instanceof HttpsURLConnection) {
                 ((HttpsURLConnection)conn).setSSLSocketFactory(sslSocketFactory);
                 ((HttpsURLConnection )conn).setRequestMethod("POST");
@@ -158,6 +159,7 @@ public class SecureLoginManager extends AsyncTask<SecureLoginTask, Void, SecureL
 
         } catch (Exception e) {
             task.responseError = e.getMessage();
+            Log.i("SecureLogin", e.toString() + ":" + e.getMessage());
         }
 
         task.responseString = responseString.toString();
index 2e7f7a5571ccf2d5039e95b285a239323cb5c819..0db064011716d1a1dd9cd599b8a023e1ce1399fc 100644 (file)
@@ -9,8 +9,6 @@ import android.net.wifi.WifiManager;
  */
 public class SecureLoginTask {
     public WifiNetworkSettings settings;
-    public NetworkInfo networkInfo;
-    public WifiInfo wifiInfo;
 
     public boolean responseReceived;
     public String responseString;
index a58f128340cbcfb53ff1c4d807e802626b65a0b5..7554c324955ed7b00b3364d02f8e3dc42b441837 100644 (file)
@@ -2,14 +2,19 @@ package de.dhbwloe.campusapp.wifi;
 
 import android.annotation.TargetApi;
 import android.net.NetworkInfo;
+import android.net.wifi.SupplicantState;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiEnterpriseConfig;
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.os.Build;
+import android.util.Log;
 
 import java.io.IOException;
 import java.security.cert.CertificateException;
+import java.util.List;
+
+import de.dhbwloe.campusapp.fragments.WifiSettings;
 
 /**
  * Created by pk910 on 08.02.2016.
@@ -19,10 +24,24 @@ public class WifiConfigurationManager {
         public void onWifiConfigurationComplete(WifiNetworkSettings settings, String response);
     }
 
+    public enum WifiConnectionStatus {
+        WIFISTATE_NULL,
+        WIFISTATE_CONNECTING,
+        WIFISTATE_AUTHENTICATING,
+        WIFISTATE_CONNECTED,
+        WIFISTATE_FAILED
+    }
+
+    private WifiSettings wifiSettingsFragment;
     private WifiManager wifiManager;
+    private WifiNetworkSettings tryConnectTo;
+    private WifiConnectionStatus currentWifiState;
+    private boolean isLocked = false;
 
-    public WifiConfigurationManager(WifiManager wifiManager) {
+
+    public WifiConfigurationManager(WifiManager wifiManager, WifiSettings fragment) {
         this.wifiManager = wifiManager;
+        this.wifiSettingsFragment = fragment;
     }
 
     public void connect(WifiNetworkSettings settings) {
@@ -31,9 +50,85 @@ public class WifiConfigurationManager {
         }
     }
 
+    public void updateWifiState(WifiInfo wifiInfo, SupplicantState wifiState) {
+        WifiConnectionStatus previousWifiState = currentWifiState;
+        currentWifiState = WifiConnectionStatus.WIFISTATE_NULL;
+        String ssid = wifiSettingsFragment.trimWifiSSID(wifiInfo != null ? wifiInfo.getSSID() : null);
+
+        if(tryConnectTo == null)
+            return;
+
+        boolean processedWifiState = true;
+        switch (wifiState) {
+            case ASSOCIATING:
+                currentWifiState = WifiConnectionStatus.WIFISTATE_CONNECTING;
+                break;
+            case ASSOCIATED:
+                currentWifiState = WifiConnectionStatus.WIFISTATE_AUTHENTICATING;
+                break;
+            case COMPLETED:
+                currentWifiState = WifiConnectionStatus.WIFISTATE_CONNECTED;
+                break;
+            case DISCONNECTED:
+                if(previousWifiState != WifiConnectionStatus.WIFISTATE_CONNECTED)
+                    currentWifiState = WifiConnectionStatus.WIFISTATE_FAILED;
+                else
+                    currentWifiState = WifiConnectionStatus.WIFISTATE_NULL;
+                break;
+            default:
+                processedWifiState = false;
+                break;
+        }
+        Log.i("WiFiConf", "Handled: "+wifiState.name());
+        if(!processedWifiState || (ssid != null && !ssid.equalsIgnoreCase(tryConnectTo.getSSID()))) {
+            currentWifiState = previousWifiState;
+            return;
+        }
+
+        SecureLoginManager loginManager;
+        if(currentWifiState == WifiConnectionStatus.WIFISTATE_CONNECTED && (loginManager = tryConnectTo.getSecureLoginManager()) != null)  {
+            currentWifiState = WifiConnectionStatus.WIFISTATE_AUTHENTICATING;
+
+            SecureLoginTask logintask = new SecureLoginTask();
+            logintask.loginCallback = new SecureLoginManager.SecureLoginResult() {
+                @Override
+                public void onSecureLoginFailed(String errMsg) {
+                    currentWifiState = WifiConnectionStatus.WIFISTATE_FAILED;
+                    isLocked = false;
+
+                    wifiSettingsFragment.updateWifiState();
+                }
+                @Override
+                public void onSecureLoginSuccess() {
+                    currentWifiState = WifiConnectionStatus.WIFISTATE_CONNECTED;
+                    isLocked = false;
+
+                    wifiSettingsFragment.updateWifiState();
+                }
+            };
+            logintask.settings = tryConnectTo;
+
+            loginManager.execute(logintask);
+        }
+
+        if(currentWifiState == WifiConnectionStatus.WIFISTATE_CONNECTED || currentWifiState == WifiConnectionStatus.WIFISTATE_FAILED) {
+            isLocked = false;
+        }
+    }
+
+    public WifiConnectionStatus getWifiState(WifiNetworkSettings settings) {
+        if(settings == tryConnectTo)
+            return currentWifiState;
+        return WifiConnectionStatus.WIFISTATE_NULL;
+    }
 
     @TargetApi(18)
     private void connectToWiFi(WifiNetworkSettings settings) {
+        if(isLocked)
+            return;
+        tryConnectTo = settings;
+        isLocked = true;
+
         WifiConfiguration wifiConfig = new WifiConfiguration();
         wifiConfig.SSID = settings.ssid;
         for(int i = 0; i < settings.authAlgorithms.length; i++)
@@ -65,8 +160,24 @@ public class WifiConfigurationManager {
                 wifiConfig.enterpriseConfig = enterpriseConfig;
                 break;
         }
+
+        // remove old configurations for this network
+        List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
+        for(WifiConfiguration k : list) {
+            if(k.SSID.equalsIgnoreCase(wifiConfig.SSID)) {
+                int networkId = wifiManager.getConnectionInfo().getNetworkId();
+                wifiManager.removeNetwork(networkId);
+            }
+        }
+
         int networkId = wifiManager.addNetwork(wifiConfig);
         wifiManager.enableNetwork(networkId, true);
+
+        wifiManager.saveConfiguration();
+    }
+
+    public boolean isLocked(WifiNetworkSettings settings) {
+        return isLocked && (tryConnectTo == settings);
     }
 
 }
index 96a561fec77d11204679350187d038c10e6a6101..4eb994743049f32684b16b36a438c7127604318e 100644 (file)
@@ -173,12 +173,6 @@ public class WifiNetworkSettings {
 
     public TabLayout.Tab tab;
     public boolean isInScanResult = false;
-    public boolean isTryConnecting = false;
-    public boolean isAssociating = false;
-    public boolean isAssociated = false;
-    public boolean isAuthenticated = false;
-    public boolean isDisconnected = false;
-    public boolean failedAuthentication = false;
 
     public WifiNetworkSettings(String name, String ssid, WifiNetworkAuthenticationTypes authType) {
         this.name = name;
@@ -263,4 +257,8 @@ public class WifiNetworkSettings {
         return caName;
     }
 
+    public SecureLoginManager getSecureLoginManager() {
+        return performDHSecureLogin;
+    }
+
 }
index fe70e1ca424cff29615261bec65afc3030142a2e..a5b8469cc5dc9645a9d73483ca77d18d2cb0d0d1 100644 (file)
         android:layout_alignParentLeft="true"
         android:layout_alignParentStart="true" />
 
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:text="{menuPrice}"
+        android:id="@+id/txtMenuePrice"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentLeft="false"
+        android:layout_alignParentStart="false"
+        android:layout_alignParentRight="true"
+        android:textColor="@color/color_dhbw_darkred" />
+
     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
index b193b50689cc3777bef580b0d5159d14ac9c4320..5de3aed0ba954560dd509bdeb7f8f87b4f8fcb54 100644 (file)
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
+    xmlns:card_view="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context="de.dhbwloe.campusapp.fragments.Settings">
+    tools:context="de.dhbwloe.campusapp.fragments.Settings"
+    android:padding="8dp"
+    android:orientation="vertical">
 
-    <!-- TODO: Update blank fragment layout -->
-    <TextView
+    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/card_course"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:text="@string/hello_blank_fragment" />
+        android:layout_height="wrap_content"
+        android:layout_margin="8dp"
+        card_view:cardCornerRadius="5dp">
 
-</FrameLayout>
+        <LinearLayout
+            android:orientation="vertical"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:padding="4dp">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/settings_vorlesungsplan"
+                android:textStyle="bold"
+                android:id="@+id/textView30" />
+
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/textView30"
+                android:layout_alignParentLeft="true"
+                android:layout_alignParentStart="true"
+                android:layout_alignParentTop="false"
+                android:layout_margin="6dp">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/settings_course_caption"
+                    android:id="@+id/textView29"
+                    android:layout_alignParentTop="false"
+                    android:layout_alignParentLeft="true"
+                    android:layout_alignParentStart="true"
+                    android:layout_alignBottom="@+id/courseNameInput"
+                    android:layout_marginBottom="8dp" />
+
+                <EditText
+                    android:layout_width="150dp"
+                    android:layout_height="wrap_content"
+                    android:id="@+id/courseNameInput"
+                    android:layout_alignParentTop="true"
+                    android:layout_alignParentRight="true"
+                    android:layout_alignParentEnd="true" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/settings_course_example"
+                    android:id="@+id/textView31"
+                    android:layout_below="@+id/courseNameInput" />
+            </RelativeLayout>
+        </LinearLayout>
+
+    </android.support.v7.widget.CardView>
+    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/card_role"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="8dp"
+        card_view:cardCornerRadius="5dp">
+
+        <LinearLayout
+            android:orientation="vertical"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:padding="4dp">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/settings_mensaplan"
+                android:textStyle="bold"
+                android:id="@+id/textView32" />
+
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/textView32"
+                android:layout_alignParentLeft="true"
+                android:layout_alignParentStart="true"
+                android:layout_alignParentTop="false"
+                android:layout_margin="6dp">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/settings_role_caption"
+                    android:id="@+id/textView33"
+                    android:layout_alignParentTop="false"
+                    android:layout_alignParentLeft="true"
+                    android:layout_alignParentStart="true"
+                    android:layout_marginBottom="8dp"
+                    android:layout_alignBottom="@+id/mensaRoleInput" />
+
+                <Spinner
+                    android:layout_width="150dp"
+                    android:layout_height="wrap_content"
+                    android:id="@+id/mensaRoleInput"
+                    android:layout_alignParentTop="true"
+                    android:layout_alignParentRight="true"
+                    android:layout_alignParentEnd="true"
+                    android:entries="@array/settings_role_values" />
+
+            </RelativeLayout>
+        </LinearLayout>
+
+    </android.support.v7.widget.CardView>
+</LinearLayout>
index 27b94936edd4c314b50f9cf4f902433ec294f060..16272e8bd4613d3829d4aa49483e420f15d55ede 100644 (file)
@@ -2,7 +2,7 @@
 <resources>
     <color name="colorPrimary">#E3001B</color>
     <color name="colorPrimaryDark">#8D0011</color>
-    <color name="colorAccent">#7E878E</color>
+    <color name="colorAccent">#8D0011</color>
 
     <color name="color_dhbw_darkred">#8D0011</color>
     <color name="color_dhbw_lightred">#E3001B</color>
index 4a394bde12691fd2001e29e1e62019737eb4b3b1..cb90f709b43a5a95ff3e910f278728827b20d5f4 100644 (file)
@@ -32,6 +32,7 @@
     <string name="timeformat_vorlesungsplan_date">dd.MM.</string>
     <string name="timeformat_news_event">dd.MM.yyy HH:mm</string>
     <string name="timeformat_news_news">dd.MM.yyy</string>
+    <string name="mensaformat_price">#,##0.00 €</string>
 
     <string name="appsearch_title">Search: %s</string>
     <string name="appsearch_inapp">Campus App</string>
     <string name="news_toggle_stuv_events">STUV Events</string>
     <string name="news_followlink">mehr...</string>
 
+    <string name="settings_title">Einstellungen</string>
+    <string name="settings_vorlesungsplan">Vorlesungsplan</string>
+    <string name="settings_course_caption">Deine Kursbezeichnung:</string>
+    <string name="settings_course_example">Beispiel: tif13a, win14a, wwi15b</string>
+    <string name="settings_mensaplan">Mensasplan</string>
+    <string name="settings_role_caption">Deine Berufung:</string>
+    <string-array name="settings_role_values">
+        <item>Student</item>
+        <item>Mitarbeiter</item>
+        <item>Schüler</item>
+        <item>Gast</item>
+    </string-array>
+
     <string name="firstrun_select_couse">Bitte tippe deine Kursbezeichnung ein:</string>
-    <string name="firstrun_select_couse_example">(Beispiel: tif13a, win14a, wwi15b)</string>
+    <string name="firstrun_select_couse_example">()</string>
     <string name="firstrun_course_ok_button">Ok</string>
     <string name="firstrun_run_as_guest">Alternativ kannst du die App auch als Gast starten. Jedoch stehen im Gastmodus nicht alle Funktionen zur verfügung.</string>
     <string name="firstrun_run_as_guest_button">Als Gast starten</string>
     <string name="wifisettings_connect_button_disabled">WLAN Adapter deaktiviert</string>
     <string name="wifisettings_connect_button_ready">Verbunden!</string>
     <string name="wifisettings_connect_button_connecting">Verbinde...</string>
-    <string name="title_activity_settings">Settings</string>
-
+    <string name="wifisettings_connect_button_authenticating">Authentifiziere...</string>
+    <string name="wifisettings_connect_button_failed">Login fehlgeschlagen!</string>
 
     <string name="wifisettings_current_status">WLAN Status:</string>
     <string name="wifisettings_status_connected">Verbunden mit %1$s</string>
     <string name="wifisettings_status_disconnected">Nicht Verbunden</string>
 
 
-    <!-- Strings related to Settings -->
-    <string name="pref_kurs">Kursbezeichnung (z.B. tif13a)</string>
-    <string name="pref_mensa_role">Arbeitsposition</string>
-    <string-array name="pref_mensa_role_titles">
-        <item>Student</item>
-        <item>Mitarbeiter</item>
-        <item>Schüler</item>
-        <item>Gast</item>
-    </string-array>
-    <string-array name="pref_mensa_role_values">
-        <item>0</item>
-        <item>1</item>
-        <item>2</item>
-        <item>3</item>
-    </string-array>
-
-
     <!-- TODO: Remove or change this placeholder text -->
     <string name="hello_blank_fragment">Hello blank fragment</string>