From 13e2b739dae9794dd9e7e85fcaae6d0c4cba4df8 Mon Sep 17 00:00:00 2001 From: Arne Jans Date: Wed, 25 May 2011 12:49:08 +0200 Subject: [PATCH] Implemented story 13186747, User-set defaults for reminders due today, specific date. Please test this. --- .../astrid/reminders/ReminderPreferences.java | 4 + .../astrid/reminders/ReminderService.java | 94 +++++++++++++++++-- astrid/res/values-de/strings.xml | 39 +++++++- astrid/res/values/keys.xml | 34 ++++++- astrid/res/values/strings-reminders.xml | 40 +++++++- astrid/res/xml/preferences_reminders.xml | 5 + 6 files changed, 203 insertions(+), 13 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderPreferences.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderPreferences.java index ddc435b1c..62f5769a1 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderPreferences.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderPreferences.java @@ -52,6 +52,10 @@ public class ReminderPreferences extends TodorooPreferenceActivity { String setting = r.getStringArray(R.array.EPr_quiet_hours_end)[index]; preference.setSummary(r.getString(R.string.rmd_EPr_quiet_hours_end_desc, setting)); } + } else if(r.getString(R.string.p_rmd_time).equals(preference.getKey())) { + int index = AndroidUtilities.indexOf(r.getStringArray(R.array.EPr_rmd_time_values), (String)value); + String setting = r.getStringArray(R.array.EPr_rmd_time)[index]; + preference.setSummary(r.getString(R.string.rmd_EPr_rmd_time_desc, setting)); } else if(r.getString(R.string.p_rmd_ringtone).equals(preference.getKey())) { if(value == null || "content://settings/system/notification_sound".equals(value)) //$NON-NLS-1$ preference.setSummary(r.getString(R.string.rmd_EPr_ringtone_desc_default)); diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java index 350e4d870..a5a963f0d 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java @@ -10,7 +10,9 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.res.Resources; +import android.text.format.DateUtils; import android.util.Log; +import android.widget.Toast; import com.timsu.astrid.R; import com.todoroo.andlib.data.Property; @@ -102,7 +104,7 @@ public final class ReminderService { Preferences.setIfUnset(prefs, editor, r, R.string.p_rmd_quietStart, 22); Preferences.setIfUnset(prefs, editor, r, R.string.p_rmd_quietEnd, 10); Preferences.setIfUnset(prefs, editor, r, R.string.p_rmd_default_random_hours, 0); - Preferences.setIfUnset(prefs, editor, r, R.string.p_rmd_time, 12); + Preferences.setIfUnset(prefs, editor, r, R.string.p_rmd_time, 18); Preferences.setIfUnset(prefs, editor, r, R.string.p_rmd_nagging, true); Preferences.setIfUnset(prefs, editor, r, R.string.p_rmd_persistent, true); @@ -276,17 +278,96 @@ public final class ReminderService { else { // return notification time on this day Date date = new Date(dueDate); - date.setHours(Preferences.getIntegerFromString(R.string.p_rmd_time, 12)); + date.setHours(Preferences.getIntegerFromString(R.string.p_rmd_time, 18)); date.setMinutes(0); + date.setSeconds(0); dueDateAlarm = date.getTime(); + if (dueDate > DateUtilities.now() && dueDateAlarm < DateUtilities.now()) { + // this only happens for tasks due today, cause dueDateAlarm wouldnt be in the past otherwise + // if the default reminder is in the past, then reschedule it + // on this day before start of quiet hours or after quiet hours + // randomly placed in this interval + boolean quietHours = false; + int quietHoursStart = Preferences.getIntegerFromString(R.string.p_rmd_quietStart, -1); + Date quietHoursStartDate = new Date(); + quietHoursStartDate.setHours(quietHoursStart); + quietHoursStartDate.setMinutes(0); + quietHoursStartDate.setSeconds(0); + + int quietHoursEnd = Preferences.getIntegerFromString(R.string.p_rmd_quietEnd, -1); + Date quietHoursEndDate = new Date(); + quietHoursEndDate.setHours(quietHoursStart); + quietHoursEndDate.setMinutes(0); + quietHoursEndDate.setSeconds(0); + + long millisToQuiet = quietHoursStartDate.getTime() - DateUtilities.now(); + long millisToEndOfDay = dueDate - DateUtilities.now(); + + // + int periodDivFactor = 4; + + if(quietHoursStart != -1 && quietHoursEnd != -1) { + int hour = new Date().getHours(); + if(quietHoursStart <= quietHoursEnd) { + if(hour >= quietHoursStart && hour < quietHoursEnd) { + quietHours = true; + // its quiet now, quietHoursEnd is 23 max, + // so put the default reminder to the end of the quiethours + date.setHours(quietHoursEnd); + dueDateAlarm = date.getTime(); + } else if (hour < quietHoursStart) { + // quietHours didnt start yet + millisToQuiet = quietHoursStartDate.getTime() - DateUtilities.now(); + long millisAfterQuiet = dueDate - quietHoursEndDate.getTime(); + + // if there is more time after quiethours today, select quiethours-end for reminder + if (millisAfterQuiet > (millisToQuiet / ((float)(1-(1/periodDivFactor))) )) + dueDateAlarm = quietHoursEndDate.getTime(); + else + dueDateAlarm = DateUtilities.now() + (long)(millisToQuiet / periodDivFactor); + } else { + // after quietHours, reuse dueDate for end of day + dueDateAlarm = DateUtilities.now() + (long)(millisToEndOfDay / periodDivFactor); + } + } else { // wrap across 24/hour boundary + if(hour >= quietHoursStart) { + // do nothing for the end of day, dont let it even vibrate + quietHours = true; + dueDateAlarm = NO_ALARM; + } else if (hour < quietHoursEnd) { + quietHours = true; + date.setHours(quietHoursEnd); + dueDateAlarm = date.getTime(); + } else { + // quietHours didnt start yet + millisToQuiet = quietHoursStartDate.getTime() - DateUtilities.now(); + dueDateAlarm = DateUtilities.now() + (long)(millisToQuiet / periodDivFactor); + } + } + } else { + // Quiet hours not activated, simply schedule the reminder on 1/periodDivFactor towards the end of day + dueDateAlarm = DateUtilities.now() + (long)(millisToEndOfDay / periodDivFactor); + } + + if(dueDate > DateUtilities.now() && dueDateAlarm < DateUtilities.now()) + dueDateAlarm = dueDate; + + String toastMessage; + Context context = ContextManager.getContext(); + CharSequence formattedDate = + DateUtils.getRelativeTimeSpanString(dueDateAlarm); + toastMessage = context.getString(R.string.rmd_time_toast, formattedDate); + + if (dueDateAlarm != NO_ALARM) + Toast.makeText(context, toastMessage, 5).show(); + else + Toast.makeText(context, context.getString(R.string.rmd_time_toast_quiet), 5).show(); + } } if(lastReminder > dueDateAlarm) return NO_ALARM; - if(dueDate > DateUtilities.now() && dueDateAlarm < DateUtilities.now()) - dueDateAlarm = dueDate; - return dueDateAlarm; } return NO_ALARM; @@ -368,8 +449,7 @@ public final class ReminderService { time = DateUtilities.now() + 5000L; if(Constants.DEBUG) - Log.e("Astrid", "Reminder (" + task.getId() + ", " + type + - ") set for " + new Date(time)); + Log.e("Astrid", "Reminder set for " + new Date(time)+" for (\""+task.getValue(Task.TITLE)+"\" (" + task.getId() + "), " + type +")"); am.set(AlarmManager.RTC_WAKEUP, time, pendingIntent); } } diff --git a/astrid/res/values-de/strings.xml b/astrid/res/values-de/strings.xml index 8ee546d60..2dace1ff9 100644 --- a/astrid/res/values-de/strings.xml +++ b/astrid/res/values-de/strings.xml @@ -73,7 +73,7 @@ Fehler beim Importieren - Backed Up %1$s to %2$s. + Backup erstellt für %1$s nach %2$s. Keine Aufgaben für den Export. @@ -1014,6 +1014,10 @@ Hau ab! + + Die Standarderinnerungszeit für heute liegt in der Vergangenheit!\nDie nächste Erinnerung erscheint daher %s. + Die Standarderinnerungszeit für heute liegt in der Vergangenheit und Stille Stunden sind aktiv!\nFür heute wird daher keine Erinnerung mehr angezeigt. + @@ -1031,6 +1035,11 @@ Erinnerungen werden angezeigt ab: %s + + Standarderinnerungszeit + + Meldungen für Aufgaben ohne Zeitangabe erscheinen um %s + Erinnerungsklingelton @@ -1151,6 +1160,34 @@ 08:00 + + + 09:00 + 10:00 + 11:00 + 12:00 + 13:00 + 14:00 + 15:00 + 16:00 + 17:00 + 18:00 + 19:00 + 20:00 + 21:00 + 22:00 + 23:00 + 24:00 + 01:00 + 02:00 + 03:00 + 04:00 + 05:00 + 06:00 + 07:00 + 08:00 + + diff --git a/astrid/res/values/keys.xml b/astrid/res/values/keys.xml index 757668e8d..365fdb2ef 100644 --- a/astrid/res/values/keys.xml +++ b/astrid/res/values/keys.xml @@ -13,6 +13,9 @@ notif_qend + + reminder_time + notif_annoy @@ -34,9 +37,6 @@ snooze_dialog - - reminder_time - notif_default_reminder @@ -125,6 +125,34 @@ 08 + + + 09 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 00 + 01 + 02 + 03 + 04 + 05 + 06 + 07 + 08 + + colorize diff --git a/astrid/res/values/strings-reminders.xml b/astrid/res/values/strings-reminders.xml index 2a88bdc50..40c7d89e5 100644 --- a/astrid/res/values/strings-reminders.xml +++ b/astrid/res/values/strings-reminders.xml @@ -53,7 +53,11 @@ Go Away! - + + + Default due reminder for today is in the past!\nThe next reminder will be %s. + Default due reminder for today is in the past and its already quiet time!\nNo reminder scheduled for today. + @@ -71,6 +75,11 @@ Notifications will begin appearing starting at %s + + Default Reminder + + Notifications for tasks without duetimes will appear at %s + Notification Ringtone @@ -191,6 +200,34 @@ 8 AM + + + 9 AM + 10 AM + 11 AM + 12 PM + 1 PM + 2 PM + 3 PM + 4 PM + 5 PM + 6 PM + 7 PM + 8 PM + 9 PM + 10 PM + 11 PM + 12 AM + 1 AM + 2 AM + 3 AM + 4 AM + 5 AM + 6 AM + 7 AM + 8 AM + + @@ -269,5 +306,4 @@ Didn\'t you make that excuse last time? I can\'t help you organize your life if you do that... - diff --git a/astrid/res/xml/preferences_reminders.xml b/astrid/res/xml/preferences_reminders.xml index 89d2cb0ae..8da5d531e 100644 --- a/astrid/res/xml/preferences_reminders.xml +++ b/astrid/res/xml/preferences_reminders.xml @@ -13,6 +13,11 @@ android:entries="@array/EPr_quiet_hours_end" android:entryValues="@array/EPr_quiet_hours_end_values" android:title="@string/rmd_EPr_quiet_hours_end_title"/> +