From 54363ee9196c04def7871089ca1422a8cde66b76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Sun, 16 Feb 2020 14:12:55 +0100 Subject: [PATCH] [UI/Timetable] Add lesson type annotation in LessonDetailsDialog. --- .../dialogs/timetable/LessonDetailsDialog.kt | 4 + .../modules/timetable/TimetableDayFragment.kt | 97 +--------------- .../ui/modules/timetable/TimetableUtils.kt | 109 ++++++++++++++++++ .../main/res/layout/dialog_lesson_details.xml | 19 +++ 4 files changed, 137 insertions(+), 92 deletions(-) create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableUtils.kt 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 dc50eafb..1b3b576f 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 @@ -25,6 +25,7 @@ import pl.szczodrzynski.edziennik.ui.dialogs.event.EventDetailsDialog import pl.szczodrzynski.edziennik.ui.dialogs.event.EventListAdapter import pl.szczodrzynski.edziennik.ui.dialogs.event.EventManualDialog import pl.szczodrzynski.edziennik.ui.modules.timetable.TimetableFragment +import pl.szczodrzynski.edziennik.ui.modules.timetable.TimetableUtils import pl.szczodrzynski.edziennik.utils.SimpleDividerItemDecoration import pl.szczodrzynski.edziennik.utils.models.Date import pl.szczodrzynski.edziennik.utils.models.Week @@ -49,6 +50,7 @@ class LessonDetailsDialog( get() = job + Dispatchers.Main private lateinit var adapter: EventListAdapter + private val utils by lazy { TimetableUtils() } init { run { if (activity.isFinishing) @@ -89,6 +91,8 @@ class LessonDetailsDialog( val lessonTime = lesson.displayStartTime ?: return b.lessonDate.text = Week.getFullDayName(lessonDate.weekDay) + ", " + lessonDate.formattedString + b.annotationVisible = utils.getAnnotation(activity, lesson, b.annotation) + if (lesson.type >= Lesson.TYPE_SHIFTED_SOURCE) { b.shiftedLayout.visibility = View.VISIBLE var otherLessonDate: Date? = null 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 702f09a3..aa185f06 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 @@ -4,8 +4,6 @@ package pl.szczodrzynski.edziennik.ui.modules.timetable -import android.graphics.PorterDuff -import android.graphics.PorterDuffColorFilter import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -33,7 +31,6 @@ import pl.szczodrzynski.edziennik.ui.modules.timetable.TimetableFragment.Compani import pl.szczodrzynski.edziennik.ui.modules.timetable.TimetableFragment.Companion.DEFAULT_START_HOUR import pl.szczodrzynski.edziennik.utils.ListenerScrollView import pl.szczodrzynski.edziennik.utils.models.Date -import pl.szczodrzynski.navlib.getColorFromAttr import java.util.* import kotlin.coroutines.CoroutineContext import kotlin.math.min @@ -56,6 +53,8 @@ class TimetableDayFragment : Fragment(), CoroutineScope { private var endHour = DEFAULT_END_HOUR private var firstEventMinute = 24 * 60 + private val utils by lazy { TimetableUtils() } + // find SwipeRefreshLayout in the hierarchy private val refreshLayout by lazy { view?.findParentById(R.id.refreshLayout) } // the day ScrollView @@ -167,6 +166,8 @@ class TimetableDayFragment : Fragment(), CoroutineScope { // Inflate a label view for each hour the day view will display val hourLabelViews = ArrayList() for (i in dayView.startHour..dayView.endHour) { + if (!isAdded) + continue val hourLabelView = layoutInflater.inflate(R.layout.timetable_hour_label, dayView, false) as TextView hourLabelView.text = "$i:00" hourLabelViews.add(hourLabelView) @@ -277,95 +278,7 @@ class TimetableDayFragment : Fragment(), CoroutineScope { lb.unread = lesson.type != Lesson.TYPE_NORMAL && !lesson.seen //lb.subjectName.typeface = Typeface.create("sans-serif-light", Typeface.BOLD) - when (lesson.type) { - Lesson.TYPE_NORMAL -> { - lb.annotationVisible = false - } - Lesson.TYPE_CANCELLED -> { - lb.annotationVisible = true - lb.annotation.setText(R.string.timetable_lesson_cancelled) - lb.annotation.background.colorFilter = PorterDuffColorFilter( - getColorFromAttr(activity, R.attr.timetable_lesson_cancelled_color), - PorterDuff.Mode.SRC_ATOP - ) - //lb.subjectName.typeface = Typeface.DEFAULT - } - Lesson.TYPE_CHANGE -> { - lb.annotationVisible = true - when { - lesson.subjectId != lesson.oldSubjectId && lesson.teacherId != lesson.oldTeacherId - && lesson.oldSubjectName != null && lesson.oldTeacherName != null -> - lb.annotation.setText( - R.string.timetable_lesson_change_format, - "${lesson.oldSubjectName ?: "?"}, ${lesson.oldTeacherName ?: "?"}" - ) - - lesson.subjectId != lesson.oldSubjectId && lesson.oldSubjectName != null -> - lb.annotation.setText( - R.string.timetable_lesson_change_format, - lesson.oldSubjectName ?: "?" - ) - - lesson.teacherId != lesson.oldTeacherId && lesson.oldTeacherName != null -> - lb.annotation.setText( - R.string.timetable_lesson_change_format, - lesson.oldTeacherName ?: "?" - ) - else -> lb.annotation.setText(R.string.timetable_lesson_change) - } - - lb.annotation.background.colorFilter = PorterDuffColorFilter( - getColorFromAttr(activity, R.attr.timetable_lesson_change_color), - PorterDuff.Mode.SRC_ATOP - ) - } - Lesson.TYPE_SHIFTED_SOURCE -> { - lb.annotationVisible = true - when { - lesson.date != lesson.oldDate && lesson.date != null -> - lb.annotation.setText( - R.string.timetable_lesson_shifted_other_day, - lesson.date?.stringY_m_d ?: "?", - lesson.startTime?.stringHM ?: "" - ) - - lesson.startTime != lesson.oldStartTime && lesson.startTime != null -> - lb.annotation.setText( - R.string.timetable_lesson_shifted_same_day, - lesson.startTime?.stringHM ?: "?" - ) - - else -> lb.annotation.setText(R.string.timetable_lesson_shifted) - } - - lb.annotation.background.setTintColor(R.attr.timetable_lesson_shifted_source_color.resolveAttr(activity)) - } - Lesson.TYPE_SHIFTED_TARGET -> { - lb.annotationVisible = true - when { - lesson.date != lesson.oldDate && lesson.oldDate != null -> - lb.annotation.setText( - R.string.timetable_lesson_shifted_from_other_day, - lesson.oldDate?.stringY_m_d ?: "?", - lesson.oldStartTime?.stringHM ?: "" - ) - - lesson.startTime != lesson.oldStartTime && lesson.oldStartTime != null -> - lb.annotation.setText( - R.string.timetable_lesson_shifted_from_same_day, - lesson.oldStartTime?.stringHM ?: "?" - ) - - else -> lb.annotation.setText(R.string.timetable_lesson_shifted_from) - } - - lb.annotation.background.colorFilter = PorterDuffColorFilter( - getColorFromAttr(activity, R.attr.timetable_lesson_shifted_target_color), - PorterDuff.Mode.SRC_ATOP - ) - } - } - + lb.annotationVisible = utils.getAnnotation(activity, lesson, lb.annotation) // The day view needs the event time ranges in the start minute/end minute format, // so calculate those here diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableUtils.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableUtils.kt new file mode 100644 index 00000000..9a704854 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableUtils.kt @@ -0,0 +1,109 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2020-2-16. + */ + +package pl.szczodrzynski.edziennik.ui.modules.timetable + +import android.content.Context +import android.graphics.PorterDuff +import android.graphics.PorterDuffColorFilter +import android.widget.TextView +import pl.szczodrzynski.edziennik.R +import pl.szczodrzynski.edziennik.data.db.entity.Lesson +import pl.szczodrzynski.edziennik.data.db.full.LessonFull +import pl.szczodrzynski.edziennik.resolveAttr +import pl.szczodrzynski.edziennik.setText +import pl.szczodrzynski.edziennik.setTintColor +import pl.szczodrzynski.navlib.getColorFromAttr + +class TimetableUtils { + fun getAnnotation(context: Context, lesson: LessonFull, annotation: TextView): Boolean { + var annotationVisible = false + when (lesson.type) { + Lesson.TYPE_CANCELLED -> { + annotationVisible = true + annotation.setText(R.string.timetable_lesson_cancelled) + annotation.background.colorFilter = PorterDuffColorFilter( + getColorFromAttr(context, R.attr.timetable_lesson_cancelled_color), + PorterDuff.Mode.SRC_ATOP + ) + //lb.subjectName.typeface = Typeface.DEFAULT + } + Lesson.TYPE_CHANGE -> { + annotationVisible = true + when { + lesson.subjectId != lesson.oldSubjectId && lesson.teacherId != lesson.oldTeacherId + && lesson.oldSubjectName != null && lesson.oldTeacherName != null -> + annotation.setText( + R.string.timetable_lesson_change_format, + "${lesson.oldSubjectName ?: "?"}, ${lesson.oldTeacherName ?: "?"}" + ) + + lesson.subjectId != lesson.oldSubjectId && lesson.oldSubjectName != null -> + annotation.setText( + R.string.timetable_lesson_change_format, + lesson.oldSubjectName ?: "?" + ) + + lesson.teacherId != lesson.oldTeacherId && lesson.oldTeacherName != null -> + annotation.setText( + R.string.timetable_lesson_change_format, + lesson.oldTeacherName ?: "?" + ) + else -> annotation.setText(R.string.timetable_lesson_change) + } + + annotation.background.colorFilter = PorterDuffColorFilter( + getColorFromAttr(context, R.attr.timetable_lesson_change_color), + PorterDuff.Mode.SRC_ATOP + ) + } + Lesson.TYPE_SHIFTED_SOURCE -> { + annotationVisible = true + when { + lesson.date != lesson.oldDate && lesson.date != null -> + annotation.setText( + R.string.timetable_lesson_shifted_other_day, + lesson.date?.stringY_m_d ?: "?", + lesson.startTime?.stringHM ?: "" + ) + + lesson.startTime != lesson.oldStartTime && lesson.startTime != null -> + annotation.setText( + R.string.timetable_lesson_shifted_same_day, + lesson.startTime?.stringHM ?: "?" + ) + + else -> annotation.setText(R.string.timetable_lesson_shifted) + } + + annotation.background.setTintColor(R.attr.timetable_lesson_shifted_source_color.resolveAttr(context)) + } + Lesson.TYPE_SHIFTED_TARGET -> { + annotationVisible = true + when { + lesson.date != lesson.oldDate && lesson.oldDate != null -> + annotation.setText( + R.string.timetable_lesson_shifted_from_other_day, + lesson.oldDate?.stringY_m_d ?: "?", + lesson.oldStartTime?.stringHM ?: "" + ) + + lesson.startTime != lesson.oldStartTime && lesson.oldStartTime != null -> + annotation.setText( + R.string.timetable_lesson_shifted_from_same_day, + lesson.oldStartTime?.stringHM ?: "?" + ) + + else -> annotation.setText(R.string.timetable_lesson_shifted_from) + } + + annotation.background.colorFilter = PorterDuffColorFilter( + getColorFromAttr(context, R.attr.timetable_lesson_shifted_target_color), + PorterDuff.Mode.SRC_ATOP + ) + } + } + return annotationVisible + } +} diff --git a/app/src/main/res/layout/dialog_lesson_details.xml b/app/src/main/res/layout/dialog_lesson_details.xml index 5efe53fc..9d343869 100644 --- a/app/src/main/res/layout/dialog_lesson_details.xml +++ b/app/src/main/res/layout/dialog_lesson_details.xml @@ -9,6 +9,9 @@ + @@ -32,6 +35,22 @@ android:paddingTop="24dp" android:paddingRight="16dp"> + +