Extract SnoozeDialog

pull/189/head
Alex Baker 10 years ago
parent fa67d940f2
commit e84ef4ea9f

@ -25,8 +25,8 @@ import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.activity.EditPreferences; import com.todoroo.astrid.activity.EditPreferences;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.reminders.NotificationFragment.SnoozeDialog;
import com.todoroo.astrid.reminders.SnoozeCallback; import com.todoroo.astrid.reminders.SnoozeCallback;
import com.todoroo.astrid.reminders.SnoozeDialog;
import com.todoroo.astrid.service.StartupService; import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.service.ThemeService; import com.todoroo.astrid.service.ThemeService;

@ -5,36 +5,16 @@
*/ */
package com.todoroo.astrid.reminders; package com.todoroo.astrid.reminders;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Spinner;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.activity.AstridActivity; import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.repeats.RepeatControlSet;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.ui.NumberPicker;
import org.tasks.R; import org.tasks.R;
import java.util.Date;
import javax.inject.Inject; import javax.inject.Inject;
import static org.tasks.date.DateTimeUtils.newDate;
/** /**
* This activity is launched when a user opens up a notification from the * This activity is launched when a user opens up a notification from the
* tray. It launches the appropriate activity based on the passed in parameters. * tray. It launches the appropriate activity based on the passed in parameters.
@ -70,89 +50,4 @@ public class NotificationFragment extends TaskListFragment {
long taskId = extras.getLong(TOKEN_ID); long taskId = extras.getLong(TOKEN_ID);
new ReminderDialog(taskService, (AstridActivity) getActivity(), taskId, title).show(); new ReminderDialog(taskService, (AstridActivity) getActivity(), taskId, title).show();
} }
public static class SnoozeDialog extends FrameLayout implements DialogInterface.OnClickListener {
LinearLayout snoozePicker;
NumberPicker snoozeValue;
Spinner snoozeUnits;
SnoozeCallback snoozeCallback;
public SnoozeDialog(Activity activity, SnoozeCallback callback) {
super(activity);
this.snoozeCallback = callback;
LayoutInflater mInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mInflater.inflate(R.layout.snooze_dialog, this, true);
snoozePicker = (LinearLayout) findViewById(R.id.snoozePicker);
snoozeValue = (NumberPicker) findViewById(R.id.numberPicker);
snoozeUnits = (Spinner) findViewById(R.id.numberUnits);
snoozeValue.setIncrementBy(1);
snoozeValue.setRange(1, 99);
snoozeUnits.setSelection(RepeatControlSet.INTERVAL_HOURS);
snoozeUnits.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
AndroidUtilities.hideSoftInputForViews(getContext(), snoozePicker);
return false;
}
});
}
@Override
public void onClick(DialogInterface dialog, int which) {
long time = DateUtilities.now();
int value = snoozeValue.getCurrent();
switch(snoozeUnits.getSelectedItemPosition()) {
case RepeatControlSet.INTERVAL_DAYS:
time += value * DateUtilities.ONE_DAY;
break;
case RepeatControlSet.INTERVAL_HOURS:
time += value * DateUtilities.ONE_HOUR;
break;
case RepeatControlSet.INTERVAL_MINUTES:
time += value * DateUtilities.ONE_MINUTE;
break;
case RepeatControlSet.INTERVAL_WEEKS:
time += value * 7 * DateUtilities.ONE_DAY;
break;
case RepeatControlSet.INTERVAL_MONTHS:
time = DateUtilities.addCalendarMonthsToUnixtime(time, 1);
break;
case RepeatControlSet.INTERVAL_YEARS:
time = DateUtilities.addCalendarMonthsToUnixtime(time, 12);
break;
}
snoozeCallback.snoozeForTime(time);
}
}
/**
* Snooze and re-trigger this alarm
*/
public static void snooze(Activity activity, OnTimeSetListener onTimeSet, SnoozeCallback snoozeCallback) {
if(Preferences.getBoolean(R.string.p_rmd_snooze_dialog, false)) {
Date now = newDate();
now.setHours(now.getHours() + 1);
int hour = now.getHours();
int minute = now.getMinutes();
TimePickerDialog tpd = new TimePickerDialog(activity, onTimeSet, hour, minute,
DateUtilities.is24HourFormat(activity));
tpd.show();
tpd.setOwnerActivity(activity);
} else {
SnoozeDialog sd = new SnoozeDialog(activity, snoozeCallback);
new AlertDialog.Builder(activity)
.setTitle(R.string.rmd_NoA_snooze)
.setView(sd)
.setPositiveButton(android.R.string.ok, sd)
.setNegativeButton(android.R.string.cancel, null)
.show().setOwnerActivity(activity);
}
}
} }

@ -5,7 +5,10 @@
*/ */
package com.todoroo.astrid.reminders; package com.todoroo.astrid.reminders;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener; import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Intent; import android.content.Intent;
import android.view.View; import android.view.View;
@ -15,6 +18,7 @@ import android.widget.TimePicker;
import android.widget.Toast; import android.widget.Toast;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.activity.AstridActivity; import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
@ -76,7 +80,7 @@ public class ReminderDialog extends Dialog {
findViewById(R.id.reminder_snooze).setOnClickListener(new View.OnClickListener() { findViewById(R.id.reminder_snooze).setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View arg0) { public void onClick(View arg0) {
NotificationFragment.snooze(activity, onTimeSet, dialogSnooze); snooze(activity, onTimeSet, dialogSnooze);
} }
}); });
@ -112,4 +116,28 @@ public class ReminderDialog extends Dialog {
LinearLayout container = (LinearLayout) findViewById(R.id.speech_bubble_container); LinearLayout container = (LinearLayout) findViewById(R.id.speech_bubble_container);
container.setVisibility(View.GONE); container.setVisibility(View.GONE);
} }
/**
* Snooze and re-trigger this alarm
*/
private void snooze(Activity activity, OnTimeSetListener onTimeSet, SnoozeCallback snoozeCallback) {
if(Preferences.getBoolean(R.string.p_rmd_snooze_dialog, false)) {
Date now = newDate();
now.setHours(now.getHours() + 1);
int hour = now.getHours();
int minute = now.getMinutes();
TimePickerDialog tpd = new TimePickerDialog(activity, onTimeSet, hour, minute,
DateUtilities.is24HourFormat(activity));
tpd.show();
tpd.setOwnerActivity(activity);
} else {
SnoozeDialog sd = new SnoozeDialog(activity, snoozeCallback);
new AlertDialog.Builder(activity)
.setTitle(R.string.rmd_NoA_snooze)
.setView(sd)
.setPositiveButton(android.R.string.ok, sd)
.setNegativeButton(android.R.string.cancel, null)
.show().setOwnerActivity(activity);
}
}
} }

@ -0,0 +1,77 @@
package com.todoroo.astrid.reminders;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Spinner;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.repeats.RepeatControlSet;
import com.todoroo.astrid.ui.NumberPicker;
import org.tasks.R;
public class SnoozeDialog extends FrameLayout implements DialogInterface.OnClickListener {
LinearLayout snoozePicker;
NumberPicker snoozeValue;
Spinner snoozeUnits;
SnoozeCallback snoozeCallback;
public SnoozeDialog(Activity activity, SnoozeCallback callback) {
super(activity);
this.snoozeCallback = callback;
LayoutInflater mInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mInflater.inflate(R.layout.snooze_dialog, this, true);
snoozePicker = (LinearLayout) findViewById(R.id.snoozePicker);
snoozeValue = (NumberPicker) findViewById(R.id.numberPicker);
snoozeUnits = (Spinner) findViewById(R.id.numberUnits);
snoozeValue.setIncrementBy(1);
snoozeValue.setRange(1, 99);
snoozeUnits.setSelection(RepeatControlSet.INTERVAL_HOURS);
snoozeUnits.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
AndroidUtilities.hideSoftInputForViews(getContext(), snoozePicker);
return false;
}
});
}
@Override
public void onClick(DialogInterface dialog, int which) {
long time = DateUtilities.now();
int value = snoozeValue.getCurrent();
switch(snoozeUnits.getSelectedItemPosition()) {
case RepeatControlSet.INTERVAL_DAYS:
time += value * DateUtilities.ONE_DAY;
break;
case RepeatControlSet.INTERVAL_HOURS:
time += value * DateUtilities.ONE_HOUR;
break;
case RepeatControlSet.INTERVAL_MINUTES:
time += value * DateUtilities.ONE_MINUTE;
break;
case RepeatControlSet.INTERVAL_WEEKS:
time += value * 7 * DateUtilities.ONE_DAY;
break;
case RepeatControlSet.INTERVAL_MONTHS:
time = DateUtilities.addCalendarMonthsToUnixtime(time, 1);
break;
case RepeatControlSet.INTERVAL_YEARS:
time = DateUtilities.addCalendarMonthsToUnixtime(time, 12);
break;
}
snoozeCallback.snoozeForTime(time);
}
}
Loading…
Cancel
Save