Skip to content

Commit 8297fb6

Browse files
committed
Merge branch 'master' of github.com:SimpleMobileTools/Simple-Calendar
2 parents 9596e8b + dd21884 commit 8297fb6

1 file changed

Lines changed: 21 additions & 20 deletions

File tree

  • app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments

app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)