From 5007587192695e84aff6c1269c98d72ffaf9adae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Wed, 30 Nov 2022 11:29:43 +0100 Subject: [PATCH] [UI/Agenda] Allow prioritizing event subject over event type. --- .../main/java/pl/szczodrzynski/edziennik/App.kt | 6 ++++++ .../szczodrzynski/edziennik/config/BaseConfig.kt | 2 ++ .../edziennik/config/ProfileConfigUI.kt | 1 + .../ui/agenda/event/AgendaEventRenderer.kt | 13 +++++++++++-- .../edziennik/ui/event/EventDetailsDialog.kt | 15 +++++++++++++-- .../edziennik/ui/event/EventListAdapter.kt | 1 + .../edziennik/ui/event/EventViewHolder.kt | 2 +- .../edziennik/ui/home/cards/HomeEventsCard.kt | 5 +++-- .../edziennik/utils/managers/EventManager.kt | 2 ++ .../edziennik/utils/managers/NoteManager.kt | 2 +- app/src/main/res/layout/dialog_config_agenda.xml | 8 ++++++++ app/src/main/res/layout/dialog_event_details.xml | 3 ++- app/src/main/res/raw/app_data.json | 1 + app/src/main/res/values/strings.xml | 1 + 14 files changed, 53 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/App.kt b/app/src/main/java/pl/szczodrzynski/edziennik/App.kt index 30225982..cf688b03 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/App.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/App.kt @@ -422,6 +422,12 @@ class App : MultiDexApplication(), Configuration.Provider, CoroutineScope { try { App.data = AppData.get(profile.loginStoreType) d("App", "Loaded AppData: ${App.data}") + // apply newly-added config overrides, if not changed by the user yet + for ((key, value) in App.data.configOverrides) { + val config = App.profile.config + if (!config.has(key)) + config.set(key, value) + } } catch (e: Exception) { Log.e("App", "Cannot load AppData", e) Toast.makeText(this, R.string.app_cannot_load_data, Toast.LENGTH_LONG).show() diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/BaseConfig.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/BaseConfig.kt index 69d232c5..76d95b0b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/config/BaseConfig.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/BaseConfig.kt @@ -43,4 +43,6 @@ abstract class BaseConfig( db.configDao().add(ConfigEntry(profileId ?: -1, key, value)) } } + + fun has(key: String) = values.containsKey(key) } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigUI.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigUI.kt index 4bfaf047..35951082 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigUI.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigUI.kt @@ -15,6 +15,7 @@ class ProfileConfigUI(base: ProfileConfig) { var agendaGroupByType by base.config(false) var agendaLessonChanges by base.config(true) var agendaTeacherAbsence by base.config(true) + var agendaSubjectImportant by base.config(false) var agendaElearningMark by base.config(false) var agendaElearningGroup by base.config(true) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/agenda/event/AgendaEventRenderer.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/agenda/event/AgendaEventRenderer.kt index 31eb6730..a1b9ead4 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/agenda/event/AgendaEventRenderer.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/agenda/event/AgendaEventRenderer.kt @@ -11,6 +11,7 @@ import android.widget.TextView import androidx.core.view.isVisible import com.github.tibolte.agendacalendarview.render.EventRenderer import com.mikepenz.iconics.view.IconicsTextView +import pl.szczodrzynski.edziennik.App import pl.szczodrzynski.edziennik.R import pl.szczodrzynski.edziennik.databinding.AgendaWrappedEventBinding import pl.szczodrzynski.edziennik.databinding.AgendaWrappedEventCompactBinding @@ -53,16 +54,24 @@ class AgendaEventRenderer( else event.time!!.stringHM + val agendaSubjectImportant = App.profile.config.ui.agendaSubjectImportant val eventSubtitle = listOfNotNull( timeText, - event.subjectLongName, + event.subjectLongName.takeIf { !agendaSubjectImportant }, + event.typeName.takeIf { agendaSubjectImportant }, event.teacherName, event.teamName ).join(", ") card.foreground.setTintColor(event.eventColor) card.background.setTintColor(event.eventColor) - manager.setEventTopic(title, event, doneIconColor = textColor) + manager.setEventTopic( + title = title, + event = event, + doneIconColor = textColor, + showType = !agendaSubjectImportant, + showSubject = agendaSubjectImportant, + ) title.setTextColor(textColor) subtitle?.text = eventSubtitle subtitle?.setTextColor(textColor) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventDetailsDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventDetailsDialog.kt index efd8f700..30701f9c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventDetailsDialog.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventDetailsDialog.kt @@ -113,9 +113,20 @@ class EventDetailsDialog( b.typeColor.background?.setTintColor(event.eventColor) - b.details = mutableListOf( + val agendaSubjectImportant = event.subjectLongName != null + && App.config[event.profileId].ui.agendaSubjectImportant + + b.name = if (agendaSubjectImportant) + event.subjectLongName + else + event.typeName + + b.details = listOfNotNull( + if (agendaSubjectImportant) + event.typeName + else event.subjectLongName, - event.teamName?.asColoredSpannable(colorSecondary) + event.teamName?.asColoredSpannable(colorSecondary) ).concat(bullet) b.addedBy.setText( diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventListAdapter.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventListAdapter.kt index f991eeef..5c2f4eef 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventListAdapter.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventListAdapter.kt @@ -24,6 +24,7 @@ class EventListAdapter( val showDate: Boolean = false, val showColor: Boolean = true, val showType: Boolean = true, + val showTypeColor: Boolean = showType, val showTime: Boolean = true, val showSubject: Boolean = true, val markAsSeen: Boolean = true, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventViewHolder.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventViewHolder.kt index bee5e305..f22be345 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventViewHolder.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventViewHolder.kt @@ -113,7 +113,7 @@ class EventViewHolder( b.attachmentIcon.isVisible = item.hasAttachments b.typeColor.background?.setTintColor(item.eventColor) - b.typeColor.isVisible = adapter.showType && adapter.showColor + b.typeColor.isVisible = adapter.showTypeColor b.editButton.isVisible = !adapter.simpleMode && item.addedManually diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/home/cards/HomeEventsCard.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/home/cards/HomeEventsCard.kt index db26d8e9..acf99b2c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/home/cards/HomeEventsCard.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/home/cards/HomeEventsCard.kt @@ -63,9 +63,10 @@ class HomeEventsCard( simpleMode = true, showWeekDay = true, showDate = true, - showType = true, + showType = !profile.config.ui.agendaSubjectImportant, + showTypeColor = true, showTime = false, - showSubject = false, + showSubject = profile.config.ui.agendaSubjectImportant, markAsSeen = false, onEventClick = { EventDetailsDialog( diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/EventManager.kt b/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/EventManager.kt index cedf3122..38a8fee3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/EventManager.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/EventManager.kt @@ -48,6 +48,7 @@ class EventManager(val app: App) : CoroutineScope { title: TextView, event: EventFull, showType: Boolean = true, + showSubject: Boolean = false, showNotes: Boolean = true, doneIconColor: Int? = null ) { @@ -60,6 +61,7 @@ class EventManager(val app: App) : CoroutineScope { if (event.hasNotes() && hasReplacingNotes && showNotes) "{cmd-swap-horizontal} " else null, if (event.hasNotes() && !hasReplacingNotes && showNotes) "{cmd-playlist-edit} " else null, if (showType) "${event.typeName ?: "wydarzenie"} - " else null, + if (showSubject) event.subjectLongName?.plus(" - ") else null, topicSpan, ).concat() diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/NoteManager.kt b/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/NoteManager.kt index 866555bd..50ac84cd 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/NoteManager.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/NoteManager.kt @@ -171,7 +171,7 @@ class NoteManager(private val app: App) { activity = activity, simpleMode = true, showDate = true, - showColor = false, + showTypeColor = false, showTime = false, markAsSeen = false, showNotes = false, diff --git a/app/src/main/res/layout/dialog_config_agenda.xml b/app/src/main/res/layout/dialog_config_agenda.xml index 3258f656..effe23fe 100644 --- a/app/src/main/res/layout/dialog_config_agenda.xml +++ b/app/src/main/res/layout/dialog_config_agenda.xml @@ -50,6 +50,14 @@ android:minHeight="32dp" android:text="@string/agenda_config_teacher_absence" /> + + + @@ -55,7 +56,7 @@ Ustaw tworzone wydarzenia domyślnie jako udostępnione Rejestracja Wszystkie lekcje: + Wyświetl nazwę przedmiotu zamiast rodzaju