226 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.google.android.material.datepicker;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.content.res.ColorStateList;
 | |
| import android.graphics.drawable.Drawable;
 | |
| import android.view.LayoutInflater;
 | |
| import android.view.View;
 | |
| import android.view.ViewGroup;
 | |
| import android.widget.BaseAdapter;
 | |
| import android.widget.TextView;
 | |
| import androidx.core.util.Pair;
 | |
| import com.google.android.material.R;
 | |
| import com.google.android.material.timepicker.TimeModel;
 | |
| import java.util.Collection;
 | |
| import java.util.Iterator;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| class MonthAdapter extends BaseAdapter {
 | |
|     private static final int NO_DAY_NUMBER = -1;
 | |
|     final CalendarConstraints calendarConstraints;
 | |
|     CalendarStyle calendarStyle;
 | |
|     final DateSelector<?> dateSelector;
 | |
|     final DayViewDecorator dayViewDecorator;
 | |
|     final Month month;
 | |
|     private Collection<Long> previouslySelectedDates;
 | |
|     static final int MAXIMUM_WEEKS = UtcDates.getUtcCalendar().getMaximum(4);
 | |
|     private static final int MAXIMUM_GRID_CELLS = (UtcDates.getUtcCalendar().getMaximum(5) + UtcDates.getUtcCalendar().getMaximum(7)) - 1;
 | |
| 
 | |
|     @Override // android.widget.Adapter
 | |
|     public int getCount() {
 | |
|         return MAXIMUM_GRID_CELLS;
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.BaseAdapter, android.widget.Adapter
 | |
|     public boolean hasStableIds() {
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     MonthAdapter(Month month, DateSelector<?> dateSelector, CalendarConstraints calendarConstraints, DayViewDecorator dayViewDecorator) {
 | |
|         this.month = month;
 | |
|         this.dateSelector = dateSelector;
 | |
|         this.calendarConstraints = calendarConstraints;
 | |
|         this.dayViewDecorator = dayViewDecorator;
 | |
|         this.previouslySelectedDates = dateSelector.getSelectedDays();
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.Adapter
 | |
|     public Long getItem(int i) {
 | |
|         if (i < firstPositionInMonth() || i > lastPositionInMonth()) {
 | |
|             return null;
 | |
|         }
 | |
|         return Long.valueOf(this.month.getDay(positionToDay(i)));
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.Adapter
 | |
|     public long getItemId(int i) {
 | |
|         return i / this.month.daysInWeek;
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.Adapter
 | |
|     public TextView getView(int i, View view, ViewGroup viewGroup) {
 | |
|         int i2;
 | |
|         initializeStyles(viewGroup.getContext());
 | |
|         TextView textView = (TextView) view;
 | |
|         if (view == null) {
 | |
|             textView = (TextView) LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.mtrl_calendar_day, viewGroup, false);
 | |
|         }
 | |
|         int firstPositionInMonth = i - firstPositionInMonth();
 | |
|         if (firstPositionInMonth < 0 || firstPositionInMonth >= this.month.daysInMonth) {
 | |
|             textView.setVisibility(8);
 | |
|             textView.setEnabled(false);
 | |
|             i2 = -1;
 | |
|         } else {
 | |
|             i2 = firstPositionInMonth + 1;
 | |
|             textView.setTag(this.month);
 | |
|             textView.setText(String.format(textView.getResources().getConfiguration().locale, TimeModel.NUMBER_FORMAT, Integer.valueOf(i2)));
 | |
|             textView.setVisibility(0);
 | |
|             textView.setEnabled(true);
 | |
|         }
 | |
|         Long item = getItem(i);
 | |
|         if (item == null) {
 | |
|             return textView;
 | |
|         }
 | |
|         updateSelectedState(textView, item.longValue(), i2);
 | |
|         return textView;
 | |
|     }
 | |
| 
 | |
|     public void updateSelectedStates(MaterialCalendarGridView materialCalendarGridView) {
 | |
|         Iterator<Long> it = this.previouslySelectedDates.iterator();
 | |
|         while (it.hasNext()) {
 | |
|             updateSelectedStateForDate(materialCalendarGridView, it.next().longValue());
 | |
|         }
 | |
|         DateSelector<?> dateSelector = this.dateSelector;
 | |
|         if (dateSelector != null) {
 | |
|             Iterator<Long> it2 = dateSelector.getSelectedDays().iterator();
 | |
|             while (it2.hasNext()) {
 | |
|                 updateSelectedStateForDate(materialCalendarGridView, it2.next().longValue());
 | |
|             }
 | |
|             this.previouslySelectedDates = this.dateSelector.getSelectedDays();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void updateSelectedStateForDate(MaterialCalendarGridView materialCalendarGridView, long j) {
 | |
|         if (Month.create(j).equals(this.month)) {
 | |
|             int dayOfMonth = this.month.getDayOfMonth(j);
 | |
|             updateSelectedState((TextView) materialCalendarGridView.getChildAt(materialCalendarGridView.getAdapter().dayToPosition(dayOfMonth) - materialCalendarGridView.getFirstVisiblePosition()), j, dayOfMonth);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void updateSelectedState(TextView textView, long j, int i) {
 | |
|         CalendarItemStyle calendarItemStyle;
 | |
|         boolean z;
 | |
|         CalendarItemStyle calendarItemStyle2;
 | |
|         if (textView == null) {
 | |
|             return;
 | |
|         }
 | |
|         Context context = textView.getContext();
 | |
|         String dayContentDescription = getDayContentDescription(context, j);
 | |
|         textView.setContentDescription(dayContentDescription);
 | |
|         boolean isValid = this.calendarConstraints.getDateValidator().isValid(j);
 | |
|         if (isValid) {
 | |
|             textView.setEnabled(true);
 | |
|             boolean isSelected = isSelected(j);
 | |
|             textView.setSelected(isSelected);
 | |
|             if (isSelected) {
 | |
|                 calendarItemStyle2 = this.calendarStyle.selectedDay;
 | |
|             } else if (isToday(j)) {
 | |
|                 calendarItemStyle2 = this.calendarStyle.todayDay;
 | |
|             } else {
 | |
|                 calendarItemStyle2 = this.calendarStyle.day;
 | |
|             }
 | |
|             calendarItemStyle = calendarItemStyle2;
 | |
|             z = isSelected;
 | |
|         } else {
 | |
|             textView.setEnabled(false);
 | |
|             calendarItemStyle = this.calendarStyle.invalidDay;
 | |
|             z = false;
 | |
|         }
 | |
|         if (this.dayViewDecorator != null && i != -1) {
 | |
|             int i2 = this.month.year;
 | |
|             int i3 = this.month.month;
 | |
|             ColorStateList backgroundColor = this.dayViewDecorator.getBackgroundColor(context, i2, i3, i, isValid, z);
 | |
|             boolean z2 = z;
 | |
|             calendarItemStyle.styleItem(textView, backgroundColor, this.dayViewDecorator.getTextColor(context, i2, i3, i, isValid, z2));
 | |
|             Drawable compoundDrawableLeft = this.dayViewDecorator.getCompoundDrawableLeft(context, i2, i3, i, isValid, z2);
 | |
|             Drawable compoundDrawableTop = this.dayViewDecorator.getCompoundDrawableTop(context, i2, i3, i, isValid, z2);
 | |
|             Drawable compoundDrawableRight = this.dayViewDecorator.getCompoundDrawableRight(context, i2, i3, i, isValid, z2);
 | |
|             boolean z3 = z;
 | |
|             textView.setCompoundDrawables(compoundDrawableLeft, compoundDrawableTop, compoundDrawableRight, this.dayViewDecorator.getCompoundDrawableBottom(context, i2, i3, i, isValid, z3));
 | |
|             textView.setContentDescription(this.dayViewDecorator.getContentDescription(context, i2, i3, i, isValid, z3, dayContentDescription));
 | |
|             return;
 | |
|         }
 | |
|         calendarItemStyle.styleItem(textView);
 | |
|     }
 | |
| 
 | |
|     private String getDayContentDescription(Context context, long j) {
 | |
|         return DateStrings.getDayContentDescription(context, j, isToday(j), isStartOfRange(j), isEndOfRange(j));
 | |
|     }
 | |
| 
 | |
|     private boolean isToday(long j) {
 | |
|         return UtcDates.getTodayCalendar().getTimeInMillis() == j;
 | |
|     }
 | |
| 
 | |
|     boolean isStartOfRange(long j) {
 | |
|         for (Pair<Long, Long> pair : this.dateSelector.getSelectedRanges()) {
 | |
|             if (pair.first != null && pair.first.longValue() == j) {
 | |
|                 return true;
 | |
|             }
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     boolean isEndOfRange(long j) {
 | |
|         for (Pair<Long, Long> pair : this.dateSelector.getSelectedRanges()) {
 | |
|             if (pair.second != null && pair.second.longValue() == j) {
 | |
|                 return true;
 | |
|             }
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     private boolean isSelected(long j) {
 | |
|         Iterator<Long> it = this.dateSelector.getSelectedDays().iterator();
 | |
|         while (it.hasNext()) {
 | |
|             if (UtcDates.canonicalYearMonthDay(j) == UtcDates.canonicalYearMonthDay(it.next().longValue())) {
 | |
|                 return true;
 | |
|             }
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     private void initializeStyles(Context context) {
 | |
|         if (this.calendarStyle == null) {
 | |
|             this.calendarStyle = new CalendarStyle(context);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     int firstPositionInMonth() {
 | |
|         return this.month.daysFromStartOfWeekToFirstOfMonth(this.calendarConstraints.getFirstDayOfWeek());
 | |
|     }
 | |
| 
 | |
|     int lastPositionInMonth() {
 | |
|         return (firstPositionInMonth() + this.month.daysInMonth) - 1;
 | |
|     }
 | |
| 
 | |
|     int positionToDay(int i) {
 | |
|         return (i - firstPositionInMonth()) + 1;
 | |
|     }
 | |
| 
 | |
|     int dayToPosition(int i) {
 | |
|         return firstPositionInMonth() + (i - 1);
 | |
|     }
 | |
| 
 | |
|     boolean withinMonth(int i) {
 | |
|         return i >= firstPositionInMonth() && i <= lastPositionInMonth();
 | |
|     }
 | |
| 
 | |
|     boolean isFirstInRow(int i) {
 | |
|         return i % this.month.daysInWeek == 0;
 | |
|     }
 | |
| 
 | |
|     boolean isLastInRow(int i) {
 | |
|         return (i + 1) % this.month.daysInWeek == 0;
 | |
|     }
 | |
| }
 |