Skip to content

Commit 853ca78

Browse files
Van FanJens Claes
authored andcommitted
Support event over three days.
Conflicts: library/src/main/java/com/alamkanak/weekview/WeekView.java
1 parent e0cf831 commit 853ca78

File tree

2 files changed

+54
-5
lines changed

2 files changed

+54
-5
lines changed

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

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -894,31 +894,64 @@ private void getMoreEvents(Calendar day) {
894894
* @param event The event to cache.
895895
*/
896896
private void cacheEvent(WeekViewEvent event) {
897+
// do not cache twice
898+
if (alreadyCached(event)) return;
899+
897900
if (!isSameDay(event.getStartTime(), event.getEndTime())) {
901+
// add first day
898902
Calendar endTime = (Calendar) event.getStartTime().clone();
899903
endTime.set(Calendar.HOUR_OF_DAY, 23);
900904
endTime.set(Calendar.MINUTE, 59);
905+
WeekViewEvent event1 = new WeekViewEvent(event.getId(), event.getName(), event.getLocation(), event.getStartTime(), endTime);
906+
event1.setColor(event.getColor());
907+
mEventRects.add(new EventRect(event1, event, null));
908+
909+
// add over days
910+
Calendar otherDay = (Calendar) event.getStartTime().clone();
911+
otherDay.add(Calendar.DATE, 1);
912+
while (!isSameDay(otherDay, event.getEndTime())) {
913+
Calendar overDay = (Calendar) otherDay.clone();
914+
overDay.set(Calendar.HOUR_OF_DAY, 0);
915+
overDay.set(Calendar.MINUTE, 0);
916+
Calendar endOfOverDay = (Calendar) overDay.clone();
917+
endOfOverDay.set(Calendar.HOUR_OF_DAY, 23);
918+
endOfOverDay.set(Calendar.MINUTE, 59);
919+
WeekViewEvent eventMore = new WeekViewEvent(event.getId(), event.getName(), overDay, endOfOverDay);
920+
eventMore.setColor(event.getColor());
921+
mEventRects.add(new EventRect(eventMore, event, null));
922+
923+
// next day
924+
otherDay.add(Calendar.DATE, 1);
925+
}
926+
927+
// add last day
901928
Calendar startTime = (Calendar) event.getEndTime().clone();
902929
startTime.set(Calendar.HOUR_OF_DAY, 0);
903930
startTime.set(Calendar.MINUTE, 0);
904-
WeekViewEvent event1 = new WeekViewEvent(event.getId(), event.getName(), event.getLocation(), event.getStartTime(), endTime);
905-
event1.setColor(event.getColor());
906931
WeekViewEvent event2 = new WeekViewEvent(event.getId(), event.getName(), event.getLocation(), startTime, event.getEndTime());
907932
event2.setColor(event.getColor());
908-
mEventRects.add(new EventRect(event1, event, null));
909933
mEventRects.add(new EventRect(event2, event, null));
910934
}
911935
else
912936
mEventRects.add(new EventRect(event, event, null));
913937
}
914938

915-
private void sortAndCacheEvents(List<WeekViewEvent> events){
939+
private void sortAndCacheEvents(List<WeekViewEvent> events) {
916940
sortEvents(events);
917-
for(WeekViewEvent event : events){
941+
for (WeekViewEvent event : events) {
918942
cacheEvent(event);
919943
}
920944
}
921945

946+
private boolean alreadyCached(WeekViewEvent event) {
947+
for (EventRect eventRect : mEventRects) {
948+
if (eventRect.originalEvent.getId() == event.getId()) {
949+
return true;
950+
}
951+
}
952+
return false;
953+
}
954+
922955
/**
923956
* Sorts the events in ascending order.
924957
* @param events The events to be sorted.

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,20 @@ public long getId() {
128128
public void setId(long id) {
129129
this.mId = id;
130130
}
131+
132+
@Override
133+
public boolean equals(Object o) {
134+
if (this == o) return true;
135+
if (o == null || getClass() != o.getClass()) return false;
136+
137+
WeekViewEvent that = (WeekViewEvent) o;
138+
139+
return mId == that.mId;
140+
141+
}
142+
143+
@Override
144+
public int hashCode() {
145+
return (int) (mId ^ (mId >>> 32));
146+
}
131147
}

0 commit comments

Comments
 (0)