@@ -145,8 +145,8 @@ class WeekFragment : Fragment(), WeeklyCalendar {
145145 override fun onResume () {
146146 super .onResume()
147147 requireContext().eventsHelper.getEventTypes(requireActivity(), false ) {
148- it.map {
149- eventTypeColors.put(it .id!! , it .color)
148+ it.map { eventType ->
149+ eventTypeColors.put(eventType .id!! , eventType .color)
150150 }
151151 }
152152
@@ -494,7 +494,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
494494 }
495495
496496 eventsCollisionChecked.add(eventId)
497- val eventWeeklyViewsToCheck = eventDayList.filter { ! eventsCollisionChecked.contains(it.key) }
497+ val eventWeeklyViewsToCheck = eventDayList.filterNot { eventsCollisionChecked.contains(it.key) }
498498 for ((toCheckId, eventWeeklyViewToCheck) in eventWeeklyViewsToCheck) {
499499 val areTouching = eventWeeklyView.range.intersects(eventWeeklyViewToCheck.range)
500500 val doHaveCommonMinutes = if (areTouching) {
@@ -738,34 +738,35 @@ class WeekFragment : Fragment(), WeeklyCalendar {
738738 val numDays = Days .daysBetween(Formatter .getDateTimeFromTS(minTS).toLocalDate(), Formatter .getDateTimeFromTS(maxTS).toLocalDate()).days
739739 val daysCnt = if (numDays == 1 && isStartTimeDay) 0 else numDays
740740 val startDateTimeInWeek = Formatter .getDateTimeFromTS(minTS)
741- val firstDayIndex = (startDateTimeInWeek.dayOfWeek - if (config.isSundayFirst) 0 else 1 ) % 7
741+ val firstDayIndex = startDateTimeInWeek.dayOfMonth // indices must be unique for the visible range (2 weeks)
742+ val lastDayIndex = firstDayIndex + daysCnt
743+ val dayIndices = firstDayIndex.. lastDayIndex
744+ val isSameDayEvent = firstDayIndex == lastDayIndex
742745
743746 var doesEventFit: Boolean
744- val cnt = allDayRows.size - 1
745747 var wasEventHandled = false
746748 var drawAtLine = 0
747- for (index in 0 .. cnt) {
748- doesEventFit = true
749+
750+ for (index in allDayRows.indices) {
749751 drawAtLine = index
752+
750753 val row = allDayRows[index]
751- for (i in firstDayIndex.. firstDayIndex + daysCnt) {
752- if (row.contains(i)) {
753- doesEventFit = false
754- }
755- }
756754
757- for (dayIndex in firstDayIndex.. firstDayIndex + daysCnt) {
758- if (doesEventFit) {
759- row.add(dayIndex)
760- wasEventHandled = true
761- } else if (index == cnt) {
762- if (allDayRows.size == index + 1 ) {
755+ doesEventFit = dayIndices.all { ! row.contains(it) }
756+
757+ if (doesEventFit && isSameDayEvent) {
758+ row.add(firstDayIndex)
759+ wasEventHandled = true
760+ } else {
761+ // handle events spanning midnight
762+ for (dayIndex in dayIndices) {
763+ if (index == allDayRows.lastIndex) {
763764 allDayRows.add(HashSet ())
764765 addNewLine()
765766 drawAtLine++
766767 wasEventHandled = true
768+ allDayRows.last().add(dayIndex)
767769 }
768- allDayRows.last().add(dayIndex)
769770 }
770771 }
771772
@@ -776,7 +777,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
776777
777778 val dayCodeStart = Formatter .getDayCodeFromDateTime(startDateTime).toInt()
778779 val dayCodeEnd = Formatter .getDayCodeFromDateTime(endDateTime).toInt()
779- val dayOfWeek = dayColumns.indexOfFirst { it.tag.toInt() == dayCodeStart || ( it.tag.toInt() > dayCodeStart && it.tag.toInt() <= dayCodeEnd) }
780+ val dayOfWeek = dayColumns.indexOfFirst { it.tag.toInt() == dayCodeStart || it.tag.toInt() in ( dayCodeStart + 1 ) .. dayCodeEnd }
780781 if (dayOfWeek == - 1 ) {
781782 return
782783 }
0 commit comments