package com.ianhanniballake.contractiontimer.ui; import android.app.Dialog; import android.app.TimePickerDialog; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.support.v4.content.LocalBroadcastManager; import android.text.format.DateFormat; import android.util.Log; import android.widget.TimePicker; import com.ianhanniballake.contractiontimer.BuildConfig; import com.ikovac.timepickerwithseconds.view.MyTimePickerDialog; import java.util.Calendar; /** * Provides a DialogFragment for selecting a time */ public class TimePickerDialogFragment extends DialogFragment { /** * Argument key for storing/retrieving the callback action */ public final static String CALLBACK_ACTION = "com.ianhanniballake.contractiontimer.CALLBACK_ACTION_ARGUMENT"; /** * Extra corresponding with the hour of the day that was set */ public final static String HOUR_OF_DAY_EXTRA = "com.ianhanniballake.contractionTimer.HOUR_OF_DAY_EXTRA"; /** * Extra corresponding with the minute that was set */ public final static String MINUTE_EXTRA = "com.ianhanniballake.contractionTimer.MINUTE_EXTRA"; /** * Extra corresponding with the second that was set */ public final static String SECOND_EXTRA = "com.ianhanniballake.contractionTimer.SECOND_EXTRA"; /** * Argument key for storing/retrieving the time associated with this dialog */ public final static String TIME_ARGUMENT = "com.ianhanniballake.contractiontimer.TIME_ARGUMENT"; private final static String TAG = TimePickerDialogFragment.class.getSimpleName(); /** * Gets an API level specific implementation of the time picker * * @param context context used to create the Dialog * @param callback Callback to pass the returned time to * @param date starting date * @return A valid TimePickerDialog */ @NonNull private static Dialog getTimePickerDialog(Context context, final TimePickerDialogFragment callback, Calendar date) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { MyTimePickerDialog.OnTimeSetListener onTimeSetListener = new MyTimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(final com.ikovac.timepickerwithseconds.view.TimePicker view, final int hourOfDay, final int minute, final int seconds) { callback.onTimeSet(hourOfDay, minute, seconds); } }; return new MyTimePickerDialog(context, onTimeSetListener, date.get(Calendar.HOUR_OF_DAY), date.get(Calendar.MINUTE), date.get(Calendar.SECOND), DateFormat.is24HourFormat(context)); } else { TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(final TimePicker view, final int hourOfDay, final int minute) { callback.onTimeSet(hourOfDay, minute, 0); } }; return new TimePickerDialog(context, onTimeSetListener, date.get(Calendar.HOUR_OF_DAY), date.get(Calendar.MINUTE), DateFormat.is24HourFormat(context)); } } @NonNull @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { final Calendar date = (Calendar) getArguments().getSerializable(TimePickerDialogFragment.TIME_ARGUMENT); final Dialog dialog = getTimePickerDialog(getActivity(), this, date); dialog.setOnDismissListener(this); return dialog; } void onTimeSet(final int hourOfDay, final int minute, final int second) { final String action = getArguments().getString(TimePickerDialogFragment.CALLBACK_ACTION); if (BuildConfig.DEBUG) Log.d(TAG, "onTimeSet: " + action); final Intent broadcast = new Intent(action); broadcast.putExtra(TimePickerDialogFragment.HOUR_OF_DAY_EXTRA, hourOfDay); broadcast.putExtra(TimePickerDialogFragment.MINUTE_EXTRA, minute); broadcast.putExtra(TimePickerDialogFragment.SECOND_EXTRA, second); final LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getActivity()); localBroadcastManager.sendBroadcast(broadcast); } }