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"/>
+