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.TimePicker;
import java.util.Calendar;
public class TimePickerDialogFragment extends DialogFragment implements FixedTimePickerDialog.OnTimeSetListener
{
private static final String ARGUMENT_TIME = "time";
private long mTime = -1L;
private TimePickerDialogListener mListener;
public interface TimePickerDialogListener
{
void onTimePickerDialogPositiveClick(DialogFragment dialog, int hour, int minute);
}
public static TimePickerDialogFragment newInstance(Calendar calendar)
{
TimePickerDialogFragment fragment = new TimePickerDialogFragment();
// arguments
Bundle arguments = new Bundle();
arguments.putLong(ARGUMENT_TIME, 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 = (TimePickerDialogListener) getTargetFragment();
}
catch(ClassCastException e)
{
throw new ClassCastException(getTargetFragment().toString() + " must implement " + TimePickerDialogListener.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(mTime != -1L)
{
calendar.setTimeInMillis(mTime);
}
ContextThemeWrapper context = new ContextThemeWrapper(getActivity(), getTheme(true));
FixedTimePickerDialog dialog = new FixedTimePickerDialog(calendar, context, this);
return dialog;
}
@Override
public void onTimeSet(TimePicker view, int hour, int minute)
{
mListener.onTimePickerDialogPositiveClick(TimePickerDialogFragment.this, hour, minute);
}
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_TIME))
{
mTime = (Long) arguments.get(ARGUMENT_TIME);
}
}
}