From 755b846b508bd51a5c7638f41cb95ccbb25ec06f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Wed, 14 Apr 2021 16:34:31 +0200 Subject: [PATCH] [UI/Agenda] Move common code to EventManager. --- .../ui/dialogs/event/EventDetailsDialog.kt | 10 ++-- .../ui/dialogs/event/EventListAdapter.kt | 7 ++- .../dialogs/timetable/LessonDetailsDialog.kt | 3 +- .../modules/agenda/AgendaFragmentDefault.kt | 12 +++-- .../agenda/event/AgendaEventRenderer.kt | 25 ++-------- .../attendance/AttendanceListFragment.kt | 3 +- .../attendance/AttendanceSummaryFragment.kt | 3 +- .../ui/modules/grades/GradesAdapter.kt | 3 +- .../ui/modules/grades/GradesListFragment.kt | 9 ++-- .../modules/timetable/TimetableDayFragment.kt | 3 +- .../edziennik/utils/managers/EventManager.kt | 46 ++++++++++++++++++- app/src/main/res/layout/event_list_item.xml | 23 ++-------- 12 files changed, 84 insertions(+), 63 deletions(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventDetailsDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventDetailsDialog.kt index 4feb1d53..c80f0c63 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventDetailsDialog.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventDetailsDialog.kt @@ -46,6 +46,8 @@ class EventDetailsDialog( private var removeEventDialog: AlertDialog? = null private val eventShared = event.sharedBy != null private val eventOwn = event.sharedBy == "self" + private val manager + get() = app.eventManager private val job = Job() override val coroutineContext: CoroutineContext @@ -93,7 +95,7 @@ class EventDetailsDialog( b.eventOwn = eventOwn if (!event.seen) { - app.eventManager.markAsSeen(event) + manager.markAsSeen(event) } val bullet = " • " @@ -104,11 +106,7 @@ class EventDetailsDialog( } catch (_: Exception) {} - b.legend.text = listOfNotNull( - if (event.addedManually) R.string.legend_event_added_manually else null, - if (event.isDone) R.string.legend_event_is_done else null - ).map { activity.getString(it) }.join("\n") - b.legend.isVisible = b.legend.text.isNotBlank() + manager.setLegendText(b.legend, event) b.typeColor.background?.setTintColor(event.eventColor) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListAdapter.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListAdapter.kt index 34cc6a2d..9bb199ea 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListAdapter.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListAdapter.kt @@ -33,7 +33,8 @@ class EventListAdapter( ) : RecyclerView.Adapter(), CoroutineScope { private val app = context.applicationContext as App - private val manager = app.eventManager + private val manager + get() = app.eventManager private val job = Job() override val coroutineContext: CoroutineContext @@ -67,7 +68,7 @@ class EventListAdapter( b.simpleMode = simpleMode - b.topic.text = event.topic + manager.setEventTopic(b.topic, event, showType = false) b.topic.maxLines = if (simpleMode) 2 else 3 b.details.text = mutableListOf( @@ -102,8 +103,6 @@ class EventListAdapter( } b.editButton.attachToastHint(R.string.hint_edit_event) - b.isDone.isVisible = event.isDone - if (event.showAsUnseen == null) event.showAsUnseen = !event.seen diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/timetable/LessonDetailsDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/timetable/LessonDetailsDialog.kt index f444f38e..9b43f9be 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/timetable/LessonDetailsDialog.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/timetable/LessonDetailsDialog.kt @@ -50,7 +50,8 @@ class LessonDetailsDialog( get() = job + Dispatchers.Main private lateinit var adapter: EventListAdapter - private val manager by lazy { app.timetableManager } + private val manager + get() = app.timetableManager init { run { if (activity.isFinishing) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragmentDefault.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragmentDefault.kt index eb6f74fb..cc25c42f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragmentDefault.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragmentDefault.kt @@ -136,7 +136,13 @@ class AgendaFragmentDefault( dateEnd, Locale.getDefault(), object : CalendarPickerController { - override fun onDaySelected(dayItem: IDayItem) {} + override fun onDaySelected(dayItem: IDayItem) { + val c = Calendar.getInstance() + c.time = dayItem.date + if (c.timeInMillis == selectedDate.inMillis) { + DayDialog(activity, app.profileId, selectedDate) + } + } override fun onEventSelected(event: CalendarEvent) { val date = Date.fromCalendar(event.instanceDay) @@ -180,7 +186,7 @@ class AgendaFragmentDefault( } } }, - AgendaEventRenderer(isCompactMode), + AgendaEventRenderer(app.eventManager, isCompactMode), AgendaEventGroupRenderer(), LessonChangesEventRenderer(), TeacherAbsenceEventRenderer() @@ -197,7 +203,7 @@ class AgendaFragmentDefault( manager.loadEvents(events, BaseCalendarEvent()) adapter?.updateEvents(manager.events) - listView.scrollToCurrentDate(selectedDate.asCalendar) + //listView.scrollToCurrentDate(selectedDate.asCalendar) } private fun setAsRead(date: Calendar) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/event/AgendaEventRenderer.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/event/AgendaEventRenderer.kt index ac65fcef..2e857cd3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/event/AgendaEventRenderer.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/event/AgendaEventRenderer.kt @@ -10,10 +10,6 @@ import android.widget.FrameLayout import android.widget.TextView import androidx.core.view.isVisible import com.github.tibolte.agendacalendarview.render.EventRenderer -import com.mikepenz.iconics.IconicsDrawable -import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial -import com.mikepenz.iconics.utils.colorInt -import com.mikepenz.iconics.utils.sizeDp import com.mikepenz.iconics.view.IconicsTextView import pl.szczodrzynski.edziennik.R import pl.szczodrzynski.edziennik.databinding.AgendaWrappedEventBinding @@ -22,8 +18,10 @@ import pl.szczodrzynski.edziennik.join import pl.szczodrzynski.edziennik.resolveAttr import pl.szczodrzynski.edziennik.setTintColor import pl.szczodrzynski.edziennik.utils.Colors +import pl.szczodrzynski.edziennik.utils.managers.EventManager class AgendaEventRenderer( + val manager: EventManager, val isCompact: Boolean ) : EventRenderer() { @@ -55,8 +53,6 @@ class AgendaEventRenderer( else event.time!!.stringHM - var eventTitle = "${event.typeName ?: "wydarzenie"} - ${event.topic}" - val eventSubtitle = listOfNotNull( timeText, event.subjectLongName, @@ -64,28 +60,13 @@ class AgendaEventRenderer( event.teamName ).join(", ") - if (event.addedManually) { - eventTitle = "{cmd-clipboard-edit-outline} $eventTitle" - } - card.foreground.setTintColor(event.eventColor) card.background.setTintColor(event.eventColor) - title.text = eventTitle + manager.setEventTopic(title, event, doneIconColor = textColor) title.setTextColor(textColor) subtitle?.text = eventSubtitle subtitle?.setTextColor(textColor) - title.setCompoundDrawables( - null, - null, - if (event.isDone) IconicsDrawable(card.context).apply { - icon = CommunityMaterial.Icon.cmd_check - colorInt = textColor - sizeDp = 24 - } else null, - null - ) - badgeBackground.isVisible = aEvent.showItemBadge badgeBackground.background.setTintColor( android.R.attr.colorBackground.resolveAttr(card.context) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendanceListFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendanceListFragment.kt index 8e68cdbb..523dd09c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendanceListFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendanceListFragment.kt @@ -41,7 +41,8 @@ class AttendanceListFragment : LazyFragment(), CoroutineScope { get() = job + Dispatchers.Main // local/private variables go here - private val manager by lazy { app.attendanceManager } + private val manager + get() = app.attendanceManager private var viewType = AttendanceFragment.VIEW_DAYS private var expandSubjectId = 0L diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendanceSummaryFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendanceSummaryFragment.kt index 5f61020b..39282325 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendanceSummaryFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendanceSummaryFragment.kt @@ -47,7 +47,8 @@ class AttendanceSummaryFragment : LazyFragment(), CoroutineScope { get() = job + Dispatchers.Main // local/private variables go here - private val manager by lazy { app.attendanceManager } + private val manager + get() = app.attendanceManager private var expandSubjectId = 0L private var attendance = listOf() diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesAdapter.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesAdapter.kt index 46c75d8d..086f073d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesAdapter.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesAdapter.kt @@ -40,7 +40,8 @@ class GradesAdapter( } private val app = activity.applicationContext as App - private val manager = app.gradesManager + private val manager + get() = app.gradesManager private val job = Job() override val coroutineContext: CoroutineContext diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesListFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesListFragment.kt index 63521e97..63c935ff 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesListFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesListFragment.kt @@ -48,9 +48,12 @@ class GradesListFragment : Fragment(), CoroutineScope { get() = job + Dispatchers.Main // local/private variables go here - private val manager by lazy { app.gradesManager } - private val dontCountEnabled by lazy { manager.dontCountEnabled } - private val dontCountGrades by lazy { manager.dontCountGrades } + private val manager + get() = app.gradesManager + private val dontCountEnabled + get() = manager.dontCountEnabled + private val dontCountGrades + get() = manager.dontCountGrades private var expandSubjectId = 0L override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableDayFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableDayFragment.kt index e6464d7d..e92ca55c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableDayFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableDayFragment.kt @@ -54,7 +54,8 @@ class TimetableDayFragment : LazyFragment(), CoroutineScope { private var endHour = DEFAULT_END_HOUR private var firstEventMinute = 24 * 60 - private val manager by lazy { app.timetableManager } + private val manager + get() = app.timetableManager // find SwipeRefreshLayout in the hierarchy private val refreshLayout by lazy { view?.findParentById(R.id.refreshLayout) } 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 ca444ca5..f5b7faa9 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 @@ -4,12 +4,17 @@ package pl.szczodrzynski.edziennik.utils.managers +import androidx.core.view.isVisible +import com.mikepenz.iconics.IconicsDrawable +import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial +import com.mikepenz.iconics.utils.colorInt +import com.mikepenz.iconics.utils.sizeDp +import com.mikepenz.iconics.view.IconicsTextView import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job -import pl.szczodrzynski.edziennik.App +import pl.szczodrzynski.edziennik.* import pl.szczodrzynski.edziennik.data.db.full.EventFull -import pl.szczodrzynski.edziennik.startCoroutineTimer import kotlin.coroutines.CoroutineContext class EventManager(val app: App) : CoroutineScope { @@ -32,4 +37,41 @@ class EventManager(val app: App) : CoroutineScope { app.db.metadataDao().setSeen(event.profileId, event, true) } } + + fun setEventTopic( + title: IconicsTextView, + event: EventFull, + showType: Boolean = true, + doneIconColor: Int? = null + ) { + var eventTopic = if (showType) + "${event.typeName ?: "wydarzenie"} - ${event.topic}" + else + event.topic + + if (event.addedManually) { + eventTopic = "{cmd-clipboard-edit-outline} $eventTopic" + } + + title.text = eventTopic + + title.setCompoundDrawables( + null, + null, + if (event.isDone) IconicsDrawable(title.context).apply { + icon = CommunityMaterial.Icon.cmd_check + colorInt = doneIconColor ?: R.color.md_green_500.resolveColor(title.context) + sizeDp = 24 + } else null, + null + ) + } + + fun setLegendText(legend: IconicsTextView, event: EventFull) { + legend.text = listOfNotNull( + if (event.addedManually) R.string.legend_event_added_manually else null, + if (event.isDone) R.string.legend_event_is_done else null + ).map { legend.context.getString(it) }.join("\n") + legend.isVisible = legend.text.isNotBlank() + } } diff --git a/app/src/main/res/layout/event_list_item.xml b/app/src/main/res/layout/event_list_item.xml index 24445327..a69b74c0 100644 --- a/app/src/main/res/layout/event_list_item.xml +++ b/app/src/main/res/layout/event_list_item.xml @@ -4,8 +4,7 @@ --> + xmlns:android="http://schemas.android.com/apk/res/android"> @@ -61,12 +60,10 @@ android:gravity="center_vertical" android:orientation="horizontal"> - - - - + tools:visibility="visible" />