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(); }
public MonthView(@NonNull MaterialCalendarView view, CalendarDay month, int firstDayOfWeek) { super(view.getContext()); this.mcv = view; this.month = month; this.firstDayOfWeek = firstDayOfWeek; setClipChildren(false); setClipToPadding(false); Calendar calendar = resetAndGetWorkingCalendar(); for (int i = 0; i < DEFAULT_DAYS_IN_WEEK; i++) { WeekDayView weekDayView = new WeekDayView(getContext(), CalendarUtils.getDayOfWeek(calendar)); weekDayViews.add(weekDayView); addView(weekDayView); calendar.add(DATE, 1); } calendar = resetAndGetWorkingCalendar(); for (int r = 0; r < DEFAULT_MAX_WEEKS; r++) { for (int i = 0; i < DEFAULT_DAYS_IN_WEEK; i++) { CalendarDay day = CalendarDay.from(calendar); DayView dayView = new DayView(getContext(), day); dayView.setOnClickListener(this); monthDayViews.add(dayView); addView(dayView, new LayoutParams()); calendar.add(DATE, 1); } } }
private Calendar resetAndGetWorkingCalendar() { month.copyTo(tempWorkingCalendar); tempWorkingCalendar.setFirstDayOfWeek(firstDayOfWeek); int dow = CalendarUtils.getDayOfWeek(tempWorkingCalendar); int delta = firstDayOfWeek - dow; // If the delta is positive, we want to remove a week boolean removeRow = showOtherMonths(showOtherDates) ? delta >= 0 : delta > 0; if (removeRow) { delta -= DEFAULT_DAYS_IN_WEEK; } tempWorkingCalendar.add(DATE, delta); return tempWorkingCalendar; }
public void setFirstDayOfWeek(int dayOfWeek) { this.firstDayOfWeek = dayOfWeek; Calendar calendar = resetAndGetWorkingCalendar(); calendar.set(DAY_OF_WEEK, dayOfWeek); for (WeekDayView dayView : weekDayViews) { dayView.setDayOfWeek(calendar); calendar.add(DATE, 1); } calendar = resetAndGetWorkingCalendar(); for (DayView dayView : monthDayViews) { CalendarDay day = CalendarDay.from(calendar); dayView.setDay(day); calendar.add(DATE, 1); } updateUi(); }
/** * Determine if this day is within a specified range * * @param minDate the earliest day, may be null * @param maxDate the latest day, may be null * @return true if the between (inclusive) the min and max dates. */ public boolean isInRange(@Nullable CalendarDay minDate, @Nullable CalendarDay maxDate) { return !(minDate != null && minDate.isAfter(this)) && !(maxDate != null && maxDate.isBefore(this)); }