// 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/TitleFormatter.java
// public interface TitleFormatter {
// 
//   String DEFAULT_FORMAT = "LLLL yyyy";
// 
//   TitleFormatter DEFAULT = new DateFormatTitleFormatter();
// 
//   /**
//    * Converts the supplied day to a suitable month/year title
//    *
//    * @param day the day containing relevant month and year information
//    * @return a label to display for the given month/year
//    */
//   CharSequence format(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();
// }


import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import com.prolificinteractive.materialcalendarview.MaterialCalendarView.ShowOtherDates;
import com.prolificinteractive.materialcalendarview.format.DayFormatter;
import com.prolificinteractive.materialcalendarview.format.TitleFormatter;
import com.prolificinteractive.materialcalendarview.format.WeekDayFormatter;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.threeten.bp.LocalDate;
package com.prolificinteractive.materialcalendarview;


/**
 * Pager adapter backing the calendar view
 */
abstract class CalendarPagerAdapter<V extends CalendarPagerView> extends PagerAdapter {

  private final ArrayDeque<V> currentViews;

  protected final MaterialCalendarView mcv;
  private final CalendarDay today;

// 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/TitleFormatter.java
// public interface TitleFormatter {
// 
//   String DEFAULT_FORMAT = "LLLL yyyy";
// 
//   TitleFormatter DEFAULT = new DateFormatTitleFormatter();
// 
//   /**
//    * Converts the supplied day to a suitable month/year title
//    *
//    * @param day the day containing relevant month and year information
//    * @return a label to display for the given month/year
//    */
//   CharSequence format(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/CalendarPagerAdapter.java
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import com.prolificinteractive.materialcalendarview.MaterialCalendarView.ShowOtherDates;
import com.prolificinteractive.materialcalendarview.format.DayFormatter;
import com.prolificinteractive.materialcalendarview.format.TitleFormatter;
import com.prolificinteractive.materialcalendarview.format.WeekDayFormatter;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.threeten.bp.LocalDate;

package com.prolificinteractive.materialcalendarview;


/**
 * Pager adapter backing the calendar view
 */
abstract class CalendarPagerAdapter<V extends CalendarPagerView> extends PagerAdapter {

  private final ArrayDeque<V> currentViews;

  protected final MaterialCalendarView mcv;
  private final CalendarDay today;

  @NonNull private TitleFormatter titleFormatter = TitleFormatter.DEFAULT;