package com.code44.finance.ui.dialogs; import android.app.Dialog; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.FragmentManager; import android.widget.DatePicker; import org.joda.time.DateTime; public class DatePickerDialog extends BaseDialogFragment implements android.app.DatePickerDialog.OnDateSetListener { private static final String ARG_YEAR = "ARG_YEAR"; private static final String ARG_MONTH_OF_YEAR = "ARG_MONTH_OF_YEAR"; private static final String ARG_DAY_OF_MONTH = "ARG_DAY_OF_MONTH"; private static final String FRAGMENT_DATE_PICKER = DatePickerDialog.class.getName() + ".FRAGMENT_DATE_PICKER"; public static void show(FragmentManager fragmentManager, int requestCode, long timestamp) { final DateTime date = new DateTime(timestamp); show(fragmentManager, requestCode, date.getYear(), date.getMonthOfYear(), date.getDayOfMonth()); } public static void show(FragmentManager fragmentManager, int requestCode, int year, int monthOfYear, int dayOfMonth) { final Bundle args = new Bundle(); args.putInt(ARG_REQUEST_CODE, requestCode); args.putInt(ARG_YEAR, year); args.putInt(ARG_MONTH_OF_YEAR, monthOfYear); args.putInt(ARG_DAY_OF_MONTH, dayOfMonth); final DatePickerDialog fragment = new DatePickerDialog(); fragment.setArguments(args); fragment.show(fragmentManager, FRAGMENT_DATE_PICKER); } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final int year = getArguments().getInt(ARG_YEAR); final int monthOfYear = getArguments().getInt(ARG_MONTH_OF_YEAR); final int dayOfMonth = getArguments().getInt(ARG_DAY_OF_MONTH); return new android.app.DatePickerDialog(getActivity(), this, year, monthOfYear - 1, dayOfMonth); } @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { getEventBus().post(new DateSelected(getArguments().getInt(ARG_REQUEST_CODE), year, monthOfYear + 1, dayOfMonth)); } public static final class DateSelected { private final int requestCode; private final int year; private final int monthOfYear; private final int dayOfMonth; public DateSelected(int requestCode, int year, int monthOfYear, int dayOfMonth) { this.requestCode = requestCode; this.year = year; this.monthOfYear = monthOfYear; this.dayOfMonth = dayOfMonth; } public int getRequestCode() { return requestCode; } public int getYear() { return year; } public int getMonthOfYear() { return monthOfYear; } public int getDayOfMonth() { return dayOfMonth; } } }