From fb155550b37bb8804ba6b7670c62764225ae51b6 Mon Sep 17 00:00:00 2001 From: denizk0461 Date: Sat, 20 May 2023 23:01:53 +0200 Subject: [PATCH] New fragments can now be accessed via an experimental setting. They tell the user via snack message that their functionality is not yet implemented --- .../weserplaner/activity/MainActivity.kt | 7 +++ .../weserplaner/db/AppRepository.kt | 10 ++++ .../fragment/ExamOverviewFragment.kt | 24 ---------- .../fragment/RoomFinderFragment.kt | 12 +++++ .../weserplaner/fragment/SettingsFragment.kt | 11 ++++- .../fragment/TaskOverviewFragment.kt | 36 ++++++++++++++ .../weserplaner/model/SettingsPreferences.kt | 5 ++ .../viewmodel/ExamOverviewViewModel.kt | 11 ----- .../weserplaner/viewmodel/MainViewModel.kt | 6 +++ .../viewmodel/SettingsViewModel.kt | 7 +++ .../viewmodel/TaskOverviewViewModel.kt | 11 +++++ app/src/main/res/drawable/location.xml | 5 ++ app/src/main/res/drawable/task.xml | 5 ++ .../res/layout/fragment_exam_overview.xml | 6 --- .../main/res/layout/fragment_room_finder.xml | 31 ++++++++++-- app/src/main/res/layout/fragment_settings.xml | 47 ++++++++++++++++++- .../res/layout/fragment_task_overview.xml | 31 ++++++++++++ app/src/main/res/menu/nav_view_items.xml | 12 ++++- .../main/res/navigation/main_nav_graph.xml | 13 ++++- app/src/main/res/values-de/strings.xml | 25 +++++++++- app/src/main/res/values/strings.xml | 27 ++++++++--- 21 files changed, 285 insertions(+), 57 deletions(-) delete mode 100644 app/src/main/java/com/denizk0461/weserplaner/fragment/ExamOverviewFragment.kt create mode 100644 app/src/main/java/com/denizk0461/weserplaner/fragment/TaskOverviewFragment.kt delete mode 100644 app/src/main/java/com/denizk0461/weserplaner/viewmodel/ExamOverviewViewModel.kt create mode 100644 app/src/main/java/com/denizk0461/weserplaner/viewmodel/TaskOverviewViewModel.kt create mode 100644 app/src/main/res/drawable/location.xml create mode 100644 app/src/main/res/drawable/task.xml delete mode 100644 app/src/main/res/layout/fragment_exam_overview.xml create mode 100644 app/src/main/res/layout/fragment_task_overview.xml diff --git a/app/src/main/java/com/denizk0461/weserplaner/activity/MainActivity.kt b/app/src/main/java/com/denizk0461/weserplaner/activity/MainActivity.kt index 0de0f39..7ddf7f4 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/activity/MainActivity.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/activity/MainActivity.kt @@ -39,6 +39,13 @@ class MainActivity : FragmentActivity() { binding.navHostFragmentContentMain.getFragment().findNavController() ) + // Check whether the user has enabled beta screens + val showBetaScreens = viewModel.preferenceBetaScreensEnabled + + // Set the visibility for the navigation bar items for beta screens accordingly + binding.navView.menu.findItem(R.id.exam_overview).isVisible = showBetaScreens + binding.navView.menu.findItem(R.id.room_finder).isVisible = showBetaScreens + // Set up navigation component setNavigationGraph() } diff --git a/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt b/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt index 5d8ce7f..ace1c38 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt @@ -390,6 +390,16 @@ class AppRepository(app: Application) { setPreference(SettingsPreferences.EXPERIMENTAL_ENABLED, newValue) } + /** + * This value determines whether beta screens should be shown. + */ + fun getPreferenceBetaScreensEnabled(): Boolean = getBooleanPreference( + SettingsPreferences.BETA_SCREENS_ENABLED, + ) + fun setPreferenceBetaScreensEnabled(newValue: Boolean) { + setPreference(SettingsPreferences.BETA_SCREENS_ENABLED, newValue) + } + // --- private preference handlers preferences --- // /** diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/ExamOverviewFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/ExamOverviewFragment.kt deleted file mode 100644 index 26101f5..0000000 --- a/app/src/main/java/com/denizk0461/weserplaner/fragment/ExamOverviewFragment.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.denizk0461.weserplaner.fragment - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.viewModels -import com.denizk0461.weserplaner.databinding.FragmentExamOverviewBinding -import com.denizk0461.weserplaner.viewmodel.ExamOverviewViewModel - -/** - * Fragment that shows the user an overview of their exams. - */ -class ExamOverviewFragment : AppFragment() { - - // View model reference for providing access to the database - private val viewModel: ExamOverviewViewModel by viewModels() - - // Instantiate the view binding - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - _binding = FragmentExamOverviewBinding.inflate(inflater, container, false) - return binding.root - } -} \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/RoomFinderFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/RoomFinderFragment.kt index 8993530..88e4f28 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/fragment/RoomFinderFragment.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/RoomFinderFragment.kt @@ -5,6 +5,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.viewModels +import com.denizk0461.weserplaner.R +import com.denizk0461.weserplaner.data.showSnackBar import com.denizk0461.weserplaner.databinding.FragmentRoomFinderBinding import com.denizk0461.weserplaner.viewmodel.RoomFinderViewModel @@ -21,4 +23,14 @@ class RoomFinderFragment : AppFragment() { _binding = FragmentRoomFinderBinding.inflate(inflater, container, false) return binding.root } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + // Tell the user that this fragment's functionality is not yet implemented + context.theme.showSnackBar( + binding.coordinatorLayout, + getString(R.string.room_finder_snack_unimplemented), + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/SettingsFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/SettingsFragment.kt index c329bda..9369165 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/fragment/SettingsFragment.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/SettingsFragment.kt @@ -322,6 +322,14 @@ class SettingsFragment : AppFragment() { .format(Date(BuildConfig.BUILD_TIME_MILLIS)) }" + // Set up switch for showing beta screens + binding.switchBetaNav.apply { + isChecked = viewModel.preferenceBetaScreensEnabled + setOnCheckedChangeListener { _, newValue -> + viewModel.preferenceBetaScreensEnabled = newValue + } + } + binding.buttonDevCodes.setOnClickListener { val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(view.windowToken, 0) @@ -418,7 +426,8 @@ class SettingsFragment : AppFragment() { /** * Decodes Base64 to a regular string. * - * @return the decoded string + * @receiver encoded string to decode + * @return decoded string */ private val String.d64: String get() = String( Base64.decode(this, Base64.DEFAULT), diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/TaskOverviewFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/TaskOverviewFragment.kt new file mode 100644 index 0000000..8de938b --- /dev/null +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/TaskOverviewFragment.kt @@ -0,0 +1,36 @@ +package com.denizk0461.weserplaner.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.viewModels +import com.denizk0461.weserplaner.R +import com.denizk0461.weserplaner.data.showSnackBar +import com.denizk0461.weserplaner.databinding.FragmentTaskOverviewBinding +import com.denizk0461.weserplaner.viewmodel.TaskOverviewViewModel + +/** + * Fragment that shows the user an overview of their tasks and exams. + */ +class TaskOverviewFragment : AppFragment() { + + // View model reference for providing access to the database + private val viewModel: TaskOverviewViewModel by viewModels() + + // Instantiate the view binding + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentTaskOverviewBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + // Tell the user that this fragment's functionality is not yet implemented + context.theme.showSnackBar( + binding.coordinatorLayout, + getString(R.string.task_overview_snack_unimplemented), + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/weserplaner/model/SettingsPreferences.kt b/app/src/main/java/com/denizk0461/weserplaner/model/SettingsPreferences.kt index be0feaf..95cd498 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/model/SettingsPreferences.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/model/SettingsPreferences.kt @@ -68,5 +68,10 @@ enum class SettingsPreferences(val key: String) { * Whether the user has enabled experimental settings. */ EXPERIMENTAL_ENABLED("experimental_enabled"), + + /** + * Whether beta screens should be shown. + */ + BETA_SCREENS_ENABLED("beta_screens"), ; } \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/ExamOverviewViewModel.kt b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/ExamOverviewViewModel.kt deleted file mode 100644 index 789451c..0000000 --- a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/ExamOverviewViewModel.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.denizk0461.weserplaner.viewmodel - -import android.app.Application - -/** - * View model class for [com.denizk0461.weserplaner.fragment.ExamOverviewFragment]. - */ -class ExamOverviewViewModel(application: Application) : AppViewModel(application) { - - -} \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/MainViewModel.kt b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/MainViewModel.kt index d831ef3..6532d8a 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/MainViewModel.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/MainViewModel.kt @@ -15,4 +15,10 @@ class MainViewModel(application: Application) : AppViewModel(application) { */ val preferenceLaunchFragment: Int get() = repo.getPreferenceLaunchFragment() + + /** + * This value determines whether the user has enabled experimental settings. + */ + val preferenceBetaScreensEnabled: Boolean + get() = repo.getPreferenceBetaScreensEnabled() } \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/SettingsViewModel.kt b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/SettingsViewModel.kt index 533a35c..a5f3768 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/SettingsViewModel.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/SettingsViewModel.kt @@ -74,6 +74,13 @@ class SettingsViewModel(app: Application) : AppViewModel(app) { get() = repo.getPreferenceExperimentalSettingsEnabled() set(newValue) { repo.setPreferenceExperimentalSettingsEnabled(newValue) } + /** + * This value determines whether beta screens should be shown. + */ + var preferenceBetaScreensEnabled: Boolean + get() = repo.getPreferenceBetaScreensEnabled() + set(newValue) { repo.setPreferenceBetaScreensEnabled(newValue) } + // --- functions for dev codes --- // /** diff --git a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/TaskOverviewViewModel.kt b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/TaskOverviewViewModel.kt new file mode 100644 index 0000000..e1fd259 --- /dev/null +++ b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/TaskOverviewViewModel.kt @@ -0,0 +1,11 @@ +package com.denizk0461.weserplaner.viewmodel + +import android.app.Application + +/** + * View model class for [com.denizk0461.weserplaner.fragment.TaskOverviewFragment]. + */ +class TaskOverviewViewModel(application: Application) : AppViewModel(application) { + + +} \ No newline at end of file diff --git a/app/src/main/res/drawable/location.xml b/app/src/main/res/drawable/location.xml new file mode 100644 index 0000000..11fdbe5 --- /dev/null +++ b/app/src/main/res/drawable/location.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/task.xml b/app/src/main/res/drawable/task.xml new file mode 100644 index 0000000..2e35e93 --- /dev/null +++ b/app/src/main/res/drawable/task.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/fragment_exam_overview.xml b/app/src/main/res/layout/fragment_exam_overview.xml deleted file mode 100644 index 77d9ef6..0000000 --- a/app/src/main/res/layout/fragment_exam_overview.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_room_finder.xml b/app/src/main/res/layout/fragment_room_finder.xml index 77d9ef6..c4d00ba 100644 --- a/app/src/main/res/layout/fragment_room_finder.xml +++ b/app/src/main/res/layout/fragment_room_finder.xml @@ -1,6 +1,31 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 9f4dbea..d9ed333 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -32,6 +32,9 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" + android:paddingBottom="52dp" + android:clipToPadding="false" + android:scrollbarStyle="outsideOverlay" app:layout_behavior="@string/appbar_scrolling_view_behavior"> + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_task_overview.xml b/app/src/main/res/layout/fragment_task_overview.xml new file mode 100644 index 0000000..e55e24c --- /dev/null +++ b/app/src/main/res/layout/fragment_task_overview.xml @@ -0,0 +1,31 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/nav_view_items.xml b/app/src/main/res/menu/nav_view_items.xml index 70864a4..2ced74d 100644 --- a/app/src/main/res/menu/nav_view_items.xml +++ b/app/src/main/res/menu/nav_view_items.xml @@ -5,10 +5,20 @@ android:icon="@drawable/design" android:title="@string/nav_schedule" android:enabled="true"/> + + + + android:label="CanteenFragment" + tools:layout="@layout/fragment_canteen"/> + Startzeit der Veranstaltung Schlusszeit der Veranstaltung + Aufgaben sind noch nicht implementiert! + Siehe Öffnungszeiten der Mensa Siehe Neuigkeiten der Mensa @@ -85,18 +87,23 @@ Aktualisiere Angebote Aktualisieren - %s – Öffnungszeiten Die Öffnungszeiten können nicht angezeigt werden. %s – Neuigkeiten Es sind keine Neuigkeiten verfügbar. + Der Raumfinder ist noch nicht implementiert! + Lizenzen Dein Stundenplan Stundenplan + Aufgaben & Prüfungen + Aufgaben Mensenangebote Mensa + Raumfinder + Räume %s – Angebote App-Einstellungen @@ -178,7 +185,9 @@ Beim Laden dieses Angebots ist ein Fehler aufgetreten. Stundenplan - Mensa + Aufgaben + Mensa + Raumfinder Einstellungen Allgemein @@ -233,5 +242,17 @@ App-Version + Verstecke experimentelle Einstellungen + Rufe sie wieder über den Lizenzen-Knopf auf + + Gradle Build-Code & Zeit + + Zeige Beta-Bildschirme + Erfordert einen App-Neustart + + Entwicklercodes + 6 Zeichen + Dieser Code konnte nicht gefunden werden. + klick weiter \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 387bc33..8bffcc9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -75,6 +75,8 @@ Event start time Event end time + Tasks are not yet implemented! + View canteen opening hours View canteen notifications @@ -92,13 +94,19 @@ %s – news No news are available. + Room finder is not yet implemented! + Licences Android, Material Design Resources © 2014 – %1$s Google, licenced under the Apache 2.0 License.\nhttps://developer.android.com\nhttps://material.io\n\nSeveral icons © 2013 – %1$s Flaticon, licenced under the Flaticon Basic Free License.\nhttps://www.flaticon.com\n\nLato © 2010 – %1$s Łukasz Dziedzic, licenced under the SIL Open Font License.\nhttps://fonts.google.com/specimen/Lato\n\njsoup HTML parser © 2009 – %1$s Jonathan Hedley, licenced under the MIT License.\nhttps://jsoup.org\n\nApp developed by Deniz Düzgören.\ndenizk0461@gmail.com\ndeniz7@uni-bremen.de Your Schedule Schedule + Tasks & Exams + Tasks Canteen Offers Canteen + Room Finder + Rooms %s – Offers App Settings @@ -182,7 +190,9 @@ An error occurred while trying to retrieve this offer. Schedule - Canteens + Tasks + Canteens + Room Finder Settings General @@ -241,15 +251,18 @@ App Version - Hide experimental settings - Show them again via licences button + Hide experimental settings + Show them again via licences button - Gradle build code & time + Gradle build code & time - Development codes - 6 chars + Show beta screens + Requires an app restart + + Development codes + 6 chars - This code could not be found. + This code could not be found. keep clicking ^_^