private void updateDisplay(boolean announce) {
    if (mDayOfWeekView != null) {
      mDayOfWeekView.setText(
          mCalendar
              .getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault())
              .toUpperCase(Locale.getDefault()));
    }

    mSelectedMonthTextView.setText(
        mCalendar
            .getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.getDefault())
            .toUpperCase(Locale.getDefault()));
    mSelectedDayTextView.setText(DAY_FORMAT.format(mCalendar.getTime()));

    long millis = mCalendar.getTimeInMillis();
    mAnimator.setDateMillis(millis);
    int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_YEAR;
    String monthAndDayText = DateUtils.formatDateTime(getActivity(), millis, flags);
    mMonthAndDayView.setContentDescription(monthAndDayText);

    if (announce) {
      flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR;
      String fullDateText = DateUtils.formatDateTime(getActivity(), millis, flags);
      Utils.tryAccessibilityAnnounce(mAnimator, fullDateText);
    }
  }
 private void adjustDayInMonthIfNeeded(int month, int year) {
   int day = mCalendar.get(Calendar.DAY_OF_MONTH);
   int daysInMonth = Utils.getDaysInMonth(month, year);
   if (day > daysInMonth) {
     mCalendar.set(Calendar.DAY_OF_MONTH, daysInMonth);
   }
 }
  private void setCurrentView() {
    long millis = mCalendar.getTimeInMillis();

    ObjectAnimator pulseAnimator = Utils.getPulseAnimator(mMonthAndDayView, 0.9f, 1.05f);
    if (mDelayAnimation) {
      pulseAnimator.setStartDelay(ANIMATION_DELAY);
      mDelayAnimation = false;
    }
    mDayPickerView.onDateChanged();
    mMonthAndDayView.setSelected(true);

    pulseAnimator.start();

    int flags = DateUtils.FORMAT_SHOW_DATE;
    String dayString = DateUtils.formatDateTime(getActivity(), millis, flags);
    mAnimator.setContentDescription(mDayPickerDescription + ": " + dayString);
    Utils.tryAccessibilityAnnounce(mAnimator, mSelectDay);
  }