From 12ab4ab16d6158c6f9a8792a43897ec604d653cd Mon Sep 17 00:00:00 2001 From: Tim Su Date: Fri, 4 Mar 2011 14:08:59 -0800 Subject: [PATCH] Minor tweaks to reminder logic --- .../reminders/NotificationActivity.java | 7 +++++-- .../astrid/reminders/Notifications.java | 18 ++++++++++------- .../astrid/reminders/ReminderService.java | 16 +++++++++++++-- .../astrid/service/StartupService.java | 20 +++++++++++++------ 4 files changed, 44 insertions(+), 17 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java index a456b9459..144bd5c9e 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java @@ -30,8 +30,8 @@ import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; import android.view.View.OnClickListener; +import android.view.ViewGroup; import android.widget.Button; import android.widget.FrameLayout; import android.widget.LinearLayout; @@ -42,13 +42,14 @@ import android.widget.TimePicker; import com.timsu.astrid.R; import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.utility.DateUtilities; +import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.repeats.RepeatControlSet; +import com.todoroo.astrid.service.StartupService; import com.todoroo.astrid.ui.NumberPicker; -import com.todoroo.andlib.utility.Preferences; /** * This activity is launched when a user opens up a notification from the @@ -70,6 +71,8 @@ public class NotificationActivity extends TaskListActivity implements OnTimeSetL @Override public void onCreate(Bundle savedInstanceState) { + StartupService.bypassInitialization(); + super.onCreate(savedInstanceState); displayNotificationPopup(); diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/Notifications.java b/astrid/plugin-src/com/todoroo/astrid/reminders/Notifications.java index 6fae7d4b5..bcc68bc7f 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/Notifications.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/Notifications.java @@ -235,22 +235,26 @@ public class Notifications extends BroadcastReceiver { int callState = tm.getCallState(); boolean voiceReminder = Preferences.getBoolean(R.string.p_voiceRemindersEnabled, false); - // if non-stop mode is activated, set up the flags for insistent + + // if multi-ring is activated, set up the flags for insistent // notification, and increase the volume to full volume, so the user // will actually pay attention to the alarm - if(ringTimes < 0 && (type != ReminderService.TYPE_RANDOM)) { - notification.flags |= Notification.FLAG_INSISTENT; + if(ringTimes != 1 && (type != ReminderService.TYPE_RANDOM)) { notification.audioStreamType = AudioManager.STREAM_ALARM; audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), 0); - voiceReminder = false; + + // insistent rings until notification is disabled + if(ringTimes < 0) { + notification.flags |= Notification.FLAG_INSISTENT; + voiceReminder = false; + } + } else { notification.audioStreamType = AudioManager.STREAM_NOTIFICATION; - if(ringTimes > 3) - audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, - audioManager.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION), 0); } + // quiet hours = no sound if(quietHours || callState != TelephonyManager.CALL_STATE_IDLE) { notification.sound = null; diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java index 089ce626f..040b24df0 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java @@ -21,11 +21,11 @@ import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.DateUtilities; +import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.utility.Constants; -import com.todoroo.andlib.utility.Preferences; /** @@ -177,6 +177,18 @@ public final class ReminderService { // notifications after due date long whenOverdue = calculateNextOverdueReminder(task); + /*if(Constants.DEBUG) { + System.err.println("TASK: " + task.getValue(Task.TITLE)); + System.err.println("LAST REMINDER: " + new Date(task.getValue(Task.REMINDER_LAST))); + if(task.hasDueDate()) + System.err.println("DUEDATE: " + new Date(task.getValue(Task.DUE_DATE))); + System.err.println("WHEN OVERDUE: " + (whenOverdue)); + System.err.println("WHEN DUED: " + (whenDueDate)); + System.err.println("WHEN SNOOZ: " + (whenSnooze)); + System.err.println("WHEN RANDO: " + (whenRandom)); + }*/ + + // if random reminders are too close to due date, favor due date if(whenRandom != NO_ALARM && whenDueDate - whenRandom < DateUtilities.ONE_DAY) whenRandom = NO_ALARM; @@ -355,7 +367,7 @@ public final class ReminderService { if(time < DateUtilities.now()) time = DateUtilities.now() + 5000L; - if(Constants.DEBUG) + if(Constants.DEBUG) Log.e("Astrid", "Reminder (" + task.getId() + ", " + type + ") set for " + new Date(time)); am.set(AlarmManager.RTC_WAKEUP, time, pendingIntent); diff --git a/astrid/src/com/todoroo/astrid/service/StartupService.java b/astrid/src/com/todoroo/astrid/service/StartupService.java index ae6483296..493a08b40 100644 --- a/astrid/src/com/todoroo/astrid/service/StartupService.java +++ b/astrid/src/com/todoroo/astrid/service/StartupService.java @@ -79,11 +79,25 @@ public class StartupService { */ private static boolean hasStartedUp = false; + /** + * Call to skip initialization steps (i.e. if only a notification screen is needed) + */ + public synchronized static void bypassInitialization() { + hasStartedUp = true; + } + /** Called when this application is started up */ public synchronized void onStartupApplication(final Context context) { if(hasStartedUp) return; + // set uncaught exception handler + Thread.setDefaultUncaughtExceptionHandler(new TodorooUncaughtExceptionHandler()); + + // sets up context manager + ContextManager.setContext(context); + + // show notification if reminders are silenced if(context instanceof Activity) { AudioManager audioManager = (AudioManager)context.getSystemService( Context.AUDIO_SERVICE); @@ -91,12 +105,6 @@ public class StartupService { Toast.makeText(context, R.string.TLA_notification_volume_low, Toast.LENGTH_LONG).show(); } - // set uncaught exception handler - Thread.setDefaultUncaughtExceptionHandler(new TodorooUncaughtExceptionHandler()); - - // sets up context manager - ContextManager.setContext(context); - // read current version int latestSetVersion = AstridPreferences.getCurrentVersion(); int version = 0;