@@ -894,31 +894,64 @@ private void getMoreEvents(Calendar day) {
894
894
* @param event The event to cache.
895
895
*/
896
896
private void cacheEvent (WeekViewEvent event ) {
897
+ // do not cache twice
898
+ if (alreadyCached (event )) return ;
899
+
897
900
if (!isSameDay (event .getStartTime (), event .getEndTime ())) {
901
+ // add first day
898
902
Calendar endTime = (Calendar ) event .getStartTime ().clone ();
899
903
endTime .set (Calendar .HOUR_OF_DAY , 23 );
900
904
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
901
928
Calendar startTime = (Calendar ) event .getEndTime ().clone ();
902
929
startTime .set (Calendar .HOUR_OF_DAY , 0 );
903
930
startTime .set (Calendar .MINUTE , 0 );
904
- WeekViewEvent event1 = new WeekViewEvent (event .getId (), event .getName (), event .getLocation (), event .getStartTime (), endTime );
905
- event1 .setColor (event .getColor ());
906
931
WeekViewEvent event2 = new WeekViewEvent (event .getId (), event .getName (), event .getLocation (), startTime , event .getEndTime ());
907
932
event2 .setColor (event .getColor ());
908
- mEventRects .add (new EventRect (event1 , event , null ));
909
933
mEventRects .add (new EventRect (event2 , event , null ));
910
934
}
911
935
else
912
936
mEventRects .add (new EventRect (event , event , null ));
913
937
}
914
938
915
- private void sortAndCacheEvents (List <WeekViewEvent > events ){
939
+ private void sortAndCacheEvents (List <WeekViewEvent > events ) {
916
940
sortEvents (events );
917
- for (WeekViewEvent event : events ){
941
+ for (WeekViewEvent event : events ) {
918
942
cacheEvent (event );
919
943
}
920
944
}
921
945
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
+
922
955
/**
923
956
* Sorts the events in ascending order.
924
957
* @param events The events to be sorted.
0 commit comments