ADD week 5
This commit is contained in:
		| @@ -0,0 +1,697 @@ | ||||
| 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; | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user