Handle rotation in native datetime pickers

pull/511/head^2
Alex Baker 9 years ago
parent abaf9f3026
commit 0be6cecc2f

@ -16,9 +16,17 @@ import javax.inject.Inject;
public class NativeDatePickerDialog extends InjectingNativeDialogFragment implements DatePickerDialog.OnDateSetListener {
private static final String EXTRA_YEAR = "extra_year";
private static final String EXTRA_MONTH = "extra_month";
private static final String EXTRA_DAY = "extra_day";
public static NativeDatePickerDialog newNativeDatePickerDialog(DateTime initial) {
NativeDatePickerDialog dialog = new NativeDatePickerDialog();
dialog.initial = initial;
Bundle args = new Bundle();
args.putInt(EXTRA_YEAR, initial.getYear());
args.putInt(EXTRA_MONTH, initial.getMonthOfYear() - 1);
args.putInt(EXTRA_DAY, initial.getDayOfMonth());
dialog.setArguments(args);
return dialog;
}
@ -31,14 +39,18 @@ public class NativeDatePickerDialog extends InjectingNativeDialogFragment implem
@Inject Theme theme;
private NativeDatePickerDialogCallback callback;
private DateTime initial;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@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());
}
Bundle args = getArguments();
DatePickerDialog datePickerDialog = new DatePickerDialog(theme.wrap(getActivity()), this, args.getInt(EXTRA_YEAR), args.getInt(EXTRA_MONTH), args.getInt(EXTRA_DAY));
datePickerDialog.setTitle("");
return datePickerDialog;
}

@ -19,9 +19,15 @@ import javax.inject.Inject;
public class NativeTimePickerDialog extends InjectingNativeDialogFragment implements TimePickerDialog.OnTimeSetListener {
private static final String EXTRA_HOUR = "extra_hour";
private static final String EXTRA_MINUTE = "extra_minute";
public static NativeTimePickerDialog newNativeTimePickerDialog(DateTime initial) {
NativeTimePickerDialog dialog = new NativeTimePickerDialog();
dialog.initial = initial;
Bundle args = new Bundle();
args.putInt(EXTRA_HOUR, initial.getHourOfDay());
args.putInt(EXTRA_MINUTE, initial.getMinuteOfHour());
dialog.setArguments(args);
return dialog;
}
@ -34,18 +40,19 @@ public class NativeTimePickerDialog extends InjectingNativeDialogFragment implem
@Inject Theme theme;
private NativeTimePickerDialogCallback callback;
private DateTime initial;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Context context = theme.wrap(getActivity());
TimePickerDialog timePickerDialog = new TimePickerDialog(context, this, 0, 0, DateUtilities.is24HourFormat(context));
timePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(android.R.string.cancel), (dialogInterface, i) -> {
callback.cancel();
});
if (initial != null) {
timePickerDialog.updateTime(initial.getHourOfDay(), initial.getMinuteOfHour());
}
Bundle args = getArguments();
TimePickerDialog timePickerDialog = new TimePickerDialog(context, this, args.getInt(EXTRA_HOUR), args.getInt(EXTRA_MINUTE), DateUtilities.is24HourFormat(context));
timePickerDialog.setTitle("");
return timePickerDialog;
}

@ -1,6 +1,7 @@
package org.tasks.injection;
import android.app.Activity;
import android.app.Dialog;
import android.app.DialogFragment;
public abstract class InjectingNativeDialogFragment extends DialogFragment {
@ -18,5 +19,15 @@ public abstract class InjectingNativeDialogFragment extends DialogFragment {
}
}
@Override
public void onDestroyView() {
// https://code.google.com/p/android/issues/detail?id=17423
Dialog dialog = getDialog();
if (dialog != null && getRetainInstance()) {
dialog.setDismissMessage(null);
}
super.onDestroyView();
}
protected abstract void inject(NativeDialogFragmentComponent component);
}

Loading…
Cancel
Save