mirror of
https://github.com/material-components/material-components-android.git
synced 2026-02-20 08:39:55 +08:00
Fix Date Picker Catalog Demo to retain listeners
PiperOrigin-RevId: 256421089
This commit is contained in:
parent
030354f659
commit
c0fb5ad1af
@ -18,7 +18,6 @@ package io.material.catalog.picker;
|
||||
import io.material.catalog.R;
|
||||
|
||||
import android.app.DatePickerDialog;
|
||||
import android.app.Dialog;
|
||||
import android.os.Bundle;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
@ -26,7 +25,6 @@ import androidx.annotation.StyleRes;
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.resources.MaterialAttributes;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
@ -57,58 +55,62 @@ public class PickerMainDemoFragment extends DemoFragment {
|
||||
MaterialAttributes.resolveOrThrow(
|
||||
getContext(), R.attr.materialCalendarFullscreenTheme, getClass().getCanonicalName());
|
||||
|
||||
MaterialDatePicker<?> datePicker = MaterialDatePicker.Builder.datePicker().build();
|
||||
addSnackBarListeners(datePicker);
|
||||
addDialogLauncher(
|
||||
dialogLaunchersLayout, R.string.cat_picker_date_calendar, buildOnClickListener(datePicker));
|
||||
|
||||
MaterialDatePicker<?> datePickerFSTheme =
|
||||
MaterialDatePicker.Builder.datePicker().setTheme(fullscreenTheme).build();
|
||||
addSnackBarListeners(datePickerFSTheme);
|
||||
addDialogLauncher(
|
||||
setupDialogFragment(
|
||||
dialogLaunchersLayout,
|
||||
R.string.cat_picker_date_calendar,
|
||||
MaterialDatePicker.Builder.datePicker());
|
||||
setupDialogFragment(
|
||||
dialogLaunchersLayout,
|
||||
R.string.cat_picker_date_calendar_fullscreen,
|
||||
buildOnClickListener(datePickerFSTheme));
|
||||
|
||||
MaterialDatePicker<?> rangePicker = MaterialDatePicker.Builder.dateRangePicker().build();
|
||||
addSnackBarListeners(rangePicker);
|
||||
addDialogLauncher(
|
||||
MaterialDatePicker.Builder.datePicker().setTheme(fullscreenTheme));
|
||||
setupDialogFragment(
|
||||
dialogLaunchersLayout,
|
||||
R.string.cat_picker_date_range_calendar,
|
||||
buildOnClickListener(rangePicker));
|
||||
|
||||
MaterialDatePicker<?> rangePickerDialogTheme =
|
||||
MaterialDatePicker.Builder.dateRangePicker().setTheme(dialogTheme).build();
|
||||
addSnackBarListeners(rangePickerDialogTheme);
|
||||
addDialogLauncher(
|
||||
MaterialDatePicker.Builder.dateRangePicker());
|
||||
setupDialogFragment(
|
||||
dialogLaunchersLayout,
|
||||
R.string.cat_picker_date_range_calendar_dialog,
|
||||
buildOnClickListener(rangePickerDialogTheme));
|
||||
MaterialDatePicker.Builder.dateRangePicker().setTheme(dialogTheme));
|
||||
|
||||
layoutInflater.inflate(R.layout.cat_picker_spacer, dialogLaunchersLayout, true);
|
||||
|
||||
addDialogLauncher(
|
||||
dialogLaunchersLayout,
|
||||
R.string.cat_picker_base,
|
||||
buildOnClickListener(frameworkTodayDatePicker(0)));
|
||||
dialogLaunchersLayout, R.string.cat_picker_base, v -> frameworkTodayDatePicker(0).show());
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
// This demo is for a transient API. Once the API is set, the RestrictTo will be removed.
|
||||
@SuppressWarnings("RestrictTo")
|
||||
private void addSnackBarListeners(MaterialDatePicker<?> materialDatePicker) {
|
||||
materialDatePicker.addOnPositiveButtonClickListener(
|
||||
private void setupDialogFragment(
|
||||
ViewGroup dialogLaunchersLayout,
|
||||
@StringRes int tagId,
|
||||
MaterialDatePicker.Builder<?> builder) {
|
||||
String tag = getString(tagId);
|
||||
final MaterialDatePicker<?> materialCalendarPicker;
|
||||
if (getFragmentManager().findFragmentByTag(tag) == null) {
|
||||
materialCalendarPicker = builder.build();
|
||||
} else {
|
||||
materialCalendarPicker = (MaterialDatePicker<?>) getFragmentManager().findFragmentByTag(tag);
|
||||
}
|
||||
addSnackBarListeners(materialCalendarPicker);
|
||||
addDialogLauncher(
|
||||
dialogLaunchersLayout, tagId, v -> materialCalendarPicker.show(getFragmentManager(), tag));
|
||||
}
|
||||
|
||||
// This demo is for a transient API. Once the API is set, the RestrictTo will be removed.
|
||||
@SuppressWarnings("RestrictTo")
|
||||
private void addSnackBarListeners(MaterialDatePicker<?> materialCalendarPicker) {
|
||||
materialCalendarPicker.addOnPositiveButtonClickListener(
|
||||
selection -> {
|
||||
snackbar.setText(materialDatePicker.getHeaderText());
|
||||
snackbar.setText(materialCalendarPicker.getHeaderText());
|
||||
snackbar.show();
|
||||
});
|
||||
materialDatePicker.addOnNegativeButtonClickListener(
|
||||
materialCalendarPicker.addOnNegativeButtonClickListener(
|
||||
dialog -> {
|
||||
snackbar.setText(R.string.cat_picker_user_clicked_cancel);
|
||||
snackbar.show();
|
||||
});
|
||||
materialDatePicker.addOnCancelListener(
|
||||
materialCalendarPicker.addOnCancelListener(
|
||||
dialog -> {
|
||||
snackbar.setText(R.string.cat_picker_cancel);
|
||||
snackbar.show();
|
||||
@ -123,14 +125,6 @@ public class PickerMainDemoFragment extends DemoFragment {
|
||||
return R.style.ThemeOverlay_MaterialComponents_MaterialAlertDialog_Picker_Date_Calendar;
|
||||
}
|
||||
|
||||
private OnClickListener buildOnClickListener(Dialog dialog) {
|
||||
return v -> dialog.show();
|
||||
}
|
||||
|
||||
private OnClickListener buildOnClickListener(DialogFragment dialogFragment) {
|
||||
return v -> dialogFragment.show(getFragmentManager(), "Calendar Fragment");
|
||||
}
|
||||
|
||||
private void addDialogLauncher(
|
||||
ViewGroup viewGroup, @StringRes int stringResId, OnClickListener onClickListener) {
|
||||
MaterialButton dialogLauncherButton = new MaterialButton(viewGroup.getContext());
|
||||
@ -146,5 +140,4 @@ public class PickerMainDemoFragment extends DemoFragment {
|
||||
int day = calendar.get(Calendar.DAY_OF_MONTH);
|
||||
return new DatePickerDialog(getContext(), themeResId, null, year, month, day);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -126,15 +126,15 @@ public class MaterialDatePicker<S> extends DialogFragment {
|
||||
private CheckableImageButton headerToggleButton;
|
||||
private MaterialShapeDrawable background;
|
||||
|
||||
static <S> MaterialDatePicker<S> newInstance(MaterialDatePicker.Builder<S> options) {
|
||||
MaterialDatePicker<S> materialDateRangePickerDialogFragment = new MaterialDatePicker<>();
|
||||
static <S> MaterialDatePicker<S> newInstance(Builder<S> options) {
|
||||
MaterialDatePicker<S> materialDatePickerDialogFragment = new MaterialDatePicker<>();
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(OVERRIDE_THEME_RES_ID, options.overrideThemeResId);
|
||||
args.putParcelable(GRID_SELECTOR_KEY, options.gridSelector);
|
||||
args.putParcelable(CALENDAR_BOUNDS_KEY, options.calendarBounds);
|
||||
args.putInt(TITLE_TEXT_RES_ID_KEY, options.titleTextResId);
|
||||
materialDateRangePickerDialogFragment.setArguments(args);
|
||||
return materialDateRangePickerDialogFragment;
|
||||
materialDatePickerDialogFragment.setArguments(args);
|
||||
return materialDatePickerDialogFragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user