// Path: library/src/main/java/com/prolificinteractive/materialcalendarview/format/DayFormatter.java
// public interface DayFormatter {
// 
//   /**
//    * Default format for displaying the day.
//    */
//   String DEFAULT_FORMAT = "d";
// 
//   /**
//    * Default implementation used by {@linkplain com.prolificinteractive.materialcalendarview.MaterialCalendarView}
//    */
//   DayFormatter DEFAULT = new DateFormatDayFormatter();
// 
//   /**
//    * Format a given day into a string
//    *
//    * @param day the day
//    * @return a label for the day
//    */
//   @NonNull String format(@NonNull CalendarDay day);
// }
// 
// Path: library/src/main/java/com/prolificinteractive/materialcalendarview/format/WeekDayFormatter.java
// public interface WeekDayFormatter {
//   /**
//    * Convert a given day of the week into a label.
//    *
//    * @param dayOfWeek the day of the week as returned by {@linkplain DayOfWeek#getValue()}.
//    * @return a label for the day of week.
//    */
//   CharSequence format(DayOfWeek dayOfWeek);
// 
//   /**
//    * Default implementation used by {@linkplain com.prolificinteractive.materialcalendarview.MaterialCalendarView}
//    */
//   WeekDayFormatter DEFAULT = new CalendarWeekDayFormatter();
// }
// 
// Path: library/src/main/java/com/prolificinteractive/materialcalendarview/MaterialCalendarView.java
// public static boolean showOtherMonths(@ShowOtherDates int showOtherDates) {
//   return (showOtherDates & SHOW_OTHER_MONTHS) != 0;
// }


import android.os.Build;
import android.support.annotation.NonNull;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import com.prolificinteractive.materialcalendarview.MaterialCalendarView.ShowOtherDates;
import com.prolificinteractive.materialcalendarview.format.DayFormatter;
import com.prolificinteractive.materialcalendarview.format.WeekDayFormatter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.threeten.bp.DayOfWeek;
import org.threeten.bp.LocalDate;
import org.threeten.bp.temporal.TemporalField;
import org.threeten.bp.temporal.WeekFields;
import static com.prolificinteractive.materialcalendarview.MaterialCalendarView.SHOW_DEFAULTS;
import static com.prolificinteractive.materialcalendarview.MaterialCalendarView.showOtherMonths;
  public void setShowOtherDates(@ShowOtherDates int showFlags) {
    this.showOtherDates = showFlags;
    updateUi();
  }

  public void setSelectionEnabled(boolean selectionEnabled) {
    for (DayView dayView : dayViews) {
      dayView.setOnClickListener(selectionEnabled ? this : null);
      dayView.setClickable(selectionEnabled);
    }
  }

  public void setSelectionColor(int color) {
    for (DayView dayView : dayViews) {
      dayView.setSelectionColor(color);
    }
  }

  public void setWeekDayFormatter(WeekDayFormatter formatter) {
    for (WeekDayView dayView : weekDayViews) {
      dayView.setWeekDayFormatter(formatter);
    }
  }

  public void setDayFormatter(DayFormatter formatter) {
    for (DayView dayView : dayViews) {
      dayView.setDayFormatter(formatter);
    }
  }

// Path: library/src/main/java/com/prolificinteractive/materialcalendarview/format/DayFormatter.java
// public interface DayFormatter {
// 
//   /**
//    * Default format for displaying the day.
//    */
//   String DEFAULT_FORMAT = "d";
// 
//   /**
//    * Default implementation used by {@linkplain com.prolificinteractive.materialcalendarview.MaterialCalendarView}
//    */
//   DayFormatter DEFAULT = new DateFormatDayFormatter();
// 
//   /**
//    * Format a given day into a string
//    *
//    * @param day the day
//    * @return a label for the day
//    */
//   @NonNull String format(@NonNull CalendarDay day);
// }
// 
// Path: library/src/main/java/com/prolificinteractive/materialcalendarview/format/WeekDayFormatter.java
// public interface WeekDayFormatter {
//   /**
//    * Convert a given day of the week into a label.
//    *
//    * @param dayOfWeek the day of the week as returned by {@linkplain DayOfWeek#getValue()}.
//    * @return a label for the day of week.
//    */
//   CharSequence format(DayOfWeek dayOfWeek);
// 
//   /**
//    * Default implementation used by {@linkplain com.prolificinteractive.materialcalendarview.MaterialCalendarView}
//    */
//   WeekDayFormatter DEFAULT = new CalendarWeekDayFormatter();
// }
// 
// Path: library/src/main/java/com/prolificinteractive/materialcalendarview/MaterialCalendarView.java
// public static boolean showOtherMonths(@ShowOtherDates int showOtherDates) {
//   return (showOtherDates & SHOW_OTHER_MONTHS) != 0;
// }


// Path: library/src/main/java/com/prolificinteractive/materialcalendarview/CalendarPagerView.java
import android.os.Build;
import android.support.annotation.NonNull;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import com.prolificinteractive.materialcalendarview.MaterialCalendarView.ShowOtherDates;
import com.prolificinteractive.materialcalendarview.format.DayFormatter;
import com.prolificinteractive.materialcalendarview.format.WeekDayFormatter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.threeten.bp.DayOfWeek;
import org.threeten.bp.LocalDate;
import org.threeten.bp.temporal.TemporalField;
import org.threeten.bp.temporal.WeekFields;
import static com.prolificinteractive.materialcalendarview.MaterialCalendarView.SHOW_DEFAULTS;
import static com.prolificinteractive.materialcalendarview.MaterialCalendarView.showOtherMonths;

  public void setShowOtherDates(@ShowOtherDates int showFlags) {
    this.showOtherDates = showFlags;
    updateUi();
  }

  public void setSelectionEnabled(boolean selectionEnabled) {
    for (DayView dayView : dayViews) {
      dayView.setOnClickListener(selectionEnabled ? this : null);
      dayView.setClickable(selectionEnabled);
    }
  }

  public void setSelectionColor(int color) {
    for (DayView dayView : dayViews) {
      dayView.setSelectionColor(color);
    }
  }

  public void setWeekDayFormatter(WeekDayFormatter formatter) {
    for (WeekDayView dayView : weekDayViews) {
      dayView.setWeekDayFormatter(formatter);
    }
  }

  public void setDayFormatter(DayFormatter formatter) {
    for (DayView dayView : dayViews) {
      dayView.setDayFormatter(formatter);
    }
  }

  public void setDayFormatterContentDescription(DayFormatter formatter) {