mirror of https://github.com/tasks/tasks
Use framework date and time pickers on Android 6+
parent
8404713db0
commit
0329ba2fc4
@ -0,0 +1,68 @@
|
||||
package org.tasks.dialogs;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.DatePickerDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.widget.DatePicker;
|
||||
|
||||
import org.tasks.injection.InjectingNativeDialogFragment;
|
||||
import org.tasks.injection.NativeDialogFragmentComponent;
|
||||
import org.tasks.themes.Theme;
|
||||
import org.tasks.time.DateTime;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class NativeDatePickerDialog extends InjectingNativeDialogFragment implements DatePickerDialog.OnDateSetListener {
|
||||
|
||||
public static NativeDatePickerDialog newNativeDatePickerDialog(DateTime initial) {
|
||||
NativeDatePickerDialog dialog = new NativeDatePickerDialog();
|
||||
dialog.initial = initial;
|
||||
return dialog;
|
||||
}
|
||||
|
||||
public interface NativeDatePickerDialogCallback {
|
||||
void cancel();
|
||||
|
||||
void onDateSet(int year, int month, int day);
|
||||
}
|
||||
|
||||
@Inject Theme theme;
|
||||
|
||||
private NativeDatePickerDialogCallback callback;
|
||||
private DateTime initial;
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
DatePickerDialog datePickerDialog = new DatePickerDialog(theme.wrap(getActivity()), this, 0, 0, 0);
|
||||
if (initial != null) {
|
||||
datePickerDialog.updateDate(initial.getYear(), initial.getMonthOfYear() - 1, initial.getDayOfMonth());
|
||||
}
|
||||
return datePickerDialog;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
|
||||
callback.onDateSet(year, month, day);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel(DialogInterface dialog) {
|
||||
super.onCancel(dialog);
|
||||
|
||||
callback.cancel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(Activity activity) {
|
||||
super.onAttach(activity);
|
||||
|
||||
callback = (NativeDatePickerDialogCallback) activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void inject(NativeDialogFragmentComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package org.tasks.dialogs;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.app.TimePickerDialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.widget.TimePicker;
|
||||
|
||||
import com.todoroo.andlib.utility.DateUtilities;
|
||||
|
||||
import org.tasks.injection.InjectingNativeDialogFragment;
|
||||
import org.tasks.injection.NativeDialogFragmentComponent;
|
||||
import org.tasks.themes.Theme;
|
||||
import org.tasks.time.DateTime;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class NativeTimePickerDialog extends InjectingNativeDialogFragment implements TimePickerDialog.OnTimeSetListener {
|
||||
|
||||
public static NativeTimePickerDialog newNativeTimePickerDialog(DateTime initial) {
|
||||
NativeTimePickerDialog dialog = new NativeTimePickerDialog();
|
||||
dialog.initial = initial;
|
||||
return dialog;
|
||||
}
|
||||
|
||||
public interface NativeTimePickerDialogCallback {
|
||||
void cancel();
|
||||
|
||||
void onTimeSet(int hour, int minute);
|
||||
}
|
||||
|
||||
@Inject Theme theme;
|
||||
|
||||
private NativeTimePickerDialogCallback callback;
|
||||
private DateTime initial;
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
Context context = theme.wrap(getActivity());
|
||||
TimePickerDialog timePickerDialog = new TimePickerDialog(context, this, 0, 0, DateUtilities.is24HourFormat(context));
|
||||
if (initial != null) {
|
||||
timePickerDialog.updateTime(initial.getHourOfDay(), initial.getMinuteOfHour());
|
||||
}
|
||||
return timePickerDialog;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel(DialogInterface dialog) {
|
||||
super.onCancel(dialog);
|
||||
|
||||
callback.cancel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTimeSet(TimePicker timePicker, int hour, int minute) {
|
||||
callback.onTimeSet(hour, minute);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(Activity activity) {
|
||||
super.onAttach(activity);
|
||||
|
||||
callback = (NativeTimePickerDialogCallback) activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void inject(NativeDialogFragmentComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
}
|
@ -1,7 +1,13 @@
|
||||
package org.tasks.injection;
|
||||
|
||||
import org.tasks.dialogs.NativeDatePickerDialog;
|
||||
import org.tasks.dialogs.NativeTimePickerDialog;
|
||||
import org.tasks.locale.LocalePickerDialog;
|
||||
|
||||
public interface BaseNativeDialogFragmentComponent {
|
||||
void inject(LocalePickerDialog localePickerDialog);
|
||||
|
||||
void inject(NativeDatePickerDialog nativeDatePickerDialog);
|
||||
|
||||
void inject(NativeTimePickerDialog nativeTimePickerDialog);
|
||||
}
|
||||
|
Loading…
Reference in New Issue