Fix Date Picker Catalog Demo to retain listeners

PiperOrigin-RevId: 256421089
This commit is contained in:
ldjesper 2019-07-03 15:46:13 -04:00 committed by Raajkumar Subramaniam
parent 030354f659
commit c0fb5ad1af
2 changed files with 38 additions and 45 deletions

View File

@ -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);
}
}

View File

@ -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