698 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			698 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.google.android.material.datepicker;
 | |
| 
 | |
| import android.app.Dialog;
 | |
| import android.content.Context;
 | |
| import android.content.DialogInterface;
 | |
| import android.content.res.ColorStateList;
 | |
| import android.content.res.Resources;
 | |
| import android.content.res.TypedArray;
 | |
| import android.graphics.Rect;
 | |
| import android.graphics.drawable.Drawable;
 | |
| import android.graphics.drawable.InsetDrawable;
 | |
| import android.graphics.drawable.StateListDrawable;
 | |
| import android.os.Bundle;
 | |
| import android.text.TextUtils;
 | |
| import android.view.LayoutInflater;
 | |
| import android.view.View;
 | |
| import android.view.ViewGroup;
 | |
| import android.view.Window;
 | |
| import android.widget.Button;
 | |
| import android.widget.LinearLayout;
 | |
| import android.widget.TextView;
 | |
| import androidx.appcompat.content.res.AppCompatResources;
 | |
| import androidx.core.util.Pair;
 | |
| import androidx.core.view.OnApplyWindowInsetsListener;
 | |
| import androidx.core.view.ViewCompat;
 | |
| import androidx.core.view.WindowInsetsCompat;
 | |
| import androidx.fragment.app.DialogFragment;
 | |
| import androidx.fragment.app.FragmentTransaction;
 | |
| import com.google.android.material.R;
 | |
| import com.google.android.material.datepicker.CalendarConstraints;
 | |
| import com.google.android.material.dialog.InsetDialogOnTouchListener;
 | |
| import com.google.android.material.internal.CheckableImageButton;
 | |
| import com.google.android.material.internal.EdgeToEdgeUtils;
 | |
| import com.google.android.material.internal.ViewUtils;
 | |
| import com.google.android.material.resources.MaterialAttributes;
 | |
| import com.google.android.material.shape.MaterialShapeDrawable;
 | |
| import java.lang.annotation.Retention;
 | |
| import java.lang.annotation.RetentionPolicy;
 | |
| import java.text.SimpleDateFormat;
 | |
| import java.util.Iterator;
 | |
| import java.util.LinkedHashSet;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public final class MaterialDatePicker<S> extends DialogFragment {
 | |
|     private static final String CALENDAR_CONSTRAINTS_KEY = "CALENDAR_CONSTRAINTS_KEY";
 | |
|     private static final String DATE_SELECTOR_KEY = "DATE_SELECTOR_KEY";
 | |
|     private static final String DAY_VIEW_DECORATOR_KEY = "DAY_VIEW_DECORATOR_KEY";
 | |
|     public static final int INPUT_MODE_CALENDAR = 0;
 | |
|     private static final String INPUT_MODE_KEY = "INPUT_MODE_KEY";
 | |
|     public static final int INPUT_MODE_TEXT = 1;
 | |
|     private static final String NEGATIVE_BUTTON_CONTENT_DESCRIPTION_KEY = "NEGATIVE_BUTTON_CONTENT_DESCRIPTION_KEY";
 | |
|     private static final String NEGATIVE_BUTTON_CONTENT_DESCRIPTION_RES_ID_KEY = "NEGATIVE_BUTTON_CONTENT_DESCRIPTION_RES_ID_KEY";
 | |
|     private static final String NEGATIVE_BUTTON_TEXT_KEY = "NEGATIVE_BUTTON_TEXT_KEY";
 | |
|     private static final String NEGATIVE_BUTTON_TEXT_RES_ID_KEY = "NEGATIVE_BUTTON_TEXT_RES_ID_KEY";
 | |
|     private static final String OVERRIDE_THEME_RES_ID = "OVERRIDE_THEME_RES_ID";
 | |
|     private static final String POSITIVE_BUTTON_CONTENT_DESCRIPTION_KEY = "POSITIVE_BUTTON_CONTENT_DESCRIPTION_KEY";
 | |
|     private static final String POSITIVE_BUTTON_CONTENT_DESCRIPTION_RES_ID_KEY = "POSITIVE_BUTTON_CONTENT_DESCRIPTION_RES_ID_KEY";
 | |
|     private static final String POSITIVE_BUTTON_TEXT_KEY = "POSITIVE_BUTTON_TEXT_KEY";
 | |
|     private static final String POSITIVE_BUTTON_TEXT_RES_ID_KEY = "POSITIVE_BUTTON_TEXT_RES_ID_KEY";
 | |
|     private static final String TITLE_TEXT_KEY = "TITLE_TEXT_KEY";
 | |
|     private static final String TITLE_TEXT_RES_ID_KEY = "TITLE_TEXT_RES_ID_KEY";
 | |
|     private MaterialShapeDrawable background;
 | |
|     private MaterialCalendar<S> calendar;
 | |
|     private CalendarConstraints calendarConstraints;
 | |
|     private Button confirmButton;
 | |
|     private DateSelector<S> dateSelector;
 | |
|     private DayViewDecorator dayViewDecorator;
 | |
|     private boolean edgeToEdgeEnabled;
 | |
|     private CharSequence fullTitleText;
 | |
|     private boolean fullscreen;
 | |
|     private TextView headerSelectionText;
 | |
|     private TextView headerTitleTextView;
 | |
|     private CheckableImageButton headerToggleButton;
 | |
|     private int inputMode;
 | |
|     private CharSequence negativeButtonContentDescription;
 | |
|     private int negativeButtonContentDescriptionResId;
 | |
|     private CharSequence negativeButtonText;
 | |
|     private int negativeButtonTextResId;
 | |
|     private int overrideThemeResId;
 | |
|     private PickerFragment<S> pickerFragment;
 | |
|     private CharSequence positiveButtonContentDescription;
 | |
|     private int positiveButtonContentDescriptionResId;
 | |
|     private CharSequence positiveButtonText;
 | |
|     private int positiveButtonTextResId;
 | |
|     private CharSequence singleLineTitleText;
 | |
|     private CharSequence titleText;
 | |
|     private int titleTextResId;
 | |
|     static final Object CONFIRM_BUTTON_TAG = "CONFIRM_BUTTON_TAG";
 | |
|     static final Object CANCEL_BUTTON_TAG = "CANCEL_BUTTON_TAG";
 | |
|     static final Object TOGGLE_BUTTON_TAG = "TOGGLE_BUTTON_TAG";
 | |
|     private final LinkedHashSet<MaterialPickerOnPositiveButtonClickListener<? super S>> onPositiveButtonClickListeners = new LinkedHashSet<>();
 | |
|     private final LinkedHashSet<View.OnClickListener> onNegativeButtonClickListeners = new LinkedHashSet<>();
 | |
|     private final LinkedHashSet<DialogInterface.OnCancelListener> onCancelListeners = new LinkedHashSet<>();
 | |
|     private final LinkedHashSet<DialogInterface.OnDismissListener> onDismissListeners = new LinkedHashSet<>();
 | |
| 
 | |
|     @Retention(RetentionPolicy.SOURCE)
 | |
|     public @interface InputMode {
 | |
|     }
 | |
| 
 | |
|     public int getInputMode() {
 | |
|         return this.inputMode;
 | |
|     }
 | |
| 
 | |
|     public static long todayInUtcMilliseconds() {
 | |
|         return UtcDates.getTodayCalendar().getTimeInMillis();
 | |
|     }
 | |
| 
 | |
|     public static long thisMonthInUtcMilliseconds() {
 | |
|         return Month.current().timeInMillis;
 | |
|     }
 | |
| 
 | |
|     public String getHeaderText() {
 | |
|         return getDateSelector().getSelectionDisplayString(getContext());
 | |
|     }
 | |
| 
 | |
|     static <S> MaterialDatePicker<S> newInstance(Builder<S> builder) {
 | |
|         MaterialDatePicker<S> materialDatePicker = new MaterialDatePicker<>();
 | |
|         Bundle bundle = new Bundle();
 | |
|         bundle.putInt(OVERRIDE_THEME_RES_ID, builder.overrideThemeResId);
 | |
|         bundle.putParcelable(DATE_SELECTOR_KEY, builder.dateSelector);
 | |
|         bundle.putParcelable(CALENDAR_CONSTRAINTS_KEY, builder.calendarConstraints);
 | |
|         bundle.putParcelable(DAY_VIEW_DECORATOR_KEY, builder.dayViewDecorator);
 | |
|         bundle.putInt(TITLE_TEXT_RES_ID_KEY, builder.titleTextResId);
 | |
|         bundle.putCharSequence(TITLE_TEXT_KEY, builder.titleText);
 | |
|         bundle.putInt(INPUT_MODE_KEY, builder.inputMode);
 | |
|         bundle.putInt(POSITIVE_BUTTON_TEXT_RES_ID_KEY, builder.positiveButtonTextResId);
 | |
|         bundle.putCharSequence(POSITIVE_BUTTON_TEXT_KEY, builder.positiveButtonText);
 | |
|         bundle.putInt(POSITIVE_BUTTON_CONTENT_DESCRIPTION_RES_ID_KEY, builder.positiveButtonContentDescriptionResId);
 | |
|         bundle.putCharSequence(POSITIVE_BUTTON_CONTENT_DESCRIPTION_KEY, builder.positiveButtonContentDescription);
 | |
|         bundle.putInt(NEGATIVE_BUTTON_TEXT_RES_ID_KEY, builder.negativeButtonTextResId);
 | |
|         bundle.putCharSequence(NEGATIVE_BUTTON_TEXT_KEY, builder.negativeButtonText);
 | |
|         bundle.putInt(NEGATIVE_BUTTON_CONTENT_DESCRIPTION_RES_ID_KEY, builder.negativeButtonContentDescriptionResId);
 | |
|         bundle.putCharSequence(NEGATIVE_BUTTON_CONTENT_DESCRIPTION_KEY, builder.negativeButtonContentDescription);
 | |
|         materialDatePicker.setArguments(bundle);
 | |
|         return materialDatePicker;
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.fragment.app.DialogFragment, androidx.fragment.app.Fragment
 | |
|     public final void onSaveInstanceState(Bundle bundle) {
 | |
|         super.onSaveInstanceState(bundle);
 | |
|         bundle.putInt(OVERRIDE_THEME_RES_ID, this.overrideThemeResId);
 | |
|         bundle.putParcelable(DATE_SELECTOR_KEY, this.dateSelector);
 | |
|         CalendarConstraints.Builder builder = new CalendarConstraints.Builder(this.calendarConstraints);
 | |
|         MaterialCalendar<S> materialCalendar = this.calendar;
 | |
|         Month currentMonth = materialCalendar == null ? null : materialCalendar.getCurrentMonth();
 | |
|         if (currentMonth != null) {
 | |
|             builder.setOpenAt(currentMonth.timeInMillis);
 | |
|         }
 | |
|         bundle.putParcelable(CALENDAR_CONSTRAINTS_KEY, builder.build());
 | |
|         bundle.putParcelable(DAY_VIEW_DECORATOR_KEY, this.dayViewDecorator);
 | |
|         bundle.putInt(TITLE_TEXT_RES_ID_KEY, this.titleTextResId);
 | |
|         bundle.putCharSequence(TITLE_TEXT_KEY, this.titleText);
 | |
|         bundle.putInt(INPUT_MODE_KEY, this.inputMode);
 | |
|         bundle.putInt(POSITIVE_BUTTON_TEXT_RES_ID_KEY, this.positiveButtonTextResId);
 | |
|         bundle.putCharSequence(POSITIVE_BUTTON_TEXT_KEY, this.positiveButtonText);
 | |
|         bundle.putInt(POSITIVE_BUTTON_CONTENT_DESCRIPTION_RES_ID_KEY, this.positiveButtonContentDescriptionResId);
 | |
|         bundle.putCharSequence(POSITIVE_BUTTON_CONTENT_DESCRIPTION_KEY, this.positiveButtonContentDescription);
 | |
|         bundle.putInt(NEGATIVE_BUTTON_TEXT_RES_ID_KEY, this.negativeButtonTextResId);
 | |
|         bundle.putCharSequence(NEGATIVE_BUTTON_TEXT_KEY, this.negativeButtonText);
 | |
|         bundle.putInt(NEGATIVE_BUTTON_CONTENT_DESCRIPTION_RES_ID_KEY, this.negativeButtonContentDescriptionResId);
 | |
|         bundle.putCharSequence(NEGATIVE_BUTTON_CONTENT_DESCRIPTION_KEY, this.negativeButtonContentDescription);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.fragment.app.DialogFragment, androidx.fragment.app.Fragment
 | |
|     public final void onCreate(Bundle bundle) {
 | |
|         super.onCreate(bundle);
 | |
|         if (bundle == null) {
 | |
|             bundle = getArguments();
 | |
|         }
 | |
|         this.overrideThemeResId = bundle.getInt(OVERRIDE_THEME_RES_ID);
 | |
|         this.dateSelector = (DateSelector) bundle.getParcelable(DATE_SELECTOR_KEY);
 | |
|         this.calendarConstraints = (CalendarConstraints) bundle.getParcelable(CALENDAR_CONSTRAINTS_KEY);
 | |
|         this.dayViewDecorator = (DayViewDecorator) bundle.getParcelable(DAY_VIEW_DECORATOR_KEY);
 | |
|         this.titleTextResId = bundle.getInt(TITLE_TEXT_RES_ID_KEY);
 | |
|         this.titleText = bundle.getCharSequence(TITLE_TEXT_KEY);
 | |
|         this.inputMode = bundle.getInt(INPUT_MODE_KEY);
 | |
|         this.positiveButtonTextResId = bundle.getInt(POSITIVE_BUTTON_TEXT_RES_ID_KEY);
 | |
|         this.positiveButtonText = bundle.getCharSequence(POSITIVE_BUTTON_TEXT_KEY);
 | |
|         this.positiveButtonContentDescriptionResId = bundle.getInt(POSITIVE_BUTTON_CONTENT_DESCRIPTION_RES_ID_KEY);
 | |
|         this.positiveButtonContentDescription = bundle.getCharSequence(POSITIVE_BUTTON_CONTENT_DESCRIPTION_KEY);
 | |
|         this.negativeButtonTextResId = bundle.getInt(NEGATIVE_BUTTON_TEXT_RES_ID_KEY);
 | |
|         this.negativeButtonText = bundle.getCharSequence(NEGATIVE_BUTTON_TEXT_KEY);
 | |
|         this.negativeButtonContentDescriptionResId = bundle.getInt(NEGATIVE_BUTTON_CONTENT_DESCRIPTION_RES_ID_KEY);
 | |
|         this.negativeButtonContentDescription = bundle.getCharSequence(NEGATIVE_BUTTON_CONTENT_DESCRIPTION_KEY);
 | |
|         CharSequence charSequence = this.titleText;
 | |
|         if (charSequence == null) {
 | |
|             charSequence = requireContext().getResources().getText(this.titleTextResId);
 | |
|         }
 | |
|         this.fullTitleText = charSequence;
 | |
|         this.singleLineTitleText = getFirstLineBySeparator(charSequence);
 | |
|     }
 | |
| 
 | |
|     private int getThemeResId(Context context) {
 | |
|         int i = this.overrideThemeResId;
 | |
|         return i != 0 ? i : getDateSelector().getDefaultThemeResId(context);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.fragment.app.DialogFragment
 | |
|     public final Dialog onCreateDialog(Bundle bundle) {
 | |
|         Dialog dialog = new Dialog(requireContext(), getThemeResId(requireContext()));
 | |
|         Context context = dialog.getContext();
 | |
|         this.fullscreen = isFullscreen(context);
 | |
|         this.background = new MaterialShapeDrawable(context, null, R.attr.materialCalendarStyle, R.style.Widget_MaterialComponents_MaterialCalendar);
 | |
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(null, R.styleable.MaterialCalendar, R.attr.materialCalendarStyle, R.style.Widget_MaterialComponents_MaterialCalendar);
 | |
|         int color = obtainStyledAttributes.getColor(R.styleable.MaterialCalendar_backgroundTint, 0);
 | |
|         obtainStyledAttributes.recycle();
 | |
|         this.background.initializeElevationOverlay(context);
 | |
|         this.background.setFillColor(ColorStateList.valueOf(color));
 | |
|         this.background.setElevation(ViewCompat.getElevation(dialog.getWindow().getDecorView()));
 | |
|         return dialog;
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.fragment.app.Fragment
 | |
|     public final View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle) {
 | |
|         View inflate = layoutInflater.inflate(this.fullscreen ? R.layout.mtrl_picker_fullscreen : R.layout.mtrl_picker_dialog, viewGroup);
 | |
|         Context context = inflate.getContext();
 | |
|         DayViewDecorator dayViewDecorator = this.dayViewDecorator;
 | |
|         if (dayViewDecorator != null) {
 | |
|             dayViewDecorator.initialize(context);
 | |
|         }
 | |
|         if (this.fullscreen) {
 | |
|             inflate.findViewById(R.id.mtrl_calendar_frame).setLayoutParams(new LinearLayout.LayoutParams(getPaddedPickerWidth(context), -2));
 | |
|         } else {
 | |
|             inflate.findViewById(R.id.mtrl_calendar_main_pane).setLayoutParams(new LinearLayout.LayoutParams(getPaddedPickerWidth(context), -1));
 | |
|         }
 | |
|         TextView textView = (TextView) inflate.findViewById(R.id.mtrl_picker_header_selection_text);
 | |
|         this.headerSelectionText = textView;
 | |
|         ViewCompat.setAccessibilityLiveRegion(textView, 1);
 | |
|         this.headerToggleButton = (CheckableImageButton) inflate.findViewById(R.id.mtrl_picker_header_toggle);
 | |
|         this.headerTitleTextView = (TextView) inflate.findViewById(R.id.mtrl_picker_title_text);
 | |
|         initHeaderToggle(context);
 | |
|         this.confirmButton = (Button) inflate.findViewById(R.id.confirm_button);
 | |
|         if (getDateSelector().isSelectionComplete()) {
 | |
|             this.confirmButton.setEnabled(true);
 | |
|         } else {
 | |
|             this.confirmButton.setEnabled(false);
 | |
|         }
 | |
|         this.confirmButton.setTag(CONFIRM_BUTTON_TAG);
 | |
|         CharSequence charSequence = this.positiveButtonText;
 | |
|         if (charSequence != null) {
 | |
|             this.confirmButton.setText(charSequence);
 | |
|         } else {
 | |
|             int i = this.positiveButtonTextResId;
 | |
|             if (i != 0) {
 | |
|                 this.confirmButton.setText(i);
 | |
|             }
 | |
|         }
 | |
|         CharSequence charSequence2 = this.positiveButtonContentDescription;
 | |
|         if (charSequence2 != null) {
 | |
|             this.confirmButton.setContentDescription(charSequence2);
 | |
|         } else if (this.positiveButtonContentDescriptionResId != 0) {
 | |
|             this.confirmButton.setContentDescription(getContext().getResources().getText(this.positiveButtonContentDescriptionResId));
 | |
|         }
 | |
|         this.confirmButton.setOnClickListener(new View.OnClickListener() { // from class: com.google.android.material.datepicker.MaterialDatePicker.1
 | |
|             /* JADX WARN: Multi-variable type inference failed */
 | |
|             @Override // android.view.View.OnClickListener
 | |
|             public void onClick(View view) {
 | |
|                 Iterator it = MaterialDatePicker.this.onPositiveButtonClickListeners.iterator();
 | |
|                 while (it.hasNext()) {
 | |
|                     ((MaterialPickerOnPositiveButtonClickListener) it.next()).onPositiveButtonClick(MaterialDatePicker.this.getSelection());
 | |
|                 }
 | |
|                 MaterialDatePicker.this.dismiss();
 | |
|             }
 | |
|         });
 | |
|         Button button = (Button) inflate.findViewById(R.id.cancel_button);
 | |
|         button.setTag(CANCEL_BUTTON_TAG);
 | |
|         CharSequence charSequence3 = this.negativeButtonText;
 | |
|         if (charSequence3 != null) {
 | |
|             button.setText(charSequence3);
 | |
|         } else {
 | |
|             int i2 = this.negativeButtonTextResId;
 | |
|             if (i2 != 0) {
 | |
|                 button.setText(i2);
 | |
|             }
 | |
|         }
 | |
|         CharSequence charSequence4 = this.negativeButtonContentDescription;
 | |
|         if (charSequence4 != null) {
 | |
|             button.setContentDescription(charSequence4);
 | |
|         } else if (this.negativeButtonContentDescriptionResId != 0) {
 | |
|             button.setContentDescription(getContext().getResources().getText(this.negativeButtonContentDescriptionResId));
 | |
|         }
 | |
|         button.setOnClickListener(new View.OnClickListener() { // from class: com.google.android.material.datepicker.MaterialDatePicker.2
 | |
|             @Override // android.view.View.OnClickListener
 | |
|             public void onClick(View view) {
 | |
|                 Iterator it = MaterialDatePicker.this.onNegativeButtonClickListeners.iterator();
 | |
|                 while (it.hasNext()) {
 | |
|                     ((View.OnClickListener) it.next()).onClick(view);
 | |
|                 }
 | |
|                 MaterialDatePicker.this.dismiss();
 | |
|             }
 | |
|         });
 | |
|         return inflate;
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.fragment.app.DialogFragment, androidx.fragment.app.Fragment
 | |
|     public void onStart() {
 | |
|         super.onStart();
 | |
|         Window window = requireDialog().getWindow();
 | |
|         if (this.fullscreen) {
 | |
|             window.setLayout(-1, -1);
 | |
|             window.setBackgroundDrawable(this.background);
 | |
|             enableEdgeToEdgeIfNeeded(window);
 | |
|         } else {
 | |
|             window.setLayout(-2, -2);
 | |
|             int dimensionPixelOffset = getResources().getDimensionPixelOffset(R.dimen.mtrl_calendar_dialog_background_inset);
 | |
|             Rect rect = new Rect(dimensionPixelOffset, dimensionPixelOffset, dimensionPixelOffset, dimensionPixelOffset);
 | |
|             window.setBackgroundDrawable(new InsetDrawable((Drawable) this.background, dimensionPixelOffset, dimensionPixelOffset, dimensionPixelOffset, dimensionPixelOffset));
 | |
|             window.getDecorView().setOnTouchListener(new InsetDialogOnTouchListener(requireDialog(), rect));
 | |
|         }
 | |
|         startPickerFragment();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.fragment.app.DialogFragment, androidx.fragment.app.Fragment
 | |
|     public void onStop() {
 | |
|         this.pickerFragment.clearOnSelectionChangedListeners();
 | |
|         super.onStop();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.fragment.app.DialogFragment, android.content.DialogInterface.OnCancelListener
 | |
|     public final void onCancel(DialogInterface dialogInterface) {
 | |
|         Iterator<DialogInterface.OnCancelListener> it = this.onCancelListeners.iterator();
 | |
|         while (it.hasNext()) {
 | |
|             it.next().onCancel(dialogInterface);
 | |
|         }
 | |
|         super.onCancel(dialogInterface);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.fragment.app.DialogFragment, android.content.DialogInterface.OnDismissListener
 | |
|     public final void onDismiss(DialogInterface dialogInterface) {
 | |
|         Iterator<DialogInterface.OnDismissListener> it = this.onDismissListeners.iterator();
 | |
|         while (it.hasNext()) {
 | |
|             it.next().onDismiss(dialogInterface);
 | |
|         }
 | |
|         ViewGroup viewGroup = (ViewGroup) getView();
 | |
|         if (viewGroup != null) {
 | |
|             viewGroup.removeAllViews();
 | |
|         }
 | |
|         super.onDismiss(dialogInterface);
 | |
|     }
 | |
| 
 | |
|     public final S getSelection() {
 | |
|         return getDateSelector().getSelection();
 | |
|     }
 | |
| 
 | |
|     private void enableEdgeToEdgeIfNeeded(Window window) {
 | |
|         if (this.edgeToEdgeEnabled) {
 | |
|             return;
 | |
|         }
 | |
|         final View findViewById = requireView().findViewById(R.id.fullscreen_header);
 | |
|         EdgeToEdgeUtils.applyEdgeToEdge(window, true, ViewUtils.getBackgroundColor(findViewById), null);
 | |
|         final int paddingTop = findViewById.getPaddingTop();
 | |
|         final int i = findViewById.getLayoutParams().height;
 | |
|         ViewCompat.setOnApplyWindowInsetsListener(findViewById, new OnApplyWindowInsetsListener() { // from class: com.google.android.material.datepicker.MaterialDatePicker.3
 | |
|             @Override // androidx.core.view.OnApplyWindowInsetsListener
 | |
|             public WindowInsetsCompat onApplyWindowInsets(View view, WindowInsetsCompat windowInsetsCompat) {
 | |
|                 int i2 = windowInsetsCompat.getInsets(WindowInsetsCompat.Type.systemBars()).top;
 | |
|                 if (i >= 0) {
 | |
|                     findViewById.getLayoutParams().height = i + i2;
 | |
|                     View view2 = findViewById;
 | |
|                     view2.setLayoutParams(view2.getLayoutParams());
 | |
|                 }
 | |
|                 View view3 = findViewById;
 | |
|                 view3.setPadding(view3.getPaddingLeft(), paddingTop + i2, findViewById.getPaddingRight(), findViewById.getPaddingBottom());
 | |
|                 return windowInsetsCompat;
 | |
|             }
 | |
|         });
 | |
|         this.edgeToEdgeEnabled = true;
 | |
|     }
 | |
| 
 | |
|     private void updateTitle() {
 | |
|         this.headerTitleTextView.setText((this.inputMode == 1 && isLandscape()) ? this.singleLineTitleText : this.fullTitleText);
 | |
|     }
 | |
| 
 | |
|     void updateHeader(String str) {
 | |
|         this.headerSelectionText.setContentDescription(getHeaderContentDescription());
 | |
|         this.headerSelectionText.setText(str);
 | |
|     }
 | |
| 
 | |
|     private String getHeaderContentDescription() {
 | |
|         return getDateSelector().getSelectionContentDescription(requireContext());
 | |
|     }
 | |
| 
 | |
|     private void startPickerFragment() {
 | |
|         int themeResId = getThemeResId(requireContext());
 | |
|         MaterialTextInputPicker newInstance = MaterialCalendar.newInstance(getDateSelector(), themeResId, this.calendarConstraints, this.dayViewDecorator);
 | |
|         this.calendar = newInstance;
 | |
|         if (this.inputMode == 1) {
 | |
|             newInstance = MaterialTextInputPicker.newInstance(getDateSelector(), themeResId, this.calendarConstraints);
 | |
|         }
 | |
|         this.pickerFragment = newInstance;
 | |
|         updateTitle();
 | |
|         updateHeader(getHeaderText());
 | |
|         FragmentTransaction beginTransaction = getChildFragmentManager().beginTransaction();
 | |
|         beginTransaction.replace(R.id.mtrl_calendar_frame, this.pickerFragment);
 | |
|         beginTransaction.commitNow();
 | |
|         this.pickerFragment.addOnSelectionChangedListener(new OnSelectionChangedListener<S>() { // from class: com.google.android.material.datepicker.MaterialDatePicker.4
 | |
|             @Override // com.google.android.material.datepicker.OnSelectionChangedListener
 | |
|             public void onSelectionChanged(S s) {
 | |
|                 MaterialDatePicker materialDatePicker = MaterialDatePicker.this;
 | |
|                 materialDatePicker.updateHeader(materialDatePicker.getHeaderText());
 | |
|                 MaterialDatePicker.this.confirmButton.setEnabled(MaterialDatePicker.this.getDateSelector().isSelectionComplete());
 | |
|             }
 | |
| 
 | |
|             @Override // com.google.android.material.datepicker.OnSelectionChangedListener
 | |
|             public void onIncompleteSelectionChanged() {
 | |
|                 MaterialDatePicker.this.confirmButton.setEnabled(false);
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     private void initHeaderToggle(Context context) {
 | |
|         this.headerToggleButton.setTag(TOGGLE_BUTTON_TAG);
 | |
|         this.headerToggleButton.setImageDrawable(createHeaderToggleDrawable(context));
 | |
|         this.headerToggleButton.setChecked(this.inputMode != 0);
 | |
|         ViewCompat.setAccessibilityDelegate(this.headerToggleButton, null);
 | |
|         updateToggleContentDescription(this.headerToggleButton);
 | |
|         this.headerToggleButton.setOnClickListener(new View.OnClickListener() { // from class: com.google.android.material.datepicker.MaterialDatePicker$$ExternalSyntheticLambda0
 | |
|             @Override // android.view.View.OnClickListener
 | |
|             public final void onClick(View view) {
 | |
|                 MaterialDatePicker.this.m242x8a93f18a(view);
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     /* renamed from: lambda$initHeaderToggle$0$com-google-android-material-datepicker-MaterialDatePicker, reason: not valid java name */
 | |
|     /* synthetic */ void m242x8a93f18a(View view) {
 | |
|         this.confirmButton.setEnabled(getDateSelector().isSelectionComplete());
 | |
|         this.headerToggleButton.toggle();
 | |
|         this.inputMode = this.inputMode == 1 ? 0 : 1;
 | |
|         updateToggleContentDescription(this.headerToggleButton);
 | |
|         startPickerFragment();
 | |
|     }
 | |
| 
 | |
|     private void updateToggleContentDescription(CheckableImageButton checkableImageButton) {
 | |
|         String string;
 | |
|         if (this.inputMode == 1) {
 | |
|             string = checkableImageButton.getContext().getString(R.string.mtrl_picker_toggle_to_calendar_input_mode);
 | |
|         } else {
 | |
|             string = checkableImageButton.getContext().getString(R.string.mtrl_picker_toggle_to_text_input_mode);
 | |
|         }
 | |
|         this.headerToggleButton.setContentDescription(string);
 | |
|     }
 | |
| 
 | |
|     /* JADX INFO: Access modifiers changed from: private */
 | |
|     public DateSelector<S> getDateSelector() {
 | |
|         if (this.dateSelector == null) {
 | |
|             this.dateSelector = (DateSelector) getArguments().getParcelable(DATE_SELECTOR_KEY);
 | |
|         }
 | |
|         return this.dateSelector;
 | |
|     }
 | |
| 
 | |
|     private static Drawable createHeaderToggleDrawable(Context context) {
 | |
|         StateListDrawable stateListDrawable = new StateListDrawable();
 | |
|         stateListDrawable.addState(new int[]{android.R.attr.state_checked}, AppCompatResources.getDrawable(context, R.drawable.material_ic_calendar_black_24dp));
 | |
|         stateListDrawable.addState(new int[0], AppCompatResources.getDrawable(context, R.drawable.material_ic_edit_black_24dp));
 | |
|         return stateListDrawable;
 | |
|     }
 | |
| 
 | |
|     private static CharSequence getFirstLineBySeparator(CharSequence charSequence) {
 | |
|         if (charSequence == null) {
 | |
|             return null;
 | |
|         }
 | |
|         String[] split = TextUtils.split(String.valueOf(charSequence), "\n");
 | |
|         return split.length > 1 ? split[0] : charSequence;
 | |
|     }
 | |
| 
 | |
|     private boolean isLandscape() {
 | |
|         return getResources().getConfiguration().orientation == 2;
 | |
|     }
 | |
| 
 | |
|     static boolean isFullscreen(Context context) {
 | |
|         return readMaterialCalendarStyleBoolean(context, android.R.attr.windowFullscreen);
 | |
|     }
 | |
| 
 | |
|     static boolean isNestedScrollable(Context context) {
 | |
|         return readMaterialCalendarStyleBoolean(context, R.attr.nestedScrollable);
 | |
|     }
 | |
| 
 | |
|     static boolean readMaterialCalendarStyleBoolean(Context context, int i) {
 | |
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(MaterialAttributes.resolveOrThrow(context, R.attr.materialCalendarStyle, MaterialCalendar.class.getCanonicalName()), new int[]{i});
 | |
|         boolean z = obtainStyledAttributes.getBoolean(0, false);
 | |
|         obtainStyledAttributes.recycle();
 | |
|         return z;
 | |
|     }
 | |
| 
 | |
|     private static int getPaddedPickerWidth(Context context) {
 | |
|         Resources resources = context.getResources();
 | |
|         int dimensionPixelOffset = resources.getDimensionPixelOffset(R.dimen.mtrl_calendar_content_padding);
 | |
|         int i = Month.current().daysInWeek;
 | |
|         return (dimensionPixelOffset * 2) + (resources.getDimensionPixelSize(R.dimen.mtrl_calendar_day_width) * i) + ((i - 1) * resources.getDimensionPixelOffset(R.dimen.mtrl_calendar_month_horizontal_padding));
 | |
|     }
 | |
| 
 | |
|     public boolean addOnPositiveButtonClickListener(MaterialPickerOnPositiveButtonClickListener<? super S> materialPickerOnPositiveButtonClickListener) {
 | |
|         return this.onPositiveButtonClickListeners.add(materialPickerOnPositiveButtonClickListener);
 | |
|     }
 | |
| 
 | |
|     public boolean removeOnPositiveButtonClickListener(MaterialPickerOnPositiveButtonClickListener<? super S> materialPickerOnPositiveButtonClickListener) {
 | |
|         return this.onPositiveButtonClickListeners.remove(materialPickerOnPositiveButtonClickListener);
 | |
|     }
 | |
| 
 | |
|     public void clearOnPositiveButtonClickListeners() {
 | |
|         this.onPositiveButtonClickListeners.clear();
 | |
|     }
 | |
| 
 | |
|     public boolean addOnNegativeButtonClickListener(View.OnClickListener onClickListener) {
 | |
|         return this.onNegativeButtonClickListeners.add(onClickListener);
 | |
|     }
 | |
| 
 | |
|     public boolean removeOnNegativeButtonClickListener(View.OnClickListener onClickListener) {
 | |
|         return this.onNegativeButtonClickListeners.remove(onClickListener);
 | |
|     }
 | |
| 
 | |
|     public void clearOnNegativeButtonClickListeners() {
 | |
|         this.onNegativeButtonClickListeners.clear();
 | |
|     }
 | |
| 
 | |
|     public boolean addOnCancelListener(DialogInterface.OnCancelListener onCancelListener) {
 | |
|         return this.onCancelListeners.add(onCancelListener);
 | |
|     }
 | |
| 
 | |
|     public boolean removeOnCancelListener(DialogInterface.OnCancelListener onCancelListener) {
 | |
|         return this.onCancelListeners.remove(onCancelListener);
 | |
|     }
 | |
| 
 | |
|     public void clearOnCancelListeners() {
 | |
|         this.onCancelListeners.clear();
 | |
|     }
 | |
| 
 | |
|     public boolean addOnDismissListener(DialogInterface.OnDismissListener onDismissListener) {
 | |
|         return this.onDismissListeners.add(onDismissListener);
 | |
|     }
 | |
| 
 | |
|     public boolean removeOnDismissListener(DialogInterface.OnDismissListener onDismissListener) {
 | |
|         return this.onDismissListeners.remove(onDismissListener);
 | |
|     }
 | |
| 
 | |
|     public void clearOnDismissListeners() {
 | |
|         this.onDismissListeners.clear();
 | |
|     }
 | |
| 
 | |
|     public static final class Builder<S> {
 | |
|         CalendarConstraints calendarConstraints;
 | |
|         final DateSelector<S> dateSelector;
 | |
|         DayViewDecorator dayViewDecorator;
 | |
|         int overrideThemeResId = 0;
 | |
|         int titleTextResId = 0;
 | |
|         CharSequence titleText = null;
 | |
|         int positiveButtonTextResId = 0;
 | |
|         CharSequence positiveButtonText = null;
 | |
|         int positiveButtonContentDescriptionResId = 0;
 | |
|         CharSequence positiveButtonContentDescription = null;
 | |
|         int negativeButtonTextResId = 0;
 | |
|         CharSequence negativeButtonText = null;
 | |
|         int negativeButtonContentDescriptionResId = 0;
 | |
|         CharSequence negativeButtonContentDescription = null;
 | |
|         S selection = null;
 | |
|         int inputMode = 0;
 | |
| 
 | |
|         public Builder<S> setCalendarConstraints(CalendarConstraints calendarConstraints) {
 | |
|             this.calendarConstraints = calendarConstraints;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setDayViewDecorator(DayViewDecorator dayViewDecorator) {
 | |
|             this.dayViewDecorator = dayViewDecorator;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setInputMode(int i) {
 | |
|             this.inputMode = i;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setNegativeButtonContentDescription(int i) {
 | |
|             this.negativeButtonContentDescriptionResId = i;
 | |
|             this.negativeButtonContentDescription = null;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setNegativeButtonContentDescription(CharSequence charSequence) {
 | |
|             this.negativeButtonContentDescription = charSequence;
 | |
|             this.negativeButtonContentDescriptionResId = 0;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setNegativeButtonText(int i) {
 | |
|             this.negativeButtonTextResId = i;
 | |
|             this.negativeButtonText = null;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setNegativeButtonText(CharSequence charSequence) {
 | |
|             this.negativeButtonText = charSequence;
 | |
|             this.negativeButtonTextResId = 0;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setPositiveButtonContentDescription(int i) {
 | |
|             this.positiveButtonContentDescriptionResId = i;
 | |
|             this.positiveButtonContentDescription = null;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setPositiveButtonContentDescription(CharSequence charSequence) {
 | |
|             this.positiveButtonContentDescription = charSequence;
 | |
|             this.positiveButtonContentDescriptionResId = 0;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setPositiveButtonText(int i) {
 | |
|             this.positiveButtonTextResId = i;
 | |
|             this.positiveButtonText = null;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setPositiveButtonText(CharSequence charSequence) {
 | |
|             this.positiveButtonText = charSequence;
 | |
|             this.positiveButtonTextResId = 0;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setSelection(S s) {
 | |
|             this.selection = s;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setTheme(int i) {
 | |
|             this.overrideThemeResId = i;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setTitleText(int i) {
 | |
|             this.titleTextResId = i;
 | |
|             this.titleText = null;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setTitleText(CharSequence charSequence) {
 | |
|             this.titleText = charSequence;
 | |
|             this.titleTextResId = 0;
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         private Builder(DateSelector<S> dateSelector) {
 | |
|             this.dateSelector = dateSelector;
 | |
|         }
 | |
| 
 | |
|         public static <S> Builder<S> customDatePicker(DateSelector<S> dateSelector) {
 | |
|             return new Builder<>(dateSelector);
 | |
|         }
 | |
| 
 | |
|         public static Builder<Long> datePicker() {
 | |
|             return new Builder<>(new SingleDateSelector());
 | |
|         }
 | |
| 
 | |
|         public static Builder<Pair<Long, Long>> dateRangePicker() {
 | |
|             return new Builder<>(new RangeDateSelector());
 | |
|         }
 | |
| 
 | |
|         public Builder<S> setTextInputFormat(SimpleDateFormat simpleDateFormat) {
 | |
|             this.dateSelector.setTextInputFormat(simpleDateFormat);
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         public MaterialDatePicker<S> build() {
 | |
|             if (this.calendarConstraints == null) {
 | |
|                 this.calendarConstraints = new CalendarConstraints.Builder().build();
 | |
|             }
 | |
|             if (this.titleTextResId == 0) {
 | |
|                 this.titleTextResId = this.dateSelector.getDefaultTitleResId();
 | |
|             }
 | |
|             S s = this.selection;
 | |
|             if (s != null) {
 | |
|                 this.dateSelector.setSelection(s);
 | |
|             }
 | |
|             if (this.calendarConstraints.getOpenAt() == null) {
 | |
|                 this.calendarConstraints.setOpenAt(createDefaultOpenAt());
 | |
|             }
 | |
|             return MaterialDatePicker.newInstance(this);
 | |
|         }
 | |
| 
 | |
|         private Month createDefaultOpenAt() {
 | |
|             if (!this.dateSelector.getSelectedDays().isEmpty()) {
 | |
|                 Month create = Month.create(this.dateSelector.getSelectedDays().iterator().next().longValue());
 | |
|                 if (monthInValidRange(create, this.calendarConstraints)) {
 | |
|                     return create;
 | |
|                 }
 | |
|             }
 | |
|             Month current = Month.current();
 | |
|             return monthInValidRange(current, this.calendarConstraints) ? current : this.calendarConstraints.getStart();
 | |
|         }
 | |
| 
 | |
|         private static boolean monthInValidRange(Month month, CalendarConstraints calendarConstraints) {
 | |
|             return month.compareTo(calendarConstraints.getStart()) >= 0 && month.compareTo(calendarConstraints.getEnd()) <= 0;
 | |
|         }
 | |
|     }
 | |
| }
 |