@@ -856,25 +856,29 @@ private void getMoreEvents(Calendar day) {
856
856
}
857
857
858
858
// Prepare to calculate positions of each events.
859
- ArrayList <EventRect > tempEvents = new ArrayList < EventRect >( mEventRects ) ;
859
+ List <EventRect > tempEvents = mEventRects ;
860
860
mEventRects = new ArrayList <EventRect >();
861
- Calendar dayCounter = (Calendar ) day .clone ();
862
- dayCounter .add (Calendar .MONTH , -1 );
863
- dayCounter .set (Calendar .DAY_OF_MONTH , 1 );
864
- Calendar maxDay = (Calendar ) day .clone ();
865
- maxDay .add (Calendar .MONTH , 1 );
866
- maxDay .set (Calendar .DAY_OF_MONTH , maxDay .getActualMaximum (Calendar .DAY_OF_MONTH ));
867
-
868
- // Iterate through each day to calculate the position of the events.
869
- while (dayCounter .getTimeInMillis () <= maxDay .getTimeInMillis ()) {
870
- ArrayList <EventRect > eventRects = new ArrayList <EventRect >();
871
- for (EventRect eventRect : tempEvents ) {
872
- if (isSameDay (eventRect .event .getStartTime (), dayCounter ))
873
- eventRects .add (eventRect );
874
- }
875
861
862
+ // Iterate through each day with events to calculate the position of the events.
863
+ while (tempEvents .size () > 0 ) {
864
+ ArrayList <EventRect > eventRects = new ArrayList <>(tempEvents .size ());
865
+
866
+ // get first event for a day
867
+ EventRect eventRect1 = tempEvents .remove (0 );
868
+ eventRects .add (eventRect1 );
869
+
870
+ int i = 0 ;
871
+ while (i < tempEvents .size ()) {
872
+ // collect all other events for same day
873
+ EventRect eventRect2 = tempEvents .get (i );
874
+ if (isSameDay (eventRect1 .event .getStartTime (), eventRect2 .event .getStartTime ())) {
875
+ tempEvents .remove (i );
876
+ eventRects .add (eventRect2 );
877
+ } else {
878
+ i ++;
879
+ }
880
+ }
876
881
computePositionOfEvents (eventRects );
877
- dayCounter .add (Calendar .DATE , 1 );
878
882
}
879
883
}
880
884
0 commit comments