From cea4ee15ef92f521ae962404bd1b3c25042219fa Mon Sep 17 00:00:00 2001 From: pk910 Date: Sat, 27 Feb 2016 16:40:39 +0100 Subject: [PATCH] alpha 0.0.2 --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 8 - .../java/de/dhbwloe/campusapp/CampusApp.java | 6 +- .../dhbwloe/campusapp/CampusAppContext.java | 7 + .../dhbwloe/campusapp/SettingsActivity.java | 267 ------------------ .../main/java/de/dhbwloe/campusapp/Tools.java | 27 ++ .../database/NewsDatabaseHelper.java | 4 +- .../campusapp/fragments/AppSearch.java | 10 +- .../campusapp/fragments/AppSearchDhbw.java | 6 + .../fragments/AppSearchInternal.java | 1 + .../campusapp/fragments/AppSearchStuv.java | 6 + .../campusapp/fragments/Dashboard.java | 28 +- .../campusapp/fragments/DashboardMensa.java | 11 +- .../fragments/DashboardVorlesungsplan.java | 11 +- .../dhbwloe/campusapp/fragments/FirstRun.java | 32 ++- .../campusapp/fragments/Impressum.java | 19 +- .../de/dhbwloe/campusapp/fragments/Mensa.java | 12 +- .../campusapp/fragments/MensaCard.java | 15 +- .../campusapp/fragments/MensaTagesplan.java | 4 +- .../de/dhbwloe/campusapp/fragments/News.java | 106 ++++++- .../campusapp/fragments/NewsListAdapter.java | 75 +++++ .../campusapp/fragments/NewsListItem.java | 69 +++++ .../dhbwloe/campusapp/fragments/Settings.java | 31 ++ .../campusapp/fragments/Vorlesungsplan.java | 14 +- .../VorlesungsplanGroupsListItem.java | 17 +- .../VorlesungsplanUpcomingCourseListItem.java | 2 +- .../VorlesungsplanUpcomingDayListItem.java | 6 +- .../campusapp/fragments/WifiSettings.java | 52 ++-- .../campusapp/mensaplan/MensaplanManager.java | 2 +- .../campusapp/search/SearchIndices.java | 17 +- .../campusapp/wifi/WifiNetworkSettings.java | 2 + .../ic_announcement_black_24dp.png | Bin 0 -> 158 bytes .../drawable-hdpi/ic_dashboard_black_24dp.png | Bin 0 -> 126 bytes .../res/drawable-hdpi/ic_event_black_24dp.png | Bin 0 -> 140 bytes .../ic_local_dining_black_24dp.png | Bin 0 -> 387 bytes .../res/drawable-hdpi/ic_wifi_black_24dp.png | Bin 0 -> 398 bytes .../ic_announcement_black_24dp.png | Bin 0 -> 127 bytes .../drawable-mdpi/ic_dashboard_black_24dp.png | Bin 0 -> 92 bytes .../res/drawable-mdpi/ic_event_black_24dp.png | Bin 0 -> 127 bytes .../ic_local_dining_black_24dp.png | Bin 0 -> 286 bytes .../res/drawable-mdpi/ic_wifi_black_24dp.png | Bin 0 -> 282 bytes .../ic_announcement_black_24dp.png | Bin 0 -> 186 bytes .../ic_dashboard_black_24dp.png | Bin 0 -> 115 bytes .../drawable-xhdpi/ic_event_black_24dp.png | Bin 0 -> 188 bytes .../ic_local_dining_black_24dp.png | Bin 0 -> 471 bytes .../res/drawable-xhdpi/ic_wifi_black_24dp.png | Bin 0 -> 507 bytes .../ic_announcement_black_24dp.png | Bin 0 -> 243 bytes .../ic_dashboard_black_24dp.png | Bin 0 -> 126 bytes .../drawable-xxhdpi/ic_event_black_24dp.png | Bin 0 -> 245 bytes .../ic_local_dining_black_24dp.png | Bin 0 -> 692 bytes .../drawable-xxhdpi/ic_wifi_black_24dp.png | Bin 0 -> 716 bytes .../ic_announcement_black_24dp.png | Bin 0 -> 314 bytes .../ic_dashboard_black_24dp.png | Bin 0 -> 127 bytes .../drawable-xxxhdpi/ic_event_black_24dp.png | Bin 0 -> 316 bytes .../ic_local_dining_black_24dp.png | Bin 0 -> 801 bytes .../drawable-xxxhdpi/ic_wifi_black_24dp.png | Bin 0 -> 915 bytes .../res/drawable/news_toggle_background.xml | 5 + .../res/layout-land/fragment_dashboard.xml | 8 +- .../res/layout/fragment_appsearch_list.xml | 14 +- .../main/res/layout/fragment_dashboard.xml | 8 +- .../main/res/layout/fragment_first_run.xml | 70 ++++- .../main/res/layout/fragment_impressum.xml | 99 ++++++- app/src/main/res/layout/fragment_news.xml | 47 ++- .../main/res/layout/fragment_news_item.xml | 77 +++++ app/src/main/res/layout/fragment_settings.xml | 13 + .../res/menu/activity_campus_app_drawer.xml | 16 +- app/src/main/res/values/colors.xml | 6 +- app/src/main/res/values/strings.xml | 150 +++++----- app/src/main/res/xml/pref_data_sync.xml | 21 -- app/src/main/res/xml/pref_general.xml | 33 --- app/src/main/res/xml/pref_headers.xml | 20 -- app/src/main/res/xml/pref_notification.xml | 27 -- 72 files changed, 905 insertions(+), 577 deletions(-) delete mode 100644 app/src/main/java/de/dhbwloe/campusapp/SettingsActivity.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/NewsListAdapter.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/NewsListItem.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/Settings.java create mode 100644 app/src/main/res/drawable-hdpi/ic_announcement_black_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_dashboard_black_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_event_black_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_local_dining_black_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_wifi_black_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_announcement_black_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_dashboard_black_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_event_black_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_local_dining_black_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_wifi_black_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_announcement_black_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_dashboard_black_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_event_black_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_local_dining_black_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_wifi_black_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_announcement_black_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_dashboard_black_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_event_black_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_local_dining_black_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_wifi_black_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_announcement_black_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_dashboard_black_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_event_black_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_local_dining_black_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_wifi_black_24dp.png create mode 100644 app/src/main/res/drawable/news_toggle_background.xml create mode 100644 app/src/main/res/layout/fragment_news_item.xml create mode 100644 app/src/main/res/layout/fragment_settings.xml delete mode 100644 app/src/main/res/xml/pref_data_sync.xml delete mode 100644 app/src/main/res/xml/pref_general.xml delete mode 100644 app/src/main/res/xml/pref_headers.xml delete mode 100644 app/src/main/res/xml/pref_notification.xml diff --git a/app/build.gradle b/app/build.gradle index f86b286..fbca006 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,4 +68,5 @@ dependencies { + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4923c3b..54385a9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -29,14 +29,6 @@ - - - diff --git a/app/src/main/java/de/dhbwloe/campusapp/CampusApp.java b/app/src/main/java/de/dhbwloe/campusapp/CampusApp.java index 15ae6dc..719d829 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/CampusApp.java +++ b/app/src/main/java/de/dhbwloe/campusapp/CampusApp.java @@ -152,8 +152,10 @@ public class CampusApp extends FragmentActivity { AppContext.getNavigationManager().navigatePage("News"); break; case R.id.nav_settings: - Intent settings = new Intent(AppContext.getMainActivity(), SettingsActivity.class); - AppContext.getMainActivity().startActivity(settings); + AppContext.getNavigationManager().navigatePage("Settings"); + break; + case R.id.nav_wifi: + AppContext.getNavigationManager().navigatePage("WifiSettings"); break; case R.id.nav_impressum: AppContext.getNavigationManager().navigatePage("Impressum"); diff --git a/app/src/main/java/de/dhbwloe/campusapp/CampusAppContext.java b/app/src/main/java/de/dhbwloe/campusapp/CampusAppContext.java index 11d3999..e4f0e49 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/CampusAppContext.java +++ b/app/src/main/java/de/dhbwloe/campusapp/CampusAppContext.java @@ -16,6 +16,7 @@ import de.dhbwloe.campusapp.fragments.Mensa; import de.dhbwloe.campusapp.fragments.MensaCard; import de.dhbwloe.campusapp.fragments.News; import de.dhbwloe.campusapp.fragments.PopupFragment; +import de.dhbwloe.campusapp.fragments.Settings; import de.dhbwloe.campusapp.fragments.SplashScreen; import de.dhbwloe.campusapp.fragments.Vorlesungsplan; import de.dhbwloe.campusapp.fragments.WebBrowser; @@ -56,6 +57,7 @@ public class CampusAppContext { new AppPage("News", News.class), new AppPage("WifiSettings", WifiSettings.class), new AppPage("FirstRun", FirstRun.class), + new AppPage("Settings", Settings.class), new AppPage("Impressum", Impressum.class), new AppPage("WebBrowser", WebBrowser.class), new AppPage("WebBrowserPopup", WebBrowser.class, 3) @@ -166,6 +168,11 @@ public class CampusAppContext { return oContextVariables; } + public String getResString(int id, Object... arguments) { + String format = getResString(id); + String res = String.format(format, arguments); + return res; + } public String getResString(int id) { String str = oMainActivity.getResources().getString(id); return str; diff --git a/app/src/main/java/de/dhbwloe/campusapp/SettingsActivity.java b/app/src/main/java/de/dhbwloe/campusapp/SettingsActivity.java deleted file mode 100644 index 86aedcc..0000000 --- a/app/src/main/java/de/dhbwloe/campusapp/SettingsActivity.java +++ /dev/null @@ -1,267 +0,0 @@ -package de.dhbwloe.campusapp; - - -import android.annotation.TargetApi; -import android.content.Context; -import android.content.Intent; -import android.content.res.Configuration; -import android.media.Ringtone; -import android.media.RingtoneManager; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.preference.ListPreference; -import android.preference.Preference; -import android.preference.PreferenceActivity; -import android.support.v7.app.ActionBar; -import android.preference.PreferenceFragment; -import android.preference.PreferenceManager; -import android.preference.RingtonePreference; -import android.text.TextUtils; -import android.view.MenuItem; -import android.support.v4.app.NavUtils; - -import java.util.List; - -/** - * A {@link PreferenceActivity} that presents a set of application settings. On - * handset devices, settings are presented as a single list. On tablets, - * settings are split by category, with category headers shown to the left of - * the list of settings. - *

- * See - * Android Design: Settings for design guidelines and the Settings - * API Guide for more information on developing a Settings UI. - */ -public class SettingsActivity extends AppCompatPreferenceActivity { - /** - * A preference value change listener that updates the preference's summary - * to reflect its new value. - */ - private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object value) { - String stringValue = value.toString(); - - if (preference instanceof ListPreference) { - // For list preferences, look up the correct display value in - // the preference's 'entries' list. - ListPreference listPreference = (ListPreference) preference; - int index = listPreference.findIndexOfValue(stringValue); - - // Set the summary to reflect the new value. - preference.setSummary( - index >= 0 - ? listPreference.getEntries()[index] - : null); - - } else if (preference instanceof RingtonePreference) { - // For ringtone preferences, look up the correct display value - // using RingtoneManager. - if (TextUtils.isEmpty(stringValue)) { - // Empty values correspond to 'silent' (no ringtone). - preference.setSummary(R.string.pref_ringtone_silent); - - } else { - Ringtone ringtone = RingtoneManager.getRingtone( - preference.getContext(), Uri.parse(stringValue)); - - if (ringtone == null) { - // Clear the summary if there was a lookup error. - preference.setSummary(null); - } else { - // Set the summary to reflect the new ringtone display - // name. - String name = ringtone.getTitle(preference.getContext()); - preference.setSummary(name); - } - } - - } else { - // For all other preferences, set the summary to the value's - // simple string representation. - preference.setSummary(stringValue); - } - return true; - } - }; - - /** - * Helper method to determine if the device has an extra-large screen. For - * example, 10" tablets are extra-large. - */ - private static boolean isXLargeTablet(Context context) { - return (context.getResources().getConfiguration().screenLayout - & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; - } - - /** - * Binds a preference's summary to its value. More specifically, when the - * preference's value is changed, its summary (line of text below the - * preference title) is updated to reflect the value. The summary is also - * immediately updated upon calling this method. The exact display format is - * dependent on the type of preference. - * - * @see #sBindPreferenceSummaryToValueListener - */ - private static void bindPreferenceSummaryToValue(Preference preference) { - // Set the listener to watch for value changes. - preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener); - - // Trigger the listener immediately with the preference's - // current value. - sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, - PreferenceManager - .getDefaultSharedPreferences(preference.getContext()) - .getString(preference.getKey(), "")); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setupActionBar(); - } - - /** - * Set up the {@link android.app.ActionBar}, if the API is available. - */ - private void setupActionBar() { - ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - // Show the Up button in the action bar. - actionBar.setDisplayHomeAsUpEnabled(true); - } - } - - @Override - public boolean onMenuItemSelected(int featureId, MenuItem item) { - int id = item.getItemId(); - if (id == android.R.id.home) { - if (!super.onMenuItemSelected(featureId, item)) { - NavUtils.navigateUpFromSameTask(this); - } - return true; - } - return super.onMenuItemSelected(featureId, item); - } - - /** - * {@inheritDoc} - */ - @Override - public boolean onIsMultiPane() { - return isXLargeTablet(this); - } - - /** - * {@inheritDoc} - */ - @Override - @TargetApi(Build.VERSION_CODES.HONEYCOMB) - public void onBuildHeaders(List

target) { - loadHeadersFromResource(R.xml.pref_headers, target); - } - - /** - * This method stops fragment injection in malicious applications. - * Make sure to deny any unknown fragments here. - */ - protected boolean isValidFragment(String fragmentName) { - return PreferenceFragment.class.getName().equals(fragmentName) - || GeneralPreferenceFragment.class.getName().equals(fragmentName) - || DataSyncPreferenceFragment.class.getName().equals(fragmentName) - || NotificationPreferenceFragment.class.getName().equals(fragmentName); - } - - /** - * This fragment shows general preferences only. It is used when the - * activity is showing a two-pane settings UI. - */ - @TargetApi(Build.VERSION_CODES.HONEYCOMB) - public static class GeneralPreferenceFragment extends PreferenceFragment { - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.pref_general); - setHasOptionsMenu(true); - - // Bind the summaries of EditText/List/Dialog/Ringtone preferences - // to their values. When their values change, their summaries are - // updated to reflect the new value, per the Android Design - // guidelines. - bindPreferenceSummaryToValue(findPreference("example_text")); - bindPreferenceSummaryToValue(findPreference("example_list")); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - if (id == android.R.id.home) { - startActivity(new Intent(getActivity(), SettingsActivity.class)); - return true; - } - return super.onOptionsItemSelected(item); - } - } - - /** - * This fragment shows notification preferences only. It is used when the - * activity is showing a two-pane settings UI. - */ - @TargetApi(Build.VERSION_CODES.HONEYCOMB) - public static class NotificationPreferenceFragment extends PreferenceFragment { - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.pref_notification); - setHasOptionsMenu(true); - - // Bind the summaries of EditText/List/Dialog/Ringtone preferences - // to their values. When their values change, their summaries are - // updated to reflect the new value, per the Android Design - // guidelines. - bindPreferenceSummaryToValue(findPreference("notifications_new_message_ringtone")); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - if (id == android.R.id.home) { - startActivity(new Intent(getActivity(), SettingsActivity.class)); - return true; - } - return super.onOptionsItemSelected(item); - } - } - - /** - * This fragment shows data and sync preferences only. It is used when the - * activity is showing a two-pane settings UI. - */ - @TargetApi(Build.VERSION_CODES.HONEYCOMB) - public static class DataSyncPreferenceFragment extends PreferenceFragment { - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.pref_data_sync); - setHasOptionsMenu(true); - - // Bind the summaries of EditText/List/Dialog/Ringtone preferences - // to their values. When their values change, their summaries are - // updated to reflect the new value, per the Android Design - // guidelines. - bindPreferenceSummaryToValue(findPreference("sync_frequency")); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - if (id == android.R.id.home) { - startActivity(new Intent(getActivity(), SettingsActivity.class)); - return true; - } - return super.onOptionsItemSelected(item); - } - } -} diff --git a/app/src/main/java/de/dhbwloe/campusapp/Tools.java b/app/src/main/java/de/dhbwloe/campusapp/Tools.java index 168446e..5829802 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/Tools.java +++ b/app/src/main/java/de/dhbwloe/campusapp/Tools.java @@ -6,6 +6,8 @@ import android.widget.AdapterView; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.Calendar; +import java.util.Date; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; @@ -70,4 +72,29 @@ public class Tools { } } + public static String getWeekdayString(long date) { + return getWeekdayString(date, true); + } + + public static String getWeekdayString(long date, boolean fullString) { + return getWeekdayString(new Date(date * 1000), fullString); + } + + public static String getWeekdayString(Date date) { + return getWeekdayString(date, true); + } + + public static String getWeekdayString(Date date, boolean fullString) { + int weekdayResIds[]; + if(fullString) + weekdayResIds = new int[] { R.string.week_sunday, R.string.week_monday, R.string.week_tuesday, R.string.week_wednesday, R.string.week_thursday, R.string.week_friday, R.string.week_saturday }; + else + weekdayResIds = new int[] { R.string.week_sunday_short, R.string.week_monday_short, R.string.week_tuesday_short, R.string.week_wednesday_short, R.string.week_thursday_short, R.string.week_friday_short, R.string.week_saturday_short }; + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int dow = cal.get(Calendar.DAY_OF_WEEK); + int weekdayResId = weekdayResIds[dow-1]; + return CampusAppContext.getInstance().getResString(weekdayResId); + } + } diff --git a/app/src/main/java/de/dhbwloe/campusapp/database/NewsDatabaseHelper.java b/app/src/main/java/de/dhbwloe/campusapp/database/NewsDatabaseHelper.java index e71066d..f80aaac 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/database/NewsDatabaseHelper.java +++ b/app/src/main/java/de/dhbwloe/campusapp/database/NewsDatabaseHelper.java @@ -77,8 +77,8 @@ public class NewsDatabaseHelper { public NewsItem[] getNewsItems(String source, long timeFrom, long timeTo) { String[] whereArgs = new String[] { source, - Long.toString(timeFrom), - Long.toString(timeTo) + Long.toString(timeTo), + Long.toString(timeFrom) }; Cursor resultSet = database.rawQuery("SELECT Id, Source, Time, UniqueId, ChkSum, Title, Summary, Content, Link, Categories FROM News WHERE Source = ? AND Time >= ? AND Time <= ?", whereArgs); ArrayList results = new ArrayList(); diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearch.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearch.java index 3ca9e02..10041e3 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearch.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearch.java @@ -62,7 +62,7 @@ public class AppSearch extends CampusAppFragment { AppContext = CampusAppContext.getInstance(); oFragmentView = inflater.inflate(R.layout.fragment_appsearch, container, false); - AppContext.setTitle("Search: " + sSearchQuery); + AppContext.setTitle(AppContext.getResString(R.string.appsearch_title, sSearchQuery)); ViewPager viewPager = (ViewPager) oFragmentView.findViewById(R.id.viewpager); setupViewPager(viewPager); @@ -84,19 +84,19 @@ public class AppSearch extends CampusAppFragment { CampusAppFragment fragment; Bundle args = new Bundle(); args.putString("query", sSearchQuery); - Log.i("AppSearch", "New result instances: "+sSearchQuery); + Log.i("AppSearch", "New result instances: " + sSearchQuery); fragment = new AppSearchInternal(); fragment.setArguments(args); - adapter.addFragment("Campus App", fragment); + adapter.addFragment(AppContext.getResString(R.string.appsearch_inapp), fragment); fragment = new AppSearchDhbw(); fragment.setArguments(args); - adapter.addFragment("DHBW Suche", fragment); + adapter.addFragment(AppContext.getResString(R.string.appsearch_indhbw), fragment); fragment = new AppSearchStuv(); fragment.setArguments(args); - adapter.addFragment("Stuv Suche", fragment); + adapter.addFragment(AppContext.getResString(R.string.appsearch_instuv), fragment); } viewPager.setAdapter(adapter); diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchDhbw.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchDhbw.java index 3159aca..7956c1f 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchDhbw.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchDhbw.java @@ -9,6 +9,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; +import android.widget.ProgressBar; import java.util.ArrayList; import java.util.List; @@ -30,6 +31,7 @@ public class AppSearchDhbw extends CampusAppFragment implements AppSearchProvide private AppSearchListAdapter appSearchAdapter; private DhbwSearchHelper seachHelper; private ArrayList searchResultItems = new ArrayList(); + private ProgressBar progressBar; @Override public void onCreate(Bundle savedInstanceState) { @@ -96,6 +98,8 @@ public class AppSearchDhbw extends CampusAppFragment implements AppSearchProvide if(bQueryExecuted && !reset) return; bQueryExecuted = true; + progressBar = (ProgressBar) oFragmentView.findViewById(R.id.searchProgress); + progressBar.setVisibility(View.VISIBLE); searchResultItems.clear(); @@ -107,6 +111,7 @@ public class AppSearchDhbw extends CampusAppFragment implements AppSearchProvide Log.i("SearchDhbw", "Success: "+results.size()); for(AppSearchListItem result : results) searchResultItems.add(result); + progressBar.setVisibility(View.GONE); if(appSearchAdapter != null) appSearchAdapter.notifyDataSetChanged(); else @@ -116,6 +121,7 @@ public class AppSearchDhbw extends CampusAppFragment implements AppSearchProvide @Override public void onSearchFailed(String error) { Log.i("SearchDhbw", "Failed: " + error); + progressBar.setVisibility(View.GONE); } }); } diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchInternal.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchInternal.java index 2c10dbb..ddc662e 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchInternal.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchInternal.java @@ -9,6 +9,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; +import android.widget.ProgressBar; import android.widget.TextView; import java.util.ArrayList; diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchStuv.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchStuv.java index 3aad66b..b1e6f83 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchStuv.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchStuv.java @@ -9,6 +9,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; +import android.widget.ProgressBar; import java.util.ArrayList; import java.util.List; @@ -32,6 +33,7 @@ public class AppSearchStuv extends CampusAppFragment implements AppSearchProvide private AppSearchListAdapter appSearchAdapter; private StuvSearchHelper seachHelper; private ArrayList searchResultItems = new ArrayList(); + private ProgressBar progressBar; @Override public void onCreate(Bundle savedInstanceState) { @@ -94,6 +96,8 @@ public class AppSearchStuv extends CampusAppFragment implements AppSearchProvide if(bQueryExecuted && !reset) return; bQueryExecuted = true; + progressBar = (ProgressBar) oFragmentView.findViewById(R.id.searchProgress); + progressBar.setVisibility(View.VISIBLE); searchResultItems.clear(); @@ -105,6 +109,7 @@ public class AppSearchStuv extends CampusAppFragment implements AppSearchProvide Log.i("SearchStuv", "Success: "+results.size()); for(AppSearchListItem result : results) searchResultItems.add(result); + progressBar.setVisibility(View.GONE); if(appSearchAdapter != null) appSearchAdapter.notifyDataSetChanged(); } @@ -112,6 +117,7 @@ public class AppSearchStuv extends CampusAppFragment implements AppSearchProvide @Override public void onSearchFailed(String error) { Log.i("SearchDhbw", "Failed: " + error); + progressBar.setVisibility(View.GONE); } }); diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/Dashboard.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/Dashboard.java index 79d1f65..574a4a7 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/Dashboard.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/Dashboard.java @@ -10,6 +10,7 @@ import android.view.InflateException; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import de.dhbwloe.campusapp.R; import de.dhbwloe.campusapp.search.SearchIndices; @@ -22,9 +23,9 @@ public class Dashboard extends CampusAppFragment { new SearchIndices("Dashboard", true) {{ setUpdateTime(1); setTarget("#Dashboard"); - setTitle("Dashboard"); - setDescription("Dashboard der App :)"); - addKeyWord("home, dashboard, start, übersicht, overview"); + setTitle(R.string.search_dashboard_title); + setDescription(R.string.search_dashboard_description); + addKeyWord(R.string.search_dashboard_keywords); }}, }; } @@ -33,8 +34,6 @@ public class Dashboard extends CampusAppFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - AppContext.getDatabaseManager().setRuntimeCache("CourseName", "tif13a"); } @Override @@ -50,7 +49,7 @@ public class Dashboard extends CampusAppFragment { view = inflater.inflate(R.layout.fragment_dashboard, container, false); } catch (InflateException e) { } - AppContext.setTitle("Dashboard"); + AppContext.setTitle(AppContext.getResString(R.string.dashboard_title)); String kursTag = AppContext.getDatabaseManager().getRuntimeCache("CourseName"); if(kursTag == null || kursTag.isEmpty()) { @@ -58,6 +57,23 @@ public class Dashboard extends CampusAppFragment { timetable.setVisibility(View.GONE); } + ImageView image; + image = (ImageView)view.findViewById(R.id.timetable_image); + image.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AppContext.getNavigationManager().navigatePage("Vorlesungsplan"); + } + }); + + image = (ImageView)view.findViewById(R.id.mensa_image); + image.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AppContext.getNavigationManager().navigatePage("Mensa"); + } + }); + return view; } } diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/DashboardMensa.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/DashboardMensa.java index 2d473a5..ccc2589 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/DashboardMensa.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/DashboardMensa.java @@ -17,6 +17,7 @@ import java.util.Date; import de.dhbwloe.campusapp.CampusAppContext; import de.dhbwloe.campusapp.CampusAppFragment; import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.Tools; import de.dhbwloe.campusapp.mensaplan.MensaTagesplan; /** @@ -90,13 +91,11 @@ public class DashboardMensa extends CampusAppFragment { else if(now < date + (86400*2)) datetext = AppContext.getResString(R.string.dashboard_calendar_tomorrow); else { - int weekdayResIds[] = new int[] { R.string.week_sunday, R.string.week_monday, R.string.week_tuesday, R.string.week_wednesday, R.string.week_thursday, R.string.week_friday, R.string.week_saturday }; - Calendar cal = Calendar.getInstance(); - cal.setTime(new Date(date * 1000)); - int dow = cal.get(Calendar.DAY_OF_WEEK); - SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM"); + Date dateObj = new Date(date * 1000); + String dayStr = Tools.getWeekdayString(dateObj); + SimpleDateFormat dateFormat = new SimpleDateFormat(AppContext.getResString(R.string.timeformat_dashboard_mensa)); - datetext = AppContext.getResString(weekdayResIds[dow]) + ", " + dateFormat.format(cal.getTime()); + datetext = dayStr + ", " + dateFormat.format(dateObj); } return datetext; } diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/DashboardVorlesungsplan.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/DashboardVorlesungsplan.java index e67b364..bb0105d 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/DashboardVorlesungsplan.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/DashboardVorlesungsplan.java @@ -140,7 +140,7 @@ public class DashboardVorlesungsplan extends CampusAppFragment { Date date; TextView leftCol, rightCol = null; RelativeLayout.LayoutParams params; - SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm"); + SimpleDateFormat dateFormat = new SimpleDateFormat(AppContext.getResString(R.string.timeformat_dashboard_vorlesungsplan_time)); int firstLeftColId = 0; if(events.size() > 0) { @@ -208,13 +208,10 @@ public class DashboardVorlesungsplan extends CampusAppFragment { else if(date1DayId == tomorrowDayId) datetext = AppContext.getResString(R.string.dashboard_calendar_tomorrow); else { - int weekdayResIds[] = new int[] { R.string.week_sunday, R.string.week_monday, R.string.week_tuesday, R.string.week_wednesday, R.string.week_thursday, R.string.week_friday, R.string.week_saturday }; - Calendar cal = Calendar.getInstance(); - cal.setTime(eventDate); - int dow = cal.get(Calendar.DAY_OF_WEEK); - SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM"); + String dayStr = Tools.getWeekdayString(eventDate); + SimpleDateFormat dateFormat = new SimpleDateFormat(AppContext.getResString(R.string.timeformat_dashboard_vorlesungsplan_date)); - datetext = AppContext.getResString(weekdayResIds[dow]) + ", " + dateFormat.format(eventDate); + datetext = dayStr + ", " + dateFormat.format(eventDate); } return datetext; } diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/FirstRun.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/FirstRun.java index b84a9ab..ac67163 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/FirstRun.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/FirstRun.java @@ -7,6 +7,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.EditText; import de.dhbwloe.campusapp.CampusAppFragment; import de.dhbwloe.campusapp.R; @@ -15,23 +16,48 @@ import de.dhbwloe.campusapp.R; * A simple {@link Fragment} subclass. */ public class FirstRun extends CampusAppFragment { + private View view; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_first_run, container, false); + view = inflater.inflate(R.layout.fragment_first_run, container, false); AppContext.setTitle("Campus App"); + final FirstRun that = this; Button startAppBtn = (Button)view.findViewById(R.id.startAppBtn); startAppBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - AppContext.getDatabaseManager().setRuntimeCache("AppStartCounter", "1"); - AppContext.getNavigationManager().navigatePage("SplashScreen", null, false); + that.startApp(); + } + }); + + Button courseSendBtn = (Button)view.findViewById(R.id.courseSubmitBtn); + courseSendBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(that.setCourse()) + that.startApp(); } }); return view; } + private void startApp() { + AppContext.getDatabaseManager().setRuntimeCache("AppStartCounter", "1"); + AppContext.getNavigationManager().navigatePage("SplashScreen", null, false); + } + + private boolean setCourse() { + EditText courseInput = (EditText)view.findViewById(R.id.courseInput); + String courseName = courseInput.getText().toString(); + if(courseName.length() <= 3) + return false; + + AppContext.getDatabaseManager().setRuntimeCache("CourseName", courseName); + return true; + } + } diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/Impressum.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/Impressum.java index a888f2a..66e09b3 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/Impressum.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/Impressum.java @@ -7,6 +7,7 @@ import android.support.v4.app.FragmentActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; import de.dhbwloe.campusapp.CampusAppFragment; import de.dhbwloe.campusapp.R; @@ -22,9 +23,9 @@ public class Impressum extends CampusAppFragment { new SearchIndices("Impressum", true) {{ setUpdateTime(1); setTarget("#Impressum"); - setTitle("Impressum"); - setDescription("Impressum der App"); - addKeyWord("impressum, kontakt, autor, author, contact, imprint"); + setTitle(R.string.search_impressum_title); + setDescription(R.string.search_impressum_description); + addKeyWord(R.string.search_impressum_keywords); }}, }; } @@ -33,7 +34,17 @@ public class Impressum extends CampusAppFragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_impressum, container, false); - AppContext.setTitle("Impressum"); + AppContext.setTitle(AppContext.getResString(R.string.impressum_title)); + + TextView urlView = (TextView) view.findViewById(R.id.sourceUrl); + urlView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Bundle args = new Bundle(); + args.putString("url", "http://dev.pk910.de/DHBWCampusApp"); + AppContext.getNavigationManager().navigatePage("WebBrowser", args, false); + } + }); return view; } diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/Mensa.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/Mensa.java index 2d641de..3f911a2 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/Mensa.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/Mensa.java @@ -21,6 +21,7 @@ import java.util.List; import de.dhbwloe.campusapp.CampusAppFragment; import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.Tools; import de.dhbwloe.campusapp.search.SearchIndices; /** @@ -33,9 +34,9 @@ public class Mensa extends CampusAppFragment { new SearchIndices("Mensa", true) {{ setUpdateTime(1); setTarget("#Mensa"); - setTitle("Mensa"); - setDescription("Aktuelle Mensapläne"); - addKeyWord("mensa, kantine, essen, mittagessen, mensaplan, plan, hunger, mittag"); + setTitle(R.string.search_mensa_title); + setDescription(R.string.search_mensa_description); + addKeyWord(R.string.search_mensa_keywords); }}, }; } @@ -59,7 +60,7 @@ public class Mensa extends CampusAppFragment { } } - AppContext.setTitle("Mensa Speiseplan"); + AppContext.setTitle(AppContext.getResString(R.string.mensa_title)); /* toolbar = (Toolbar) view.findViewById(R.id.toolbar); @@ -85,7 +86,6 @@ public class Mensa extends CampusAppFragment { if(viewDate < now) now = viewDate; - int weekdayResIds[] = new int[] { R.string.week_monday_short, R.string.week_tuesday_short, R.string.week_wednesday_short, R.string.week_thursday_short, R.string.week_friday_short, R.string.week_saturday_short, R.string.week_sunday_short }; Calendar cal = Calendar.getInstance(); cal.setTime(new Date(now * 1000)); cal.set(Calendar.HOUR_OF_DAY, 0); @@ -133,7 +133,7 @@ public class Mensa extends CampusAppFragment { } lastWeekday = weekday; - title = AppContext.getResString(weekdayResIds[weekday]); + title = Tools.getWeekdayString(date, false); bundle.putLong("date", date); adapter.addFragment(bundle, title); } diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaCard.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaCard.java index e465d72..93b9132 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaCard.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaCard.java @@ -26,24 +26,11 @@ import de.dhbwloe.campusapp.search.SearchIndices; public class MensaCard extends CampusAppFragment { private View view; - /* implement this for search results ;) */ - public static SearchIndices[] GetSearchIndices() { - return new SearchIndices[] { - new SearchIndices("MensaCard", true) {{ - setUpdateTime(1); - setTarget("#MensaCard"); - setTitle("Mensakarte auslesen"); - setDescription("Mensakarte Kontostand"); - addKeyWord("mensa, kantine, essen, mittagessen, mensaplan, karte, ausweis, geld, kontostand, euro"); - }}, - }; - } - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_mensa_card, container, false); - AppContext.setTitle("Mensa Guthaben"); + AppContext.setTitle(AppContext.getResString(R.string.mensacard_title)); Bundle args = getArguments(); if(args != null && args.containsKey("balance")) { diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaTagesplan.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaTagesplan.java index 0a6f53c..7216738 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaTagesplan.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaTagesplan.java @@ -37,8 +37,8 @@ public class MensaTagesplan extends CampusAppFragment { setActiveOnLoad = true; return; } - SimpleDateFormat titleDateFormater = new SimpleDateFormat("dd.MM.yyyy"); - AppContext.setTitle("Mensa: " + titleDateFormater.format(viewPlanDate)); + SimpleDateFormat titleDateFormater = new SimpleDateFormat(AppContext.getResString(R.string.timeformat_mensa_titledate)); + AppContext.setTitle(AppContext.getResString(R.string.mensa_dayplan_title, titleDateFormater.format(viewPlanDate))); } private void setupPlanDate() { diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/News.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/News.java index 6a48b68..5efb4f7 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/News.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/News.java @@ -7,10 +7,21 @@ import android.support.v4.app.FragmentActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ListView; + +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.ArrayList; import de.dhbwloe.campusapp.CampusAppFragment; import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.news.NewsItem; import de.dhbwloe.campusapp.search.SearchIndices; +import de.dhbwloe.campusapp.vorlesungen.CourseEvent; /** * A simple {@link Fragment} subclass. @@ -22,21 +33,106 @@ public class News extends CampusAppFragment { new SearchIndices("News", true) {{ setUpdateTime(1); setTarget("#News"); - setTitle("News"); - setDescription("News der DHBW & Stuv"); - addKeyWord("news, dhbw, stuv, termin, termine"); + setTitle(R.string.search_news_title); + setDescription(R.string.search_news_description); + addKeyWord(R.string.search_news_keywords); }}, }; } + private View view; + private NewsListAdapter listAdapter; + private ArrayList newsListItems = new ArrayList(); + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_news, container, false); - AppContext.setTitle("News"); + view = inflater.inflate(R.layout.fragment_news, container, false); + AppContext.setTitle(AppContext.getResString(R.string.news_title)); + + ListView newsItemsList = (ListView) view.findViewById(R.id.newsListView); + listAdapter = new NewsListAdapter(view.getContext(), R.layout.fragment_news_item, newsListItems); + newsItemsList.setAdapter(listAdapter); + + CompoundButton.OnCheckedChangeListener changeListener = new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + refreshNewsItems(); + } + }; + ((CheckBox) view.findViewById(R.id.showDhbwNews)).setOnCheckedChangeListener(changeListener); + ((CheckBox) view.findViewById(R.id.showStuvNews)).setOnCheckedChangeListener(changeListener); + ((CheckBox) view.findViewById(R.id.showStuvEvents)).setOnCheckedChangeListener(changeListener); + newsItemsList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + NewsListItem item = newsListItems.get(position); + if (item == null) + return; + + String link = item.getLink(); + if(link != null) { + Bundle args = new Bundle(); + args.putString("url", link); + AppContext.getNavigationManager().navigatePage("WebBrowser", args, false); + } + } + }); return view; } + @Override + public void onResume() { + super.onResume(); + refreshNewsItems(); + } + + private void refreshNewsItems() { + newsListItems.clear(); + + CheckBox showDhbwNewsChkbok = (CheckBox) view.findViewById(R.id.showDhbwNews); + CheckBox showStuvNewsChkbok = (CheckBox) view.findViewById(R.id.showStuvNews); + CheckBox showStuvEventsChkbok = (CheckBox) view.findViewById(R.id.showStuvEvents); + + if(showDhbwNewsChkbok.isChecked()) { + loadNewsSource("DHBW", true); + } + if(showStuvNewsChkbok.isChecked()) { + loadNewsSource("STUV", false); + } + if(showStuvEventsChkbok.isChecked()) { + loadEventsSource("STUV", false); + } + + Collections.sort(newsListItems, new Comparator() { + @Override + public int compare(NewsListItem item2, NewsListItem item1) { + long now = (new Date()).getTime()/1000; + return (int) (item2.getTimeDifference(now) - item1.getTimeDifference(now)); + } + }); + listAdapter.notifyDataSetChanged(); + } + + private 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 + for(NewsItem cnews : news) { + NewsListItem listItem = new NewsListItem(cnews, isDhbw); + newsListItems.add(listItem); + } + } + + private void loadEventsSource(String sourceName, boolean isDhbw) { + long now = (new Date()).getTime() / 1000; + + CourseEvent[] events = AppContext.getDatabaseManager().getCourseCalendarTimetable(sourceName, now, 30 * 6); // load 6 month + for(CourseEvent event : events) { + NewsListItem listItem = new NewsListItem(event, isDhbw); + newsListItems.add(listItem); + } + } } diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/NewsListAdapter.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/NewsListAdapter.java new file mode 100644 index 0000000..6de086e --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/NewsListAdapter.java @@ -0,0 +1,75 @@ +package de.dhbwloe.campusapp.fragments; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.ArrayList; + +import de.dhbwloe.campusapp.R; + +/** + * Created by pk910 on 27.02.2016. + */ +public class NewsListAdapter extends ArrayAdapter { + private Context context; + private int layoutResourceId; + private ArrayList data = new ArrayList(); + + public NewsListAdapter(Context context, int layoutResourceId, ArrayList data) { + super(context, layoutResourceId, data); + this.layoutResourceId = layoutResourceId; + this.context = context; + this.data = data; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + RecordHolder holder = null; + + if (row == null) { + LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + row = inflater.inflate(layoutResourceId, parent, false); + + holder = new RecordHolder(row); + row.setTag(holder); + } else { + holder = (RecordHolder) row.getTag(); + } + + final NewsListAdapter that = this; + final NewsListItem item = data.get(position); + + holder.newsTitle.setText(item.getFormatedDate() + ": " + item.getTitle()); + holder.newsDescription.setText(item.getDescription()); + if(item.isDhbwNews()) { + holder.newsDhbwLogo.setVisibility(View.VISIBLE); + holder.newsStuvLogo.setVisibility(View.GONE); + } else { + holder.newsDhbwLogo.setVisibility(View.GONE); + holder.newsStuvLogo.setVisibility(View.VISIBLE); + } + + return row; + } + + static class RecordHolder { + TextView newsTitle; + TextView newsDescription; + ImageView newsDhbwLogo; + ImageView newsStuvLogo; + + public RecordHolder(View view) { + this.newsTitle = (TextView) view.findViewById(R.id.newsTitleView); + this.newsDescription = (TextView) view.findViewById(R.id.newsDescriptionView); + + newsDhbwLogo = (ImageView) view.findViewById(R.id.dhbwLogo); + newsStuvLogo = (ImageView) view.findViewById(R.id.stuvLogo); + } + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/NewsListItem.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/NewsListItem.java new file mode 100644 index 0000000..e0da6c4 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/NewsListItem.java @@ -0,0 +1,69 @@ +package de.dhbwloe.campusapp.fragments; + +import java.text.SimpleDateFormat; +import java.util.Date; + +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.news.NewsItem; +import de.dhbwloe.campusapp.vorlesungen.CourseEvent; + +/** + * Created by pk910 on 27.02.2016. + */ +public class NewsListItem { + private String sNewsTitle; + private String sNewsDescription; + private String sNewsLink; + private long lNewsDate; + private boolean bIsDhbwNews; + private boolean bIsEvent; + + public NewsListItem(NewsItem newsItem, boolean isDhbwNews) { + sNewsTitle = newsItem.getTitle(); + sNewsDescription = newsItem.getSummary(); + sNewsLink = newsItem.getLink(); + lNewsDate = newsItem.getTime(); + bIsDhbwNews = isDhbwNews; + bIsEvent = false; + } + + public NewsListItem(CourseEvent newsEvent, boolean isDhbwEvent) { + sNewsTitle = newsEvent.getEventTitle(); + sNewsDescription = newsEvent.getEventLocation(); + sNewsLink = null; + lNewsDate = newsEvent.getEventFrom(); + bIsDhbwNews = isDhbwEvent; + bIsEvent = true; + } + + public long getTimeDifference(long now) { + return Math.abs(now - lNewsDate); + } + + public String getTitle() { + return sNewsTitle; + } + + public String getDescription() { + return sNewsDescription; + } + + public boolean isDhbwNews() { + return bIsDhbwNews; + } + + public String getFormatedDate() { + String dateFormat; + if(bIsEvent) + dateFormat = CampusAppContext.getInstance().getResString(R.string.timeformat_news_event); + else + dateFormat = CampusAppContext.getInstance().getResString(R.string.timeformat_news_news); + SimpleDateFormat format = new SimpleDateFormat(dateFormat); + return format.format(new Date(lNewsDate * 1000)); + } + + public String getLink() { + return sNewsLink; + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/Settings.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/Settings.java new file mode 100644 index 0000000..85a4442 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/Settings.java @@ -0,0 +1,31 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; + +/** + * A simple {@link Fragment} subclass. + */ +public class Settings extends CampusAppFragment { + + + public Settings() { + // Required empty public constructor + } + + + @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); + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/Vorlesungsplan.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/Vorlesungsplan.java index 6428e63..d4b8bb6 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/Vorlesungsplan.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/Vorlesungsplan.java @@ -35,16 +35,16 @@ public class Vorlesungsplan extends CampusAppFragment { new SearchIndices("Vorlesungsplan", true) {{ setUpdateTime(1); setTarget("#Vorlesungsplan"); - setTitle("Vorlesungsplan"); - setDescription("Vorlesungsplan dienes Kurses"); - addKeyWord("vorlesung, vorlesungen, plan, vorlesungsplan, stundenplan, termin, termine, kursplan, blockplan, block, zeit, zeiten"); + setTitle(R.string.search_vorlesungsplan_title); + setDescription(R.string.search_vorlesungsplan_description); + addKeyWord(R.string.search_vorlesungsplan_keywords); }}, new SearchIndices("Vorlesungsplan", true) {{ setUpdateTime(1); setTarget("#Vorlesungsplan#view=exams"); - setTitle("Vorlesungsplan"); - setDescription("Klausurübersicht dienes Kurses"); - addKeyWord("klausuren, prüfungen, exams, termine, zeitpunkt, plan, ergebnisse"); + setTitle(R.string.search_vorlesungsplan_klausur_title); + setDescription(R.string.search_vorlesungsplan_klausur_description); + addKeyWord(R.string.search_vorlesungsplan_klausur_keywords); }}, }; } @@ -53,7 +53,7 @@ public class Vorlesungsplan extends CampusAppFragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_vorlesungsplan, container, false); - AppContext.setTitle("Vorlesungsplan"); + AppContext.setTitle(AppContext.getResString(R.string.vorlesungsplan_title)); ViewPager pager = (ViewPager) view.findViewById(R.id.viewpager); setupViewPager(pager); diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/VorlesungsplanGroupsListItem.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/VorlesungsplanGroupsListItem.java index 01d6ee7..73c5053 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/VorlesungsplanGroupsListItem.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/VorlesungsplanGroupsListItem.java @@ -3,6 +3,9 @@ package de.dhbwloe.campusapp.fragments; import java.text.SimpleDateFormat; import java.util.Date; +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.R; + /** * Created by pk910 on 20.02.2016. */ @@ -37,19 +40,25 @@ public class VorlesungsplanGroupsListItem { } public String getFirstEvent() { - SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm"); + if(firstEvent == 0) + return null; + SimpleDateFormat dateFormat = new SimpleDateFormat(CampusAppContext.getInstance().getResString(R.string.timeformat_vorlesungsplan_fulldate)); Date date = new Date(firstEvent*1000); return dateFormat.format(date); } public String getLastEvent() { - SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm"); + if(lastEvent == 0) + return null; + SimpleDateFormat dateFormat = new SimpleDateFormat(CampusAppContext.getInstance().getResString(R.string.timeformat_vorlesungsplan_fulldate)); Date date = new Date(lastEvent*1000); return dateFormat.format(date); } public String getNextEvent() { - SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm"); + if(nextEvent == 0) + return null; + SimpleDateFormat dateFormat = new SimpleDateFormat(CampusAppContext.getInstance().getResString(R.string.timeformat_vorlesungsplan_fulldate)); Date date = new Date(nextEvent*1000); return dateFormat.format(date); } @@ -57,7 +66,7 @@ public class VorlesungsplanGroupsListItem { public String getNextKlausurEvent() { if(nextKlausurEvent == 0) return null; - SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm"); + SimpleDateFormat dateFormat = new SimpleDateFormat(CampusAppContext.getInstance().getResString(R.string.timeformat_vorlesungsplan_fulldate)); Date date = new Date(nextKlausurEvent*1000); return dateFormat.format(date); } diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/VorlesungsplanUpcomingCourseListItem.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/VorlesungsplanUpcomingCourseListItem.java index e706e3f..6fc45f4 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/VorlesungsplanUpcomingCourseListItem.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/VorlesungsplanUpcomingCourseListItem.java @@ -24,7 +24,7 @@ public class VorlesungsplanUpcomingCourseListItem { public void updateContainerView(View view) { - SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm"); + SimpleDateFormat dateFormat = new SimpleDateFormat(CampusAppContext.getInstance().getResString(R.string.timeformat_vorlesungsplan_time)); TextView timeFrom = (TextView) view.findViewById(R.id.timeFrom); TextView timeTo = (TextView) view.findViewById(R.id.timeTo); TextView location = (TextView) view.findViewById(R.id.location); diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/VorlesungsplanUpcomingDayListItem.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/VorlesungsplanUpcomingDayListItem.java index d8d1104..d9ced0c 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/VorlesungsplanUpcomingDayListItem.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/VorlesungsplanUpcomingDayListItem.java @@ -53,13 +53,13 @@ public class VorlesungsplanUpcomingDayListItem { } public String getFormatedDate() { - SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM."); + SimpleDateFormat dateFormat = new SimpleDateFormat(CampusAppContext.getInstance().getResString(R.string.timeformat_vorlesungsplan_date)); Date date = new Date(cardDate * 1000); - int weekdayResIds[] = new int[] { R.string.week_saturday, R.string.week_sunday, R.string.week_monday, R.string.week_tuesday, R.string.week_wednesday, R.string.week_thursday, R.string.week_friday }; + int weekdayResIds[] = new int[] { R.string.week_sunday, R.string.week_monday, R.string.week_tuesday, R.string.week_wednesday, R.string.week_thursday, R.string.week_friday, R.string.week_saturday }; Calendar cal = Calendar.getInstance(); cal.setTime(date); - int dow = cal.get(Calendar.DAY_OF_WEEK); + int dow = cal.get(Calendar.DAY_OF_WEEK)-1; return CampusAppContext.getInstance().getResString(weekdayResIds[dow]) + ", " + dateFormat.format(date); } 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 1ce7001..615d7ba 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java @@ -58,9 +58,9 @@ public class WifiSettings extends CampusAppFragment { new SearchIndices("WifiSettings", true) {{ setUpdateTime(1); setTarget("#WifiSettings"); - setTitle("Wifi Settings"); - setDescription("WLAN Konfiguration für dieses Gerät"); - addKeyWord("wlan, secure, dhbw-secure, wifi, w-lan, wireless, internet, netzwerk"); + setTitle(R.string.search_wifi_title); + setDescription(R.string.search_wifi_description); + addKeyWord(R.string.search_wifi_keywords); }}, }; } @@ -88,29 +88,31 @@ public class WifiSettings extends CampusAppFragment { } } - 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; + 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(); } - updateWifiState(); } NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); diff --git a/app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaplanManager.java b/app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaplanManager.java index 251c36c..20ef99a 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaplanManager.java +++ b/app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaplanManager.java @@ -64,7 +64,7 @@ public class MensaplanManager extends XmlRequestHelper { if (m.find()) { NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN); try { - Number result = nf.parse(m.group(1)); + Number result = nf.parse(m.group(1)); return (int)(result.doubleValue()*100); } catch (ParseException e) { return 0; diff --git a/app/src/main/java/de/dhbwloe/campusapp/search/SearchIndices.java b/app/src/main/java/de/dhbwloe/campusapp/search/SearchIndices.java index fe1db98..9b4cab5 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/search/SearchIndices.java +++ b/app/src/main/java/de/dhbwloe/campusapp/search/SearchIndices.java @@ -1,13 +1,16 @@ package de.dhbwloe.campusapp.search; +import java.util.ArrayList; import java.util.Date; +import de.dhbwloe.campusapp.CampusAppContext; + /** * Created by pk910 on 19.01.2016. */ public class SearchIndices { private String keyname = null; - private StringBuffer keywordsBuffer = new StringBuffer(); + private StringBuilder keywordsBuffer = new StringBuilder(); protected boolean isStatic = false; protected String target = new String(); protected String keywords = null; @@ -31,6 +34,10 @@ public class SearchIndices { keywordsBuffer.append(words); } + public void addKeyWord(int words) { + addKeyWord(CampusAppContext.getInstance().getResString(words)); + } + public void setTarget(String target) { this.target = target; } @@ -43,6 +50,14 @@ public class SearchIndices { this.title = title; } + public void setDescription(int description) { + this.description = CampusAppContext.getInstance().getResString(description); + } + + public void setTitle(int title) { + this.title = CampusAppContext.getInstance().getResString(title); + } + public void setUpdateTime(long updateTime) { this.updateTime = updateTime; } diff --git a/app/src/main/java/de/dhbwloe/campusapp/wifi/WifiNetworkSettings.java b/app/src/main/java/de/dhbwloe/campusapp/wifi/WifiNetworkSettings.java index 3c1ba68..96a561f 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/wifi/WifiNetworkSettings.java +++ b/app/src/main/java/de/dhbwloe/campusapp/wifi/WifiNetworkSettings.java @@ -83,6 +83,7 @@ public class WifiNetworkSettings { "uD3s1d70097Es++KwAg=\n" + "-----END CERTIFICATE-----\n")); + /* presets.add((new WifiNetworkSettings("dhbw-802.1x", "dhbw-802.1x", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE)). setWpaEnterprise( new int[]{WifiConfiguration.KeyMgmt.WPA_EAP, WifiConfiguration.KeyMgmt.IEEE8021X}, @@ -111,6 +112,7 @@ public class WifiNetworkSettings { "xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU\n" + "Cm26OWMohpLzGITY+9HPBVZkVw==\n" + "-----END CERTIFICATE-----")); + */ presets.add((new WifiNetworkSettings("eduroam", "eduroam", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE)). setWpaEnterprise( diff --git a/app/src/main/res/drawable-hdpi/ic_announcement_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_announcement_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..8353564192bbfd9143db9cc48dff7bf7ba41a564 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K8s;7%%NCo5D%Nuzc40u>Cu0C{Y zp28&aQ*L6yEE>TL3fnXeeE)r2<=Jmt4Y&FoqDu{yd^xG|k0wldT1B8K;tEY=&NCjiE0%H#odmG!D3ylpr zRt#MKj&n(KobHoyi730G@JiK#so@_R@5?=H_dhxtYH57Gm9b3LwBui8Z-dUo1Q7;? Y|k0wldT1B8K8u&0Y-NCo5DDH}PD2Jjr&^5FTz zzv3PDg{G^8-mz%o=bIBE6*BWN^NVeD|HEG>T<|vUc3IHo=;SLqOJLQb3tuM4Sv|S% p=ls0g6QoUTJaraL{F!(vX7gRCezU~ohCt&PJYD@<);T3K0RRIkGkgF5 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_local_dining_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_local_dining_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c98123ca2de9c51c7f92a48453a42aa7a0e0b029 GIT binary patch literal 387 zcmV-}0et?6P)NklVF_<#2{f2gUv*w5mqKPx8pKk z(9|nwqH%sX5BiF&-`{vnJ~`*1+CPTO=u)|C7>TWXyFhS zTAo^@RUD3cY^s$D9J&nBG45L`#t|-JTS%9KHQ13fb?IPfWVuQ+oYB9 zV*sTpWp3#O@SucA0aQvUb3+e+O?fjmWi!`w1Nc&@GSh{TP#r{8&mN8|VQgxbI<&3}wVLjvjlmP#PQCCO$0UO-_uO59~uK)l507*qoM6N<$f;lg*O#lD@ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_announcement_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_announcement_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..4b2e82c744ec0be02299bb15f61b97e5e24e19f6 GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1H%}MGkP61+1;QLD6(>K;XQ(;) zfIpl+%uiyUOU4g>nInrCcfVM{=Hs!cE%9Z$c)?c}t?#baFF2I^Qw+6aUU^Eg;S{?d Z1A}OoiK~;SLIlu622WQ%mvv4FO#tT;C$<0p literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_dashboard_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_dashboard_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c0cb8620dc2c227e1e774f4505011d81c5387510 GIT binary patch literal 92 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1WltB!kP60Ri9HYOwT|eStzs0N pB(tWZoBfyd7^36vC@ z;GA-RH{S5a;uY+g>J0IVB7G$ITG(t7GO`>h%6?=lsNb+pX~v|u1z8*k6`l?|^$#bo ZGFa6dJ8rq6o(E_mgQu&X%Q~loCIDl{Ch-6O literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_local_dining_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_local_dining_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f048dcfccd791483f653807ed114adcef393bbe9 GIT binary patch literal 286 zcmV+(0pb3MP)kb;)tM0gTRLgS|Un%n{b=xXBbK@_2Vh9;62hi*5GHdoQ`W)@FtJ2WT2zPqREBm zo1%|6vXnSPm%x)p|32mu(dE4IZY91`O(N7XSbN07*qoM6N<$f&z|xUH||9 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_wifi_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_wifi_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c5bc88d6903f8f3ff4c4bd2d8e8f25de338d4a5f GIT binary patch literal 282 zcmV+#0pY*2JRGVOTrh46-32R`D^!sA)woiFxL+;NrI9 z2{(+5i#PB0#Xo-w*|wUd+oY*xi~Kfq{D?Dp+BVEp@oXgK7*7Ly>S;LeiimfZ{ft!&qhvVvV0h{?dYLIp7s gp!g+FypSwxe;Ai?7_mdKI;Vst0C>J5Hvj+t literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_event_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_event_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..4b3cefa2bae6567dbb5b6bf0352d7bafd6ce8964 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DW=|K#kP61P*BrSH8Hltz{BN?c zT|BFJLsZW6S33$cIVaiZzWB45w`RiC$L*JkYv1#jFtGc@1Uxn~VxB6Ler4xUH<`c# zYF%d)4|r|V=8D{S`#%F))NT14^{fU74(qGsFZ4AqGPAv6Wn$arFTdZCMMBeT!-8{X mRaOWJXCHswqtaCTj`4ezw1|hsKOdlT7(8A5T-G@yGywqD6+;gI literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_local_dining_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_local_dining_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f5c20a730cea825341b1e7728d95acf97d5ec798 GIT binary patch literal 471 zcmV;|0Vw{7P) zJxg0r9ETqh6$eB2Hho>Y^b2$-r48bssLA!l7l;xNLGS~pi#R#y;O3%>2qF$njsX$v z?vgf8NQZRj2gprNx68%+a?i1xq0l_P^_=JV)90U{&k$qma={hHRLPObJ^|p)AZs)+ ziTz}fo=jtia8JD93#MxwCO~tK!9DSg7DlecsQeH=h?vF3Yo(7@L9l{xPGq^mr0fvE zCdN6jib>rif_02zBFlG6;0(bhOjjaA@eyO$4uWBRIVQHPfe%PFFiwdRi@rey$q2VH zQ3jHnTLM*j@{~IE#6haQMursf*b_mDzR5EzJm;$=vDj1pgSSZRiQiNJfRG5SuaU=* z7kqo5UjhKiXnmb!G61+Ignlm8w+WeIk5i7=;ynXAnwK=X^qp8=#DZf&ULR4y6R!x9 z*T;bXUkJUwgwRJs9uq=eA`l6WdO#$+>b)lBV|_c;i-d2zNchovNN9Z#z;8n9y(Jd3 z-d95Fy(PvI`WdWTxIj4<+eEpt+Y49 zWm9sbT(Bh;t7xs}F$ctaXUu-5nS+|w`#R72Q_p4p>wBuogY8dMB%rw=UUafh0?v@J5!9SB_g^UfP}USyn@4oR+Wl#s^Hv zYLC};si@O<#Ror{G-ky4Vn&Ra^hs7BcXWu^SoW=dF=n4`<*c^f4PVQCBO8<$Fc*F7 zsXf|Nv)EqGqG!M9_lKhjQTY}rwnjq=j`%Hk?gIl;W-?Dj%dCC~NC zslh6bWb@2J-4gXB-lG}45)3O;I2bRBiH=0H_f>_Ghu^zkn-0Hp+3uogS-kh@Bc=^n zq?|TGK1B72BW~;TFI~oy>*L==EZY13!wP+l8P;pLx?AtwUw>QfTBnYNe3zAE&Y-#p xGI4@B3XQFgM+6NJqWT7n2pTA)*Ecma{Qw$r$a30$?=AoU002ovPDHLkV1j(j@8xjuJL2-d;VeA(yuN!mp_Z7B8G>^E_rz`svmcd$g;=&in{C?%}gT z`1AMcmIA`>Jr><)%GjWK)Xdkxx@+$22BV{SE|W!fONX$2ndQhPnKHq#o~=p(NU?>^ z0P>f7`IZP|PffqT-@HjGBY^p9)PjjiSfpM$Fi(+u;rYQf!*}%+ixq_dj~5(s>}{4} mH|5Kc0ST-)S9p%|3rl(Z)qjf}@09|5!QkoY=d#Wzp$PymJz;qO literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_dashboard_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_dashboard_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ad14dfeb9fcb3669d59c0077ab851f2cc95eff6b GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xf3?%cF6c@$Y|kB0iH@rawsJF@?)b&eT)LwwA+h+YjG%`?Ba4uRvoOP6 z79kLOmdc5Jc>*UO9FPc`>I4U-ugTWBGKU>Z*KJE&AQWz#r#MHLGu?X~;~dL>8aFOn kNd0xnRF!k-l%RR{au57@H@#DDEzlnfp00i_>zopr08AcQrvLx| literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_local_dining_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_local_dining_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5316cb7f47519129d18d09de7aa60c3df8f440ef GIT binary patch literal 692 zcmV;l0!#ggP)JLnxutft#%S!6a^2h`tI+azjr zs#Op{bm?Xb)j>qGAf;7;cm(5M`kHg!lN(-_`+TPi2R@M88Nd|HU3j;i1x8y!%F@p~^3Q!Ck5?VMMG#7{Nt>8PlvU}*qtgh| z0@5L>NW?zTNkl0={B=-nnsf^B+9e{&BS>u0VZ?J^=|Js*b5b#rHd95s*Mr&!f=g;Q zJy|n|VJA_0j>IGlAf{bJ?OB7f2cD#5EEqvW)P|8*q+Z0hGpO|`rw=_yQ)bXU)V3fo zNUIR@x=?H5y?XvgCG9tJUJ==GL?Sb<8zMDjGor zJj?UFDbfiO=QSz3+ZjoEj7!>T;LNcWQ#<%(CS{oQYv#OR4YA5M{QrJx=6t3=3O75+%z44by3ap($x*Vjs2&zfocp9{ zV*^L%rH=x;SW1iQt|LuEa^hzo>70@H92;qZoWdC;O~AG>rf_PY453pv;Ym6tJW1z- zCn-PWQh1X7pl2LXDF{h<4TdLaoS-CybFan;N>Vt(HO?YZ*(HVIqyRifWjo2vx$AHO zl2lH3lFPZ{Z~~HC&TWSikmPc1xg3R5aY^AhI;lb?04D^=<=kWmKv0sxx#4hvl7^7F zU3WRA+8xp$rdIOK&M}atSq@gx%%9_Hc8*R`IZ7*jlZNaZjpT5Qq@tY@LAq+^Bqb#! ah3pseEbOPv=J5Xj0000kL^Bm)QHogY6e;Lp#db)7G`7RDSO-NxqOFKS zW90?^1d5pI+(lGSM6FO>S{v)s4pEZQHpyc~4SApQyh|^`eSYiR@lC?zj#FDJYPDLe zR_oDcmtlt-F`>D%2}c|U zO_#(1yQFEGhQhk+aY`&{zj#5H|80YP&Wk1QyuCKa&of%$Dy`*dxoq~8xXL@>ZvWAX zW^-KlvJ1}o$O}-E_H}6|-dd{P6x7-~DJnt>vnHMwnxn2odofVV2 z;IKhA%0{>C-g8k*?u-Yt@szpbZ{=f;>y%fgCwyWd`KNo*3ierSd&-=5Y*xfQ4k!M# zE_lf@uOtqB->u59$p?uadd$CsHiv!fL1pUmjkw|hSxHxnYA9R7%dRGK+9b6+WVJl( zOjgeFq$%C9thdEZ`;9y5)1@6XZoi$jST9SDFPG&clO}XXxyy*D#JkaqDI@Nb(&@wO z90*?5NL*&OlNQD7S#;8Fo!V)5Lr}nVhE0n(H*Hv#^4U?~b);p7QuUe?3vN=cl04#^ zSi;WfSAu6<6-(L`Lkb$rzN7rhk?pK)o)XIAxU z>kK&Pm=jAo=AZ%VRA!?C{#fDb#sM2u;IYJ~n%@m7r2J>xqEXjW5Hl87OG!Zm!kWrS yBn1@;)#s#>0@VwZ<|LAWH6#d7tJP|?TJ3L}-2~@>V+GX!0000Zx z_jVi+%5@Z~O)|{l)lf!Fh8^xIixDUs9GxPCS zU+})aVR3^L1LJ*R1&0H7I4iu_I0O_N8Wnhtr%EOPI@EHu#z?D4fW9!^!ADFVdQ&MBb@07N;4 A1ONa4 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_dashboard_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_dashboard_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..8fad114fe9f3f5a207a2dd9008c5e94ce7f6330d GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeK3?y%aJ*@^(YymzYu0R?HmZtAK52P4Ng8YIR z9G=}s19H?oT^vIy7?UNgH2enw`2#E`=LGUuuweq{y^^NqmJ zBQu2TYR4A;<6&>yJnz5{X12kw_rq+0IdV=;H!i z>|hoD4eL0^JEoCE`^jS(Fi^!?n(@tM?lXfdxtG+Ek>>~nuL*0p%^b4KCP~P^83gf~ zu$M7JwVCt@HB2BL6LJi(fT%ag22ybyLA)j8d4ipcf@`UJ~vh#+^sWDB?V!nvyx-FiPGaii8%@(2bb46(#+M^Mnzzevt~4 z)FaLlCd~n_LC*)r37Zh}PJ^CIeCML)=dM6It+2tdCPz@8AMzBM5LeS3m`eS1Q< z`T-;)lz?fjuHzX+a^$B);eS%tFpJ3P5C#d!H3FCHseFEdOP)?Urm4Tt5!VQcKc6or@S2L8299of#{`%*asuB4UPhP++?(G{o!|L3HRA zY8c;+!yg1Wb*Ld~)~UZR(9Cq2y4a_kMmOG{YrC&|yW)C0|AF_5Z8x9Y3WY+UP$(1% zg+ih5Pt7K2(dN;C+O(LY*@#wWn)%k+qT6YGLYexU(rt^x3#J-nL}>K14}7mzNZDn( zt@D%y!{i<->~KvOVt@M1a^uucvt_#V3stP&50)A$b2D|hDrD4Eo3+VENxOZ5?Av3W zQnint@2F724r{O8h}jMb!%&aM4B15A3d7hp#v8OctMv-Q+-0lOk=_*hg%Q#|lcluG z6(Mz39MmbX*jzJBHo=_(O)$m7p0QY>%b`Ji4EI_h+8A4fRGqQe5;KevqfV=(I-M0# z)ul;<2mF-k<8F->gVn0T5h1#xrl??!3qn-qY|^3{T7B%i5Y=yHxrtZY5F$F_H4Un% z(Gtgmh^||xJg-MR(0(*eDYM7Q;i!k-3T3<_RP2P8lw_%7kyAp&-u5p^#UI`K8q`9g z^%Z}W6VgrSF-IeHVtBxOt;)NCvW-zc*0iyGflik+oR4eGvN~@aoTKh zT1e4J8$BdW$!F=#hr~KDnymDTFvxzkLX#NlC93WYYn>N{*f||;S9A5=a8amIzgwwJ z4L$CdQ00!8ttLkMRLG=$9~muUlN}N=?11}a=vkM9jQhh}8Cj%H$UZl`ECX-qPx*b$ zaXoh0rN?o-DgPQ)tGXoe+y0&2^+cH$)HqM-u*)?eqJ-K{*x^-URnly+o$1ccenOv4 zGo;b#D}C9YA2(r#sRm=Z-5H-BG2wz24aEW%Gdn+G!d~|ps{8EE literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/news_toggle_background.xml b/app/src/main/res/drawable/news_toggle_background.xml new file mode 100644 index 0000000..6bd2978 --- /dev/null +++ b/app/src/main/res/drawable/news_toggle_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_dashboard.xml b/app/src/main/res/layout-land/fragment_dashboard.xml index 994876f..b23f1ea 100644 --- a/app/src/main/res/layout-land/fragment_dashboard.xml +++ b/app/src/main/res/layout-land/fragment_dashboard.xml @@ -33,7 +33,7 @@ @@ -76,7 +76,7 @@ diff --git a/app/src/main/res/layout/fragment_appsearch_list.xml b/app/src/main/res/layout/fragment_appsearch_list.xml index ee1c433..3b191a0 100644 --- a/app/src/main/res/layout/fragment_appsearch_list.xml +++ b/app/src/main/res/layout/fragment_appsearch_list.xml @@ -1,4 +1,4 @@ - - + + + diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index 4f0d324..8c8ac46 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -22,7 +22,7 @@ diff --git a/app/src/main/res/layout/fragment_first_run.xml b/app/src/main/res/layout/fragment_first_run.xml index 8596249..436457e 100644 --- a/app/src/main/res/layout/fragment_first_run.xml +++ b/app/src/main/res/layout/fragment_first_run.xml @@ -3,18 +3,80 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="de.dhbwloe.campusapp.fragments.FirstRun"> + tools:context="de.dhbwloe.campusapp.fragments.FirstRun" + android:padding="8dp"> - + + + + + + + + + +