@Override
 public void onClick(View v) {
   if (v instanceof DayView) {
     DayView dayView = (DayView) v;
     mcv.onDateClicked(dayView.getDate(), !dayView.isChecked());
   }
 }
 public void setSelectedDates(Collection<CalendarDay> dates) {
   for (DayView dayView : monthDayViews) {
     CalendarDay day = dayView.getDate();
     dayView.setChecked(dates != null && dates.contains(day));
   }
   postInvalidate();
 }
 private void updateUi() {
   int ourMonth = month.getMonth();
   for (DayView dayView : monthDayViews) {
     CalendarDay day = dayView.getDate();
     dayView.setupSelection(
         showOtherDates, day.isInRange(minDate, maxDate), day.getMonth() == ourMonth);
   }
   postInvalidate();
 }
 private void invalidateDecorators() {
   final DayViewFacade facadeAccumulator = new DayViewFacade();
   for (DayView dayView : monthDayViews) {
     facadeAccumulator.reset();
     for (DecoratorResult result : decoratorResults) {
       if (result.decorator.shouldDecorate(dayView.getDate())) {
         result.result.applyTo(facadeAccumulator);
       }
     }
     dayView.applyFacade(facadeAccumulator);
   }
 }