Skip to content

Commit 94c1c73

Browse files
committed
Added support for events which expands 1+ days
1 parent 56f810b commit 94c1c73

File tree

3 files changed

+52
-12
lines changed

3 files changed

+52
-12
lines changed

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ Usage
3131
<dependency>
3232
<groupId>com.github.alamkanak</groupId>
3333
<artifactId>android-week-view</artifactId>
34-
<version>1.1.5</version>
34+
<version>1.1.6</version>
3535
<type>aar</type>
3636
</dependency>
3737
```
3838
* Grab via gradle
3939

4040
```groovy
41-
compile 'com.github.alamkanak:android-week-view:1.1.5'
41+
compile 'com.github.alamkanak:android-week-view:1.1.6'
4242
```
4343
2. Add WeekView in your xml layout.
4444

@@ -132,6 +132,10 @@ To do
132132
Changelog
133133
---------
134134

135+
**Version 1.1.6**
136+
137+
* Added support for events that expands to multiple days
138+
135139
**Version 1.1.5**
136140

137141
* A bug related to overlapping events fixed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
VERSION_NAME=1.1.5
1+
VERSION_NAME=1.1.6
22
GROUP=com.github.alamkanak
33

44
POM_DESCRIPTION=Dissect layout traversals on Android.

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

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public boolean onSingleTapConfirmed(MotionEvent e) {
152152
Collections.reverse(reversedEventRects);
153153
for (EventRect event : reversedEventRects) {
154154
if (event.rectF != null && e.getX() > event.rectF.left && e.getX() < event.rectF.right && e.getY() > event.rectF.top && e.getY() < event.rectF.bottom) {
155-
mEventClickListener.onEventClick(event.event, event.rectF);
155+
mEventClickListener.onEventClick(event.originalEvent, event.rectF);
156156
playSoundEffect(SoundEffectConstants.CLICK);
157157
break;
158158
}
@@ -170,7 +170,7 @@ public void onLongPress(MotionEvent e) {
170170
Collections.reverse(reversedEventRects);
171171
for (EventRect event : reversedEventRects) {
172172
if (event.rectF != null && e.getX() > event.rectF.left && e.getX() < event.rectF.right && e.getY() > event.rectF.top && e.getY() < event.rectF.bottom) {
173-
mEventLongPressListener.onEventLongPress(event.event, event.rectF);
173+
mEventLongPressListener.onEventLongPress(event.originalEvent, event.rectF);
174174
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
175175
break;
176176
}
@@ -538,19 +538,37 @@ else if (lineHeight >= availableHeight) {
538538

539539

540540
/**
541-
* A class to hold reference to the events and their visual representation.
541+
* A class to hold reference to the events and their visual representation. An EventRect is
542+
* actually the rectangle that is drawn on the calendar for a given event. There may be more
543+
* than one rectangle for a single event (an event that expands more than one day). In that
544+
* case two instances of the EventRect will be used for a single event. The given event will be
545+
* stored in "originalEvent". But the event that corresponds to rectangle the rectangle
546+
* instance will be stored in "event".
542547
*/
543548
private class EventRect {
544549
public WeekViewEvent event;
550+
public WeekViewEvent originalEvent;
545551
public RectF rectF;
546552
public float left;
547553
public float width;
548554
public float top;
549555
public float bottom;
550556

551-
public EventRect(WeekViewEvent event, RectF rectF) {
557+
/**
558+
* Create a new instance of event rect. An EventRect is actually the rectangle that is drawn
559+
* on the calendar for a given event. There may be more than one rectangle for a single
560+
* event (an event that expands more than one day). In that case two instances of the
561+
* EventRect will be used for a single event. The given event will be stored in
562+
* "originalEvent". But the event that corresponds to rectangle the rectangle instance will
563+
* be stored in "event".
564+
* @param event Represents the event which this instance of rectangle represents.
565+
* @param originalEvent The original event that was passed by the user.
566+
* @param rectF The rectangle.
567+
*/
568+
public EventRect(WeekViewEvent event, WeekViewEvent originalEvent, RectF rectF) {
552569
this.event = event;
553570
this.rectF = rectF;
571+
this.originalEvent = originalEvent;
554572
}
555573
}
556574

@@ -587,7 +605,7 @@ private void getMoreEvents(Calendar day) {
587605
List<WeekViewEvent> events = mMonthChangeListener.onMonthChange((previousMonth==12)?day.get(Calendar.YEAR)-1:day.get(Calendar.YEAR), previousMonth);
588606
sortEvents(events);
589607
for (WeekViewEvent event: events) {
590-
mEventRects.add(new EventRect(event, null));
608+
cacheEvent(event);
591609
}
592610
}
593611
mFetchedMonths[0] = previousMonth;
@@ -599,7 +617,7 @@ private void getMoreEvents(Calendar day) {
599617
List<WeekViewEvent> events = mMonthChangeListener.onMonthChange(day.get(Calendar.YEAR), day.get(Calendar.MONTH) + 1);
600618
sortEvents(events);
601619
for (WeekViewEvent event : events) {
602-
mEventRects.add(new EventRect(event, null));
620+
cacheEvent(event);
603621
}
604622
}
605623
mFetchedMonths[1] = day.get(Calendar.MONTH)+1;
@@ -611,7 +629,7 @@ private void getMoreEvents(Calendar day) {
611629
List<WeekViewEvent> events = mMonthChangeListener.onMonthChange(nextMonth == 1 ? day.get(Calendar.YEAR) + 1 : day.get(Calendar.YEAR), nextMonth);
612630
sortEvents(events);
613631
for (WeekViewEvent event : events) {
614-
mEventRects.add(new EventRect(event, null));
632+
cacheEvent(event);
615633
}
616634
}
617635
mFetchedMonths[2] = nextMonth;
@@ -640,6 +658,25 @@ private void getMoreEvents(Calendar day) {
640658
}
641659
}
642660

661+
private void cacheEvent(WeekViewEvent event) {
662+
if (!isSameDay(event.getStartTime(), event.getEndTime())) {
663+
Calendar endTime = (Calendar) event.getStartTime().clone();
664+
endTime.set(Calendar.HOUR_OF_DAY, 23);
665+
endTime.set(Calendar.MINUTE, 59);
666+
Calendar startTime = (Calendar) event.getEndTime().clone();
667+
startTime.set(Calendar.HOUR_OF_DAY, 00);
668+
startTime.set(Calendar.MINUTE, 0);
669+
WeekViewEvent event1 = new WeekViewEvent(event.getId(), event.getName(), event.getStartTime(), endTime);
670+
event1.setColor(event.getColor());
671+
WeekViewEvent event2 = new WeekViewEvent(event.getId(), event.getName(), startTime, event.getEndTime());
672+
event2.setColor(event.getColor());
673+
mEventRects.add(new EventRect(event1, event, null));
674+
mEventRects.add(new EventRect(event2, event, null));
675+
}
676+
else
677+
mEventRects.add(new EventRect(event, event, null));
678+
}
679+
643680
/**
644681
* Sorts the events in ascending order.
645682
* @param events The events to be sorted.
@@ -691,7 +728,6 @@ private void computePositionOfEvents(List<EventRect> eventRects) {
691728
for (List<EventRect> collisionGroup : collisionGroups) {
692729
expandEventsToMaxWidth(collisionGroup);
693730
}
694-
695731
}
696732

697733
/**
@@ -735,7 +771,7 @@ else if (!isEventsCollide(eventRect.event, column.get(column.size()-1).event)) {
735771
eventRect.width = 1f / columns.size();
736772
eventRect.left = j / columns.size();
737773
eventRect.top = eventRect.event.getStartTime().get(Calendar.HOUR_OF_DAY) * 60 + eventRect.event.getStartTime().get(Calendar.MINUTE);
738-
eventRect.bottom = eventRect.event.getEndTime().get(Calendar.HOUR_OF_DAY) * 60 + eventRect.event.getEndTime().get(Calendar.MINUTE);;
774+
eventRect.bottom = eventRect.event.getEndTime().get(Calendar.HOUR_OF_DAY) * 60 + eventRect.event.getEndTime().get(Calendar.MINUTE);
739775
mEventRects.add(eventRect);
740776
}
741777
j++;

0 commit comments

Comments
 (0)