@Override
  public void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt(KEY_SELECTED_YEAR, mCalendar.get(Calendar.YEAR));
    outState.putInt(KEY_SELECTED_MONTH, mCalendar.get(Calendar.MONTH));
    outState.putInt(KEY_SELECTED_DAY, mCalendar.get(Calendar.DAY_OF_MONTH));
    outState.putInt(KEY_WEEK_START, mWeekStart);
    outState.putInt(KEY_YEAR_START, mMinYear);
    outState.putInt(KEY_YEAR_END, mMaxYear);
    outState.putInt(KEY_CURRENT_VIEW, mCurrentView);
    outState.putInt(KEY_SELECTED_YEAR_END, mCalendarEnd.get(Calendar.YEAR));
    outState.putInt(KEY_SELECTED_MONTH_END, mCalendarEnd.get(Calendar.MONTH));
    outState.putInt(KEY_SELECTED_DAY_END, mCalendarEnd.get(Calendar.DAY_OF_MONTH));
    outState.putInt(KEY_WEEK_START_END, mWeekStartEnd);
    outState.putInt(KEY_YEAR_START_END, mMinYear);
    outState.putInt(KEY_YEAR_END_END, mMaxYear);
    outState.putInt(KEY_CURRENT_VIEW_END, mCurrentViewEnd);
    int listPosition = -1;
    int listPositionEnd = -1;
    if (mCurrentView == MONTH_AND_DAY_VIEW || mCurrentViewEnd == MONTH_AND_DAY_VIEW) {
      listPosition = mDayPickerView.getMostVisiblePosition();
      listPositionEnd = mDayPickerViewEnd.getMostVisiblePosition();

    } else if (mCurrentView == YEAR_VIEW || mCurrentViewEnd == YEAR_VIEW) {
      listPosition = mYearPickerView.getFirstVisiblePosition();
      listPositionEnd = mYearPickerViewEnd.getFirstVisiblePosition();
      outState.putInt(KEY_LIST_POSITION_OFFSET, mYearPickerView.getFirstPositionOffset());
      outState.putInt(KEY_LIST_POSITION_OFFSET_END, mYearPickerViewEnd.getFirstPositionOffset());
    }
    outState.putInt(KEY_LIST_POSITION, listPosition);
    outState.putInt(KEY_LIST_POSITION_END, listPositionEnd);
    outState.putSerializable(KEY_MIN_DATE, mMinDate);
    outState.putSerializable(KEY_MAX_DATE, mMaxDate);
    outState.putSerializable(KEY_MIN_DATE_END, mMinDateEnd);
    outState.putSerializable(KEY_MAX_DATE_END, mMaxDateEnd);
    outState.putSerializable(KEY_HIGHLIGHTED_DAYS, highlightedDays);
    outState.putSerializable(KEY_SELECTABLE_DAYS, selectableDays);
    outState.putSerializable(KEY_HIGHLIGHTED_DAYS_END, highlightedDaysEnd);
    outState.putSerializable(KEY_SELECTABLE_DAYS_END, selectableDaysEnd);
    outState.putBoolean(KEY_THEME_DARK, mThemeDark);
    outState.putInt(KEY_ACCENT, mAccentColor);
    outState.putBoolean(KEY_VIBRATE, mVibrate);
    outState.putBoolean(KEY_DISMISS, mDismissOnPause);
  }