From 0a7ef6b1f43d9325803bdc46ab1e6449006fc265 Mon Sep 17 00:00:00 2001 From: denizk0461 Date: Fri, 12 Jan 2024 17:55:41 +0100 Subject: [PATCH] Added setting to change day/date format for canteen screen --- .../weserplaner/adapter/DropdownAdapter.kt | 2 +- .../weserplaner/db/AppRepository.kt | 10 ++ .../weserplaner/fragment/CanteenFragment.kt | 24 ++++- .../weserplaner/fragment/SettingsFragment.kt | 16 ++++ .../weserplaner/viewmodel/CanteenViewModel.kt | 6 ++ .../viewmodel/SettingsViewModel.kt | 7 ++ app/src/main/res/layout/fragment_settings.xml | 91 +++++++++++++++++++ app/src/main/res/values-de/strings.xml | 3 + app/src/main/res/values/strings.xml | 9 ++ 9 files changed, 166 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/denizk0461/weserplaner/adapter/DropdownAdapter.kt b/app/src/main/java/com/denizk0461/weserplaner/adapter/DropdownAdapter.kt index 7b503fc..9fc544b 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/adapter/DropdownAdapter.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/adapter/DropdownAdapter.kt @@ -11,7 +11,7 @@ import com.denizk0461.weserplaner.R * @param context context reference * @param items list of texts to display */ -class DropdownAdapter(context: Context, items: MutableList) +class DropdownAdapter(context: Context, items: List) : ArrayAdapter(context, R.layout.item_dropdown, items) { private val noOpFilter = object : Filter() { 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 ac31b36..659e794 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt @@ -439,6 +439,16 @@ class AppRepository(app: Application) { setPreference(SettingsPreferences.SELECTED_TIMETABLE, newValue) } + /** + * User-selected timetable to display. + */ + fun getPreferenceCanteenDate(): Int = getIntPreference( + SettingsPreferences.CANTEEN_DATE_PREFERENCE, + ) + fun setPreferenceCanteenDate(newValue: Int) { + setPreference(SettingsPreferences.CANTEEN_DATE_PREFERENCE, newValue) + } + /** * This value determines which navigation graph will be used for app navigation. */ diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenFragment.kt index faafcc8..7c7e5b0 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenFragment.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenFragment.kt @@ -230,7 +230,12 @@ class CanteenFragment : AppFragment() { // Set up TabLayoutMediator to populate tabs TabLayoutMediator(binding.dayTabLayout, binding.viewPager) { tab, position -> - tab.text = dates[position].run { "$day, $date" } + tab.text = dates[position].let { d -> when (viewModel.preferenceCanteenDate) { + 0 -> "${d.day.shortenDay()}, ${d.date}" + 1 -> "${d.day}, ${d.date}" + 2 -> d.date + else -> d.day // 3 + }} }.attach() // Set extended FAB to extend when the page is changed @@ -263,6 +268,23 @@ class CanteenFragment : AppFragment() { } } + /** + * Shortens a German day name to its shortened form, followed by a period. Example: + * Montag -> Mo. + * + * @receiver day name to shorten + * @return shortened day name with period following it + */ + private fun String.shortenDay(): String = when (this) { + "Montag" -> "Mo." + "Dienstag" -> "Di." + "Mittwoch" -> "Mi." + "Donnerstag" -> "Do." + "Freitag" -> "Fr." + "Samstag" -> "Sa." + else -> "So." + } + // Invalidate the view binding override fun onDestroyView() { super.onDestroyView() 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 d49dc38..8945364 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/fragment/SettingsFragment.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/SettingsFragment.kt @@ -218,6 +218,22 @@ class SettingsFragment : AppFragment() { } } + val dateAdapter = DropdownAdapter( + context, + context.resources.getStringArray(R.array.settings_dates).toList(), + ) + + binding.autoCompleteDates.setAdapter(dateAdapter) + binding.autoCompleteDates.setText( + dateAdapter.getItem(viewModel.preferenceCanteenDate), + false, + ) + + binding.autoCompleteDates.setOnItemClickListener { _, _, position, _ -> + viewModel.preferenceCanteenDate = position + binding.autoCompleteDates.setText(dateAdapter.getItem(position)) + } + // --- miscellaneous settings --- // // Set up button toggle group for changing default fragment diff --git a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/CanteenViewModel.kt b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/CanteenViewModel.kt index 6557d67..c5e1d29 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/CanteenViewModel.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/CanteenViewModel.kt @@ -95,4 +95,10 @@ class CanteenViewModel(app: Application) : AppViewModel(app) { */ val preferenceAppLayout: AppLayout get() = repo.getAppLayout() + + /** + * Determines in which format dates should be displayed on the canteen screen. + */ + val preferenceCanteenDate: Int + get() = repo.getPreferenceCanteenDate() } \ 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 e57505e..73e3dc5 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/SettingsViewModel.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/SettingsViewModel.kt @@ -103,6 +103,13 @@ class SettingsViewModel(app: Application) : AppViewModel(app) { get() = repo.getAppLayout() set(newValue) { repo.setAppLayout(newValue) } + /** + * Determines in which format dates should be displayed on the canteen screen. + */ + var preferenceCanteenDate: Int + get() = repo.getPreferenceCanteenDate() + set(newValue) { repo.setPreferenceCanteenDate(newValue) } + fun setPreferenceFeatureTimetables(newValue: Boolean) { repo.setPreferenceFeatureTimetables(newValue) } // --- functions for dev codes --- // diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 2a22d8f..69bd734 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -485,6 +485,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7d3705a..9f3341e 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -286,6 +286,9 @@ Studierende Bedienstete + Stelle Anzeige des Datums ein + Gilt für die Reiter der täglichen Mensenangebote + Markiere Angebote mit Allergenen mit einem Stern* Wird auch für Zusatzstoffe genutzt App entwickelt von denizk0461 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e33d77c..78fdd10 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -291,6 +291,15 @@ Students Employees + Set how dates are displayed + Applies to the daily canteen offers\' tabs + + Fr., 12.01. + Freitag, 12.01. + 12.01. + Freitag + + Mark offers with allergens with a star* Also applies to additives App developed by denizk0461