Finish implementing system default timepicker

This commit is contained in:
Phillip Hsu 2016-09-29 01:03:19 -07:00
parent 5539e4fabb
commit f4852f6a25
2 changed files with 29 additions and 49 deletions

View File

@ -4,45 +4,48 @@ import android.app.Dialog;
import android.app.TimePickerDialog; import android.app.TimePickerDialog;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.text.format.DateFormat; import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.widget.TimePicker; import android.widget.TimePicker;
import com.philliphsu.clock2.timepickers.BaseTimePickerDialog; import com.philliphsu.clock2.timepickers.BaseTimePickerDialog;
import java.util.Calendar;
/** /**
* Created by Phillip Hsu on 9/28/2016. * Created by Phillip Hsu on 9/28/2016.
*/ */
public class SystemTimePickerDialog extends android.support.v4.app.DialogFragment implements TimePickerDialog.OnTimeSetListener { public class SystemTimePickerDialog extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
private BaseTimePickerDialog.OnTimeSetListener mListener;
private int mInitialHourOfDay;
private int mInitialMinute;
private boolean mIs24HourMode;
public static SystemTimePickerDialog newInstance(BaseTimePickerDialog.OnTimeSetListener l, public static SystemTimePickerDialog newInstance(BaseTimePickerDialog.OnTimeSetListener l,
int hourOfDay, int minute, boolean is24HourMode) { int hourOfDay, int minute, boolean is24HourMode) {
SystemTimePickerDialog dialog = new SystemTimePickerDialog(); SystemTimePickerDialog dialog = new SystemTimePickerDialog();
dialog.mListener = l;
dialog.mInitialHourOfDay = hourOfDay;
dialog.mInitialMinute = minute;
dialog.mIs24HourMode = is24HourMode;
return dialog; return dialog;
} }
public void setOnTimeSetListener(BaseTimePickerDialog.OnTimeSetListener listener) {
mListener = listener;
}
@NonNull @NonNull
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current time as the default values for the picker return new TimePickerDialog(getActivity(), this, mInitialHourOfDay, mInitialMinute, mIs24HourMode);
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
} }
@Override @Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) { public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// http://stackoverflow.com/q/19452993/5055032 // http://stackoverflow.com/q/19452993/5055032
// BUG! This is also called when the dialog is dismissed, so clicking // BUG PRE-LOLLIPOP! This is also called when the dialog is dismissed, so clicking
// the 'Done' button will end up calling this twice! // the 'Done' button will end up calling this twice!
if (view.isShown()) { if (view.isShown() && mListener != null) {
Log.d("dfljsdlfkj", "Calling onTimeSet"); mListener.onTimeSet(view, hourOfDay, minute);
} }
} }
} }

View File

@ -1,12 +1,10 @@
package com.philliphsu.clock2.dialogs; package com.philliphsu.clock2.dialogs;
import android.app.TimePickerDialog;
import android.content.Context; import android.content.Context;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import android.text.format.DateFormat; import android.text.format.DateFormat;
import android.util.Log;
import android.widget.TimePicker;
import com.philliphsu.clock2.R; import com.philliphsu.clock2.R;
import com.philliphsu.clock2.timepickers.BaseTimePickerDialog; import com.philliphsu.clock2.timepickers.BaseTimePickerDialog;
@ -49,13 +47,9 @@ public final class TimePickerDialogController extends DialogFragmentController<B
initialMinute, initialMinute,
DateFormat.is24HourFormat(mContext)); DateFormat.is24HourFormat(mContext));
} else { } else {
// Use system default SystemTimePickerDialog timepicker = SystemTimePickerDialog.newInstance(
// TimePickerDialog sysDefDialog = new TimePickerDialog( mListener, initialHourOfDay, initialMinute, DateFormat.is24HourFormat(mContext));
// mContext, new ForwardingOnTimeSetListener(mListener), timepicker.show(mFragmentManager, tag);
// initialHourOfDay, initialMinute, DateFormat.is24HourFormat(mContext));
// sysDefDialog.show();
SystemTimePickerDialog timepicker = new SystemTimePickerDialog();
timepicker.show(mFragmentManager, "dfsd");
return; return;
} }
show(dialog, tag); show(dialog, tag);
@ -63,29 +57,12 @@ public final class TimePickerDialogController extends DialogFragmentController<B
@Override @Override
public void tryRestoreCallback(String tag) { public void tryRestoreCallback(String tag) {
BaseTimePickerDialog picker = findDialog(tag); // Can't use #findDialog()!
if (picker != null) { DialogFragment picker = (DialogFragment) mFragmentManager.findFragmentByTag(tag);
Log.i(TAG, "Restoring time picker callback: " + mListener); if (picker instanceof BaseTimePickerDialog) {
picker.setOnTimeSetListener(mListener); ((BaseTimePickerDialog) picker).setOnTimeSetListener(mListener);
} } else if (picker instanceof SystemTimePickerDialog) {
} ((SystemTimePickerDialog) picker).setOnTimeSetListener(mListener);
/**
* The listener to set on system's default time picker.
*/
private static final class ForwardingOnTimeSetListener implements TimePickerDialog.OnTimeSetListener {
private final BaseTimePickerDialog.OnTimeSetListener mListener;
private ForwardingOnTimeSetListener(BaseTimePickerDialog.OnTimeSetListener listener) {
mListener = listener;
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Log.d(TAG, "Calling onTimeSet");
if (mListener != null) {
mListener.onTimeSet(view, hourOfDay, minute);
}
} }
} }
} }