Skip to content

Commit 34dbef1

Browse files
author
Jesse Hoobergs
committed
Added splitWeekViewEvents method to WeekViewEvent class
1 parent 27d70f9 commit 34dbef1

File tree

3 files changed

+96
-76
lines changed

3 files changed

+96
-76
lines changed

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

Lines changed: 11 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ private void calculateHeaderHeight(){
505505
day.add(Calendar.DATE, dayNumber);
506506
for (int i = 0; i < mEventRects.size(); i++) {
507507

508-
if (isSameDay(mEventRects.get(i).event.getStartTime(), day) && mEventRects.get(i).event.isAllDay()) {
508+
if (WeekViewUtil.isSameDay(mEventRects.get(i).event.getStartTime(), day) && mEventRects.get(i).event.isAllDay()) {
509509
containsAllDayEvent = true;
510510
break;
511511
}
@@ -549,7 +549,7 @@ private void drawHeaderRowAndEvents(Canvas canvas) {
549549

550550
calculateHeaderHeight(); //Make sure the header is the right size (depends on AllDay events)
551551

552-
Calendar today = today();
552+
Calendar today = WeekViewUtil.today();
553553

554554
if (mAreDimensionsInvalid) {
555555
mEffectiveMinHourHeight= Math.max(mMinHourHeight, (int) ((getHeight() - mHeaderHeight - mHeaderRowPadding * 2 - mHeaderMarginBottom) / 24));
@@ -640,7 +640,7 @@ else if (mNewHourHeight > mMaxHourHeight)
640640
mLastVisibleDay = (Calendar) day.clone();
641641
day.add(Calendar.DATE, dayNumber - 1);
642642
mLastVisibleDay.add(Calendar.DATE, dayNumber - 2);
643-
boolean sameDay = isSameDay(day, today);
643+
boolean sameDay = WeekViewUtil.isSameDay(day, today);
644644

645645
// Get more events if necessary. We want to store the events 3 months beforehand. Get
646646
// events only when it is the first iteration of the loop.
@@ -722,7 +722,7 @@ else if (day.before(today)) {
722722
// Check if the day is today.
723723
day = (Calendar) today.clone();
724724
day.add(Calendar.DATE, dayNumber - 1);
725-
boolean sameDay = isSameDay(day, today);
725+
boolean sameDay = WeekViewUtil.isSameDay(day, today);
726726

727727
// Draw the day labels.
728728
String dayLabel = getDateTimeInterpreter().interpretDate(day);
@@ -750,7 +750,7 @@ private Calendar getTimeFromPoint(float x, float y){
750750
dayNumber++) {
751751
float start = (startPixel < mHeaderColumnWidth ? mHeaderColumnWidth : startPixel);
752752
if (mWidthPerDay + startPixel - start > 0 && x > start && x < startPixel + mWidthPerDay){
753-
Calendar day = today();
753+
Calendar day = WeekViewUtil.today();
754754
day.add(Calendar.DATE, dayNumber - 1);
755755
float pixelsFromZero = y - mCurrentOrigin.y - mHeaderHeight
756756
- mHeaderRowPadding * 2 - mTimeTextHeight/2 - mHeaderMarginBottom;
@@ -774,7 +774,7 @@ private Calendar getTimeFromPoint(float x, float y){
774774
private void drawEvents(Calendar date, float startFromPixel, Canvas canvas) {
775775
if (mEventRects != null && mEventRects.size() > 0) {
776776
for (int i = 0; i < mEventRects.size(); i++) {
777-
if (isSameDay(mEventRects.get(i).event.getStartTime(), date) && !mEventRects.get(i).event.isAllDay()){
777+
if (WeekViewUtil.isSameDay(mEventRects.get(i).event.getStartTime(), date) && !mEventRects.get(i).event.isAllDay()){
778778

779779
// Calculate top.
780780
float top = mHourHeight * 24 * mEventRects.get(i).top / 1440 + mCurrentOrigin.y + mHeaderHeight + mHeaderRowPadding * 2 + mHeaderMarginBottom + mTimeTextHeight/2 + mEventMarginVertical;
@@ -819,7 +819,7 @@ top < getHeight() &&
819819
private void drawAllDayEvents(Calendar date, float startFromPixel, Canvas canvas) {
820820
if (mEventRects != null && mEventRects.size() > 0) {
821821
for (int i = 0; i < mEventRects.size(); i++) {
822-
if (isSameDay(mEventRects.get(i).event.getStartTime(), date) && mEventRects.get(i).event.isAllDay()){
822+
if (WeekViewUtil.isSameDay(mEventRects.get(i).event.getStartTime(), date) && mEventRects.get(i).event.isAllDay()){
823823

824824
// Calculate top.
825825
float top = mHeaderRowPadding * 2 + mHeaderMarginBottom + + mTimeTextHeight/2 + mEventMarginVertical;
@@ -1029,7 +1029,7 @@ else if (periodToFetch == mFetchedPeriod+1){
10291029
while (i < tempEvents.size()) {
10301030
// Collect all other events for same day.
10311031
EventRect eventRect2 = tempEvents.get(i);
1032-
if (isSameDay(eventRect1.event.getStartTime(), eventRect2.event.getStartTime())) {
1032+
if (WeekViewUtil.isSameDay(eventRect1.event.getStartTime(), eventRect2.event.getStartTime())) {
10331033
tempEvents.remove(i);
10341034
eventRects.add(eventRect2);
10351035
} else {
@@ -1047,43 +1047,9 @@ else if (periodToFetch == mFetchedPeriod+1){
10471047
private void cacheEvent(WeekViewEvent event) {
10481048
if(event.getStartTime().compareTo(event.getEndTime()) >= 0)
10491049
return;
1050-
if (!isSameDay(event.getStartTime(), event.getEndTime())) {
1051-
// Add first day.
1052-
Calendar endTime = (Calendar) event.getStartTime().clone();
1053-
endTime.set(Calendar.HOUR_OF_DAY, 23);
1054-
endTime.set(Calendar.MINUTE, 59);
1055-
WeekViewEvent event1 = new WeekViewEvent(event.getId(), event.getName(), event.getLocation(), event.getStartTime(), endTime, event.isAllDay());
1056-
event1.setColor(event.getColor());
1057-
mEventRects.add(new EventRect(event1, event, null));
1058-
1059-
// Add other days.
1060-
Calendar otherDay = (Calendar) event.getStartTime().clone();
1061-
otherDay.add(Calendar.DATE, 1);
1062-
while (!isSameDay(otherDay, event.getEndTime())) {
1063-
Calendar overDay = (Calendar) otherDay.clone();
1064-
overDay.set(Calendar.HOUR_OF_DAY, 0);
1065-
overDay.set(Calendar.MINUTE, 0);
1066-
Calendar endOfOverDay = (Calendar) overDay.clone();
1067-
endOfOverDay.set(Calendar.HOUR_OF_DAY, 23);
1068-
endOfOverDay.set(Calendar.MINUTE, 59);
1069-
WeekViewEvent eventMore = new WeekViewEvent(event.getId(), event.getName(),null, overDay, endOfOverDay, event.isAllDay());
1070-
eventMore.setColor(event.getColor());
1071-
mEventRects.add(new EventRect(eventMore, event, null));
1072-
1073-
// Add next day.
1074-
otherDay.add(Calendar.DATE, 1);
1075-
}
1076-
1077-
// Add last day.
1078-
Calendar startTime = (Calendar) event.getEndTime().clone();
1079-
startTime.set(Calendar.HOUR_OF_DAY, 0);
1080-
startTime.set(Calendar.MINUTE, 0);
1081-
WeekViewEvent event2 = new WeekViewEvent(event.getId(), event.getName(), event.getLocation(), startTime, event.getEndTime(), event.isAllDay());
1082-
event2.setColor(event.getColor());
1083-
mEventRects.add(new EventRect(event2, event, null));
1084-
}
1085-
else {
1086-
mEventRects.add(new EventRect(event, event, null));
1050+
List<WeekViewEvent> splitedEvents = event.splitWeekViewEvents();
1051+
for(WeekViewEvent splitedEvent: splitedEvents){
1052+
mEventRects.add(new EventRect(splitedEvent, event, null));
10871053
}
10881054
}
10891055

@@ -2041,35 +2007,4 @@ public interface ScrollListener {
20412007
*/
20422008
void onFirstVisibleDayChanged(Calendar newFirstVisibleDay, Calendar oldFirstVisibleDay);
20432009
}
2044-
2045-
2046-
/////////////////////////////////////////////////////////////////
2047-
//
2048-
// Helper methods.
2049-
//
2050-
/////////////////////////////////////////////////////////////////
2051-
2052-
/**
2053-
* Checks if two times are on the same day.
2054-
* @param dayOne The first day.
2055-
* @param dayTwo The second day.
2056-
* @return Whether the times are on the same day.
2057-
*/
2058-
private boolean isSameDay(Calendar dayOne, Calendar dayTwo) {
2059-
return dayOne.get(Calendar.YEAR) == dayTwo.get(Calendar.YEAR) && dayOne.get(Calendar.DAY_OF_YEAR) == dayTwo.get(Calendar.DAY_OF_YEAR);
2060-
}
2061-
2062-
/**
2063-
* Returns a calendar instance at the start of this day
2064-
* @return the calendar instance
2065-
*/
2066-
private Calendar today(){
2067-
Calendar today = Calendar.getInstance();
2068-
today.set(Calendar.HOUR_OF_DAY, 0);
2069-
today.set(Calendar.MINUTE, 0);
2070-
today.set(Calendar.SECOND, 0);
2071-
today.set(Calendar.MILLISECOND, 0);
2072-
return today;
2073-
}
2074-
20752010
}

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

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.alamkanak.weekview;
22

3+
import java.util.ArrayList;
34
import java.util.Calendar;
5+
import java.util.List;
46

57
/**
68
* Created by Raquib-ul-Alam Kanak on 7/21/2014.
@@ -163,4 +165,48 @@ public boolean equals(Object o) {
163165
public int hashCode() {
164166
return (int) (mId ^ (mId >>> 32));
165167
}
168+
169+
public List<WeekViewEvent> splitWeekViewEvents(){
170+
//This function splits the WeekViewEvent in WeekViewEvents by day
171+
List<WeekViewEvent> events = new ArrayList<WeekViewEvent>();
172+
if (!WeekViewUtil.isSameDay(this.getStartTime(), this.getEndTime())) {
173+
Calendar endTime = (Calendar) this.getStartTime().clone();
174+
endTime.set(Calendar.HOUR_OF_DAY, 23);
175+
endTime.set(Calendar.MINUTE, 59);
176+
WeekViewEvent event1 = new WeekViewEvent(this.getId(), this.getName(), this.getLocation(), this.getStartTime(), endTime, this.isAllDay());
177+
event1.setColor(this.getColor());
178+
events.add(event1);
179+
180+
// Add other days.
181+
Calendar otherDay = (Calendar) this.getStartTime().clone();
182+
otherDay.add(Calendar.DATE, 1);
183+
while (!WeekViewUtil.isSameDay(otherDay, this.getEndTime())) {
184+
Calendar overDay = (Calendar) otherDay.clone();
185+
overDay.set(Calendar.HOUR_OF_DAY, 0);
186+
overDay.set(Calendar.MINUTE, 0);
187+
Calendar endOfOverDay = (Calendar) overDay.clone();
188+
endOfOverDay.set(Calendar.HOUR_OF_DAY, 23);
189+
endOfOverDay.set(Calendar.MINUTE, 59);
190+
WeekViewEvent eventMore = new WeekViewEvent(this.getId(), this.getName(), null, overDay, endOfOverDay, this.isAllDay());
191+
eventMore.setColor(this.getColor());
192+
events.add(eventMore);
193+
194+
// Add next day.
195+
otherDay.add(Calendar.DATE, 1);
196+
}
197+
198+
// Add last day.
199+
Calendar startTime = (Calendar) this.getEndTime().clone();
200+
startTime.set(Calendar.HOUR_OF_DAY, 0);
201+
startTime.set(Calendar.MINUTE, 0);
202+
WeekViewEvent event2 = new WeekViewEvent(this.getId(), this.getName(), this.getLocation(), startTime, this.getEndTime(), this.isAllDay());
203+
event2.setColor(this.getColor());
204+
events.add(event2);
205+
}
206+
else{
207+
events.add(this);
208+
}
209+
210+
return events;
211+
}
166212
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.alamkanak.weekview;
2+
3+
import java.util.Calendar;
4+
5+
/**
6+
* Created by jesse on 6/02/2016.
7+
*/
8+
public class WeekViewUtil {
9+
10+
11+
/////////////////////////////////////////////////////////////////
12+
//
13+
// Helper methods.
14+
//
15+
/////////////////////////////////////////////////////////////////
16+
17+
/**
18+
* Checks if two times are on the same day.
19+
* @param dayOne The first day.
20+
* @param dayTwo The second day.
21+
* @return Whether the times are on the same day.
22+
*/
23+
public static boolean isSameDay(Calendar dayOne, Calendar dayTwo) {
24+
return dayOne.get(Calendar.YEAR) == dayTwo.get(Calendar.YEAR) && dayOne.get(Calendar.DAY_OF_YEAR) == dayTwo.get(Calendar.DAY_OF_YEAR);
25+
}
26+
27+
/**
28+
* Returns a calendar instance at the start of this day
29+
* @return the calendar instance
30+
*/
31+
public static Calendar today(){
32+
Calendar today = Calendar.getInstance();
33+
today.set(Calendar.HOUR_OF_DAY, 0);
34+
today.set(Calendar.MINUTE, 0);
35+
today.set(Calendar.SECOND, 0);
36+
today.set(Calendar.MILLISECOND, 0);
37+
return today;
38+
}
39+
}

0 commit comments

Comments
 (0)