package com.fastaccess.datetimepicker; import android.app.DatePickerDialog; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentManager; import android.widget.DatePicker; import com.fastaccess.datetimepicker.callback.DatePickerCallback; import java.util.Calendar; /** * Created by Kosh on 27 Sep 2016, 10:31 PM */ public class DatePickerFragmentDialog extends DialogFragment implements DatePickerDialog.OnDateSetListener { private DateTimeBuilder builder; private DatePickerCallback callback; @Override public void onAttach(Context context) { super.onAttach(context); if (getParentFragment() != null && getParentFragment() instanceof DatePickerCallback) { // priority to fragments. callback = (DatePickerCallback) getParentFragment(); } else if (context instanceof DatePickerCallback) { callback = (DatePickerCallback) context; } else { throw new RuntimeException(String.format("%s must implement DatePickerCallback", context.getClass().getSimpleName())); } } @Override public void onDetach() { super.onDetach(); callback = null; } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { setupArguments(savedInstanceState); final Calendar calendar = Calendar.getInstance(); if (builder.getSelectedDate() != 0) { calendar.setTimeInMillis(builder.getSelectedDate()); } DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(), builder.getThemeResId(), this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); if (builder.getMinDate() != 0) { datePickerDialog.getDatePicker().setMinDate(builder.getMinDate()); } if (builder.getMaxDate() != 0) { datePickerDialog.getDatePicker().setMaxDate(builder.getMaxDate()); } return datePickerDialog; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable("builder", builder); } @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { Calendar date = Calendar.getInstance(); date.set(year, month, dayOfMonth); if (!builder.isWithTime()) { callback.onDateSet(date.getTimeInMillis()); } else { FragmentManager fragmentManager; if (getParentFragment() != null) { fragmentManager = getParentFragment().getChildFragmentManager(); } else { fragmentManager = getActivity().getSupportFragmentManager(); } TimePickerFragmentDialog.newInstance(date.getTimeInMillis(), builder) .show(fragmentManager, "TimePickerFragmentDialog"); } dismiss(); } private void setupArguments(@Nullable Bundle savedInstanceState) { if (savedInstanceState == null) { builder = getArguments().getParcelable("builder"); } else { builder = savedInstanceState.getParcelable("builder"); } } public static DatePickerFragmentDialog newInstance(@NonNull DateTimeBuilder builder) { DatePickerFragmentDialog dialog = new DatePickerFragmentDialog(); Bundle bundle = new Bundle(); bundle.putParcelable("builder", builder); dialog.setArguments(bundle); return dialog; } public static DatePickerFragmentDialog newInstance(boolean withTime) { return newInstance(DateTimeBuilder.get().withTime(withTime)); } public static DatePickerFragmentDialog newInstance() { return newInstance(DateTimeBuilder.get()); } }