From ac43e149991db4153576bb2179b729e406e4f721 Mon Sep 17 00:00:00 2001 From: Naveen Date: Wed, 25 May 2022 10:53:41 +0530 Subject: [PATCH 1/3] Use unique indexing for all day events --- .../calendar/pro/fragments/WeekFragment.kt | 43 +++++++++---------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt index f40b21764..50e9559cc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt @@ -145,8 +145,8 @@ class WeekFragment : Fragment(), WeeklyCalendar { override fun onResume() { super.onResume() requireContext().eventsHelper.getEventTypes(requireActivity(), false) { - it.map { - eventTypeColors.put(it.id!!, it.color) + it.map { eventType -> + eventTypeColors.put(eventType.id!!, eventType.color) } } @@ -494,7 +494,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { } eventsCollisionChecked.add(eventId) - val eventWeeklyViewsToCheck = eventDayList.filter { !eventsCollisionChecked.contains(it.key) } + val eventWeeklyViewsToCheck = eventDayList.filterNot { eventsCollisionChecked.contains(it.key) } for ((toCheckId, eventWeeklyViewToCheck) in eventWeeklyViewsToCheck) { val areTouching = eventWeeklyView.range.intersects(eventWeeklyViewToCheck.range) val doHaveCommonMinutes = if (areTouching) { @@ -738,33 +738,30 @@ class WeekFragment : Fragment(), WeeklyCalendar { val numDays = Days.daysBetween(Formatter.getDateTimeFromTS(minTS).toLocalDate(), Formatter.getDateTimeFromTS(maxTS).toLocalDate()).days val daysCnt = if (numDays == 1 && isStartTimeDay) 0 else numDays val startDateTimeInWeek = Formatter.getDateTimeFromTS(minTS) - val firstDayIndex = (startDateTimeInWeek.dayOfWeek - if (config.isSundayFirst) 0 else 1) % 7 + val firstDayIndex = startDateTimeInWeek.dayOfMonth // indices must be unique for the visible range (2 weeks) + val lastDayIndex = firstDayIndex + daysCnt + val dayIndices = firstDayIndex..lastDayIndex var doesEventFit: Boolean - val cnt = allDayRows.size - 1 var wasEventHandled = false var drawAtLine = 0 - for (index in 0..cnt) { - doesEventFit = true - drawAtLine = index - val row = allDayRows[index] - for (i in firstDayIndex..firstDayIndex + daysCnt) { - if (row.contains(i)) { - doesEventFit = false - } - } - for (dayIndex in firstDayIndex..firstDayIndex + daysCnt) { + for (index in allDayRows.indices) { + drawAtLine = index + + val row = allDayRows[index] + + doesEventFit = dayIndices.all { !row.contains(it) } + + for (dayIndex in dayIndices) { if (doesEventFit) { row.add(dayIndex) wasEventHandled = true - } else if (index == cnt) { - if (allDayRows.size == index + 1) { - allDayRows.add(HashSet()) - addNewLine() - drawAtLine++ - wasEventHandled = true - } + } else if (index == allDayRows.lastIndex) { + allDayRows.add(HashSet()) + addNewLine() + drawAtLine++ + wasEventHandled = true allDayRows.last().add(dayIndex) } } @@ -776,7 +773,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { val dayCodeStart = Formatter.getDayCodeFromDateTime(startDateTime).toInt() val dayCodeEnd = Formatter.getDayCodeFromDateTime(endDateTime).toInt() - val dayOfWeek = dayColumns.indexOfFirst { it.tag.toInt() == dayCodeStart || (it.tag.toInt() > dayCodeStart && it.tag.toInt() <= dayCodeEnd) } + val dayOfWeek = dayColumns.indexOfFirst { it.tag.toInt() == dayCodeStart || it.tag.toInt() in (dayCodeStart + 1)..dayCodeEnd } if (dayOfWeek == -1) { return } From 2fe3e9869587f037a135e51822a0f10e26790a3d Mon Sep 17 00:00:00 2001 From: Naveen Date: Wed, 25 May 2022 11:23:50 +0530 Subject: [PATCH 2/3] Properly handle events spanning midnight --- .../calendar/pro/fragments/WeekFragment.kt | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt index 50e9559cc..40dbf679b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt @@ -741,6 +741,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { val firstDayIndex = startDateTimeInWeek.dayOfMonth // indices must be unique for the visible range (2 weeks) val lastDayIndex = firstDayIndex + daysCnt val dayIndices = firstDayIndex..lastDayIndex + val isSameDayEvent = firstDayIndex == lastDayIndex var doesEventFit: Boolean var wasEventHandled = false @@ -753,19 +754,23 @@ class WeekFragment : Fragment(), WeeklyCalendar { doesEventFit = dayIndices.all { !row.contains(it) } - for (dayIndex in dayIndices) { - if (doesEventFit) { - row.add(dayIndex) - wasEventHandled = true - } else if (index == allDayRows.lastIndex) { - allDayRows.add(HashSet()) - addNewLine() - drawAtLine++ - wasEventHandled = true - allDayRows.last().add(dayIndex) + if (doesEventFit && isSameDayEvent) { + row.add(firstDayIndex) + wasEventHandled = true + } else { + // handle events spanning midnight + for (dayIndex in dayIndices) { + if (index == allDayRows.lastIndex) { + allDayRows.add(HashSet()) + addNewLine() + drawAtLine++ + wasEventHandled = true + allDayRows.last().add(dayIndex) + } } } + if (wasEventHandled) { break } From d2fa88b5a9c82f5b4ab023ff90ce5feb852caa16 Mon Sep 17 00:00:00 2001 From: Tibor Kaputa Date: Wed, 25 May 2022 11:23:34 +0200 Subject: [PATCH 3/3] removing an extra empty line --- .../com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt index 40dbf679b..bc4955543 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt @@ -770,7 +770,6 @@ class WeekFragment : Fragment(), WeeklyCalendar { } } - if (wasEventHandled) { break }