Created themed styles for system timepicker

This commit is contained in:
Phillip Hsu
2016-09-28 22:08:19 -07:00
parent fd6f313a58
commit d31c8643e9
3 changed files with 130 additions and 10 deletions
@@ -0,0 +1,48 @@
package com.philliphsu.clock2.dialogs;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.text.format.DateFormat;
import android.util.Log;
import android.widget.TimePicker;
import com.philliphsu.clock2.timepickers.BaseTimePickerDialog;
import java.util.Calendar;
/**
* Created by Phillip Hsu on 9/28/2016.
*/
public class SystemTimePickerDialog extends android.support.v4.app.DialogFragment implements TimePickerDialog.OnTimeSetListener {
public static SystemTimePickerDialog newInstance(BaseTimePickerDialog.OnTimeSetListener l,
int hourOfDay, int minute, boolean is24HourMode) {
SystemTimePickerDialog dialog = new SystemTimePickerDialog();
return dialog;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current time as the default values for the picker
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
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// http://stackoverflow.com/q/19452993/5055032
// BUG! This is also called when the dialog is dismissed, so clicking
// the 'Done' button will end up calling this twice!
if (view.isShown()) {
Log.d("dfljsdlfkj", "Calling onTimeSet");
}
}
}
@@ -1,10 +1,12 @@
package com.philliphsu.clock2.dialogs;
import android.app.TimePickerDialog;
import android.content.Context;
import android.preference.PreferenceManager;
import android.support.v4.app.FragmentManager;
import android.text.format.DateFormat;
import android.util.Log;
import android.widget.TimePicker;
import com.philliphsu.clock2.R;
import com.philliphsu.clock2.timepickers.BaseTimePickerDialog;
@@ -19,6 +21,7 @@ public final class TimePickerDialogController extends DialogFragmentController<B
private final BaseTimePickerDialog.OnTimeSetListener mListener;
private final Context mContext;
private final FragmentManager mFragmentManager;
/**
* @param context Used to read the user's preference for the style of the time picker dialog to show.
@@ -26,19 +29,17 @@ public final class TimePickerDialogController extends DialogFragmentController<B
public TimePickerDialogController(FragmentManager fragmentManager, Context context,
BaseTimePickerDialog.OnTimeSetListener listener) {
super(fragmentManager);
mFragmentManager = fragmentManager;
mContext = context;
mListener = listener;
}
public void show(int initialHourOfDay, int initialMinute, String tag) {
BaseTimePickerDialog dialog = null;
String numpadStyle = mContext.getString(R.string.number_pad);
String gridStyle = mContext.getString(R.string.grid_selector);
String prefTimePickerStyle = PreferenceManager.getDefaultSharedPreferences(mContext).getString(
// key for the preference value to retrieve
mContext.getString(R.string.key_time_picker_style),
// default value
numpadStyle);
final String numpadStyle = mContext.getString(R.string.number_pad);
final String gridStyle = mContext.getString(R.string.grid_selector);
String prefTimePickerStyle = PreferenceManager.getDefaultSharedPreferences(mContext)
.getString(mContext.getString(R.string.key_time_picker_style), numpadStyle);
if (prefTimePickerStyle.equals(numpadStyle)) {
dialog = NumpadTimePickerDialog.newInstance(mListener);
} else if (prefTimePickerStyle.equals(gridStyle)) {
@@ -47,10 +48,16 @@ public final class TimePickerDialogController extends DialogFragmentController<B
initialHourOfDay,
initialMinute,
DateFormat.is24HourFormat(mContext));
} else {
// Use system default
// TimePickerDialog sysDefDialog = new TimePickerDialog(
// mContext, new ForwardingOnTimeSetListener(mListener),
// initialHourOfDay, initialMinute, DateFormat.is24HourFormat(mContext));
// sysDefDialog.show();
SystemTimePickerDialog timepicker = new SystemTimePickerDialog();
timepicker.show(mFragmentManager, "dfsd");
return;
}
// We don't have a default case, because we don't need one; prefTimePickerStyle
// will ALWAYS match one of numpadStyle or gridStyle. As such, the dialog
// will NEVER be null.
show(dialog, tag);
}
@@ -62,4 +69,23 @@ public final class TimePickerDialogController extends DialogFragmentController<B
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);
}
}
}
}