@@ -152,7 +152,7 @@ public boolean onSingleTapConfirmed(MotionEvent e) {
152
152
Collections .reverse (reversedEventRects );
153
153
for (EventRect event : reversedEventRects ) {
154
154
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 );
156
156
playSoundEffect (SoundEffectConstants .CLICK );
157
157
break ;
158
158
}
@@ -170,7 +170,7 @@ public void onLongPress(MotionEvent e) {
170
170
Collections .reverse (reversedEventRects );
171
171
for (EventRect event : reversedEventRects ) {
172
172
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 );
174
174
performHapticFeedback (HapticFeedbackConstants .LONG_PRESS );
175
175
break ;
176
176
}
@@ -538,19 +538,37 @@ else if (lineHeight >= availableHeight) {
538
538
539
539
540
540
/**
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".
542
547
*/
543
548
private class EventRect {
544
549
public WeekViewEvent event ;
550
+ public WeekViewEvent originalEvent ;
545
551
public RectF rectF ;
546
552
public float left ;
547
553
public float width ;
548
554
public float top ;
549
555
public float bottom ;
550
556
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 ) {
552
569
this .event = event ;
553
570
this .rectF = rectF ;
571
+ this .originalEvent = originalEvent ;
554
572
}
555
573
}
556
574
@@ -587,7 +605,7 @@ private void getMoreEvents(Calendar day) {
587
605
List <WeekViewEvent > events = mMonthChangeListener .onMonthChange ((previousMonth ==12 )?day .get (Calendar .YEAR )-1 :day .get (Calendar .YEAR ), previousMonth );
588
606
sortEvents (events );
589
607
for (WeekViewEvent event : events ) {
590
- mEventRects . add ( new EventRect ( event , null ) );
608
+ cacheEvent ( event );
591
609
}
592
610
}
593
611
mFetchedMonths [0 ] = previousMonth ;
@@ -599,7 +617,7 @@ private void getMoreEvents(Calendar day) {
599
617
List <WeekViewEvent > events = mMonthChangeListener .onMonthChange (day .get (Calendar .YEAR ), day .get (Calendar .MONTH ) + 1 );
600
618
sortEvents (events );
601
619
for (WeekViewEvent event : events ) {
602
- mEventRects . add ( new EventRect ( event , null ) );
620
+ cacheEvent ( event );
603
621
}
604
622
}
605
623
mFetchedMonths [1 ] = day .get (Calendar .MONTH )+1 ;
@@ -611,7 +629,7 @@ private void getMoreEvents(Calendar day) {
611
629
List <WeekViewEvent > events = mMonthChangeListener .onMonthChange (nextMonth == 1 ? day .get (Calendar .YEAR ) + 1 : day .get (Calendar .YEAR ), nextMonth );
612
630
sortEvents (events );
613
631
for (WeekViewEvent event : events ) {
614
- mEventRects . add ( new EventRect ( event , null ) );
632
+ cacheEvent ( event );
615
633
}
616
634
}
617
635
mFetchedMonths [2 ] = nextMonth ;
@@ -640,6 +658,25 @@ private void getMoreEvents(Calendar day) {
640
658
}
641
659
}
642
660
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
+
643
680
/**
644
681
* Sorts the events in ascending order.
645
682
* @param events The events to be sorted.
@@ -691,7 +728,6 @@ private void computePositionOfEvents(List<EventRect> eventRects) {
691
728
for (List <EventRect > collisionGroup : collisionGroups ) {
692
729
expandEventsToMaxWidth (collisionGroup );
693
730
}
694
-
695
731
}
696
732
697
733
/**
@@ -735,7 +771,7 @@ else if (!isEventsCollide(eventRect.event, column.get(column.size()-1).event)) {
735
771
eventRect .width = 1f / columns .size ();
736
772
eventRect .left = j / columns .size ();
737
773
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 );
739
775
mEventRects .add (eventRect );
740
776
}
741
777
j ++;
0 commit comments