Skip to content

Commit 9d6f070

Browse files
fixed possible OOM when setting a time of 0:00 to events, due to splitting them into multiple events
1 parent 8ebc646 commit 9d6f070

File tree

3 files changed

+28
-28
lines changed

3 files changed

+28
-28
lines changed

library/src/main/java/com/alamkanak/weekview/WeekView.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1849,9 +1849,6 @@ class WeekView @JvmOverloads constructor(context: Context, attrs: AttributeSet?
18491849
if (mEvents == null)
18501850
mEvents = ArrayList()
18511851

1852-
if (this.weekViewLoader == null && !isInEditMode)
1853-
throw IllegalStateException("You must provide a MonthChangeListener")
1854-
18551852
// If a refresh was requested then reset some variables.
18561853
if (mRefreshEvents) {
18571854
this.clearEvents()
@@ -1910,9 +1907,9 @@ class WeekView @JvmOverloads constructor(context: Context, attrs: AttributeSet?
19101907
private fun cacheEvent(event: WeekViewEvent) {
19111908
if (!event.isAllDay && event.startTime!! >= event.endTime)
19121909
return
1913-
val splitedEvents = event.splitWeekViewEvents()
1914-
for (splitedEvent in splitedEvents) {
1915-
mEventRects!!.add(EventRect(splitedEvent, event, null))
1910+
val splitEvents = event.splitWeekViewEvents()
1911+
for (splitEvent in splitEvents) {
1912+
mEventRects!!.add(EventRect(splitEvent, event, null))
19161913
}
19171914

19181915
mEvents!!.add(event)

library/src/main/java/com/alamkanak/weekview/WeekViewEvent.kt

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -127,30 +127,31 @@ class WeekViewEvent {
127127
events.add(event1)
128128

129129
// Add other days.
130-
val otherDay = this.startTime!!.clone() as Calendar
131-
otherDay.add(Calendar.DATE, 1)
132-
while (!isSameDay(otherDay, this.endTime!!)) {
133-
val overDay = otherDay.clone() as Calendar
134-
overDay.set(Calendar.HOUR_OF_DAY, 0)
135-
overDay.set(Calendar.MINUTE, 0)
136-
val endOfOverDay = overDay.clone() as Calendar
137-
endOfOverDay.set(Calendar.HOUR_OF_DAY, 23)
138-
endOfOverDay.set(Calendar.MINUTE, 59)
139-
val eventMore = WeekViewEvent(this.identifier!!, this.name, null, overDay, endOfOverDay, this.isAllDay)
140-
eventMore.color = this.color
141-
events.add(eventMore)
142-
143-
// Add next day.
130+
if (!isSameDay(this.startTime!!, this.endTime!!)) {
131+
val otherDay = this.startTime!!.clone() as Calendar
144132
otherDay.add(Calendar.DATE, 1)
133+
while (!isSameDay(otherDay, this.endTime!!)) {
134+
val overDay = otherDay.clone() as Calendar
135+
overDay.set(Calendar.HOUR_OF_DAY, 0)
136+
overDay.set(Calendar.MINUTE, 0)
137+
val endOfOverDay = overDay.clone() as Calendar
138+
endOfOverDay.set(Calendar.HOUR_OF_DAY, 23)
139+
endOfOverDay.set(Calendar.MINUTE, 59)
140+
val eventMore = WeekViewEvent(this.identifier!!, this.name, null, overDay, endOfOverDay, this.isAllDay)
141+
eventMore.color = this.color
142+
events.add(eventMore)
143+
144+
// Add next day.
145+
otherDay.add(Calendar.DATE, 1)
146+
}
147+
// Add last day.
148+
val startTime = this.endTime!!.clone() as Calendar
149+
startTime.set(Calendar.HOUR_OF_DAY, 0)
150+
startTime.set(Calendar.MINUTE, 0)
151+
val event2 = WeekViewEvent(this.identifier!!, this.name, this.location, startTime, this.endTime!!, this.isAllDay)
152+
event2.color = this.color
153+
events.add(event2)
145154
}
146-
147-
// Add last day.
148-
val startTime = this.endTime!!.clone() as Calendar
149-
startTime.set(Calendar.HOUR_OF_DAY, 0)
150-
startTime.set(Calendar.MINUTE, 0)
151-
val event2 = WeekViewEvent(this.identifier!!, this.name, this.location, startTime, this.endTime!!, this.isAllDay)
152-
event2.color = this.color
153-
events.add(event2)
154155
} else {
155156
events.add(this)
156157
}

library/src/main/java/com/alamkanak/weekview/WeekViewUtil.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ object WeekViewUtil {
2727
*/
2828
@JvmStatic
2929
fun isSameDay(dateOne: Calendar, dateTwo: Calendar): Boolean {
30+
if (dateOne === dateTwo)
31+
return true
3032
return dateOne.get(Calendar.YEAR) == dateTwo.get(Calendar.YEAR) && dateOne.get(Calendar.DAY_OF_YEAR) == dateTwo.get(Calendar.DAY_OF_YEAR)
3133
}
3234

0 commit comments

Comments
 (0)