package com.example.dialog;
import android.app.Dialog;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.ContextThemeWrapper;
import android.widget.DatePicker;
import java.util.Calendar;
public class DatePickerDialogFragment extends DialogFragment implements FixedDatePickerDialog.OnDateSetListener
{
private static final String ARGUMENT_DATE = "date";
private long mDate = -1L;
private DatePickerDialogListener mListener;
public interface DatePickerDialogListener
{
void onDatePickerDialogPositiveClick(DialogFragment dialog, int year, int month, int day);
}
public static DatePickerDialogFragment newInstance(Calendar calendar)
{
DatePickerDialogFragment fragment = new DatePickerDialogFragment();
// arguments
Bundle arguments = new Bundle();
arguments.putLong(ARGUMENT_DATE, calendar.getTimeInMillis());
fragment.setArguments(arguments);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setCancelable(true);
// handle fragment arguments
Bundle arguments = getArguments();
if(arguments != null)
{
handleArguments(arguments);
}
// set callback listener
try
{
mListener = (DatePickerDialogListener) getTargetFragment();
}
catch(ClassCastException e)
{
throw new ClassCastException(getTargetFragment().toString() + " must implement " + DatePickerDialogListener.class.getName());
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
// cancelable on touch outside
if(getDialog() != null) getDialog().setCanceledOnTouchOutside(true);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
Calendar calendar = Calendar.getInstance();
if(mDate != -1L)
{
calendar.setTimeInMillis(mDate);
}
ContextThemeWrapper context = new ContextThemeWrapper(getActivity(), getTheme(true));
FixedDatePickerDialog dialog = new FixedDatePickerDialog(calendar, context, this);
return dialog;
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day)
{
mListener.onDatePickerDialogPositiveClick(DatePickerDialogFragment.this, year, month, day);
}
private int getTheme(boolean light)
{
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
{
return light ? android.R.style.Theme_DeviceDefault_Light_Dialog : android.R.style.Theme_DeviceDefault_Dialog;
}
else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
return light ? android.R.style.Theme_Holo_Light_Dialog : android.R.style.Theme_Holo_Dialog;
}
else
{
return android.R.style.Theme_Dialog;
}
}
private void handleArguments(Bundle arguments)
{
if(arguments.containsKey(ARGUMENT_DATE))
{
mDate = (Long) arguments.get(ARGUMENT_DATE);
}
}
}