From 959741120b57b201e2f6a68a2e44be83918c216a Mon Sep 17 00:00:00 2001 From: Tim Su Date: Sun, 22 Feb 2009 23:48:34 +0000 Subject: [PATCH] Fixed up bugs from previous update. Also, when you complete a repeating task, periodic reminders are pushed back. --- AndroidManifest.xml | 5 +++-- src/com/timsu/astrid/activities/TaskList.java | 8 +++++++- .../astrid/activities/TaskListSubActivity.java | 8 ++++++++ src/com/timsu/astrid/data/task/TaskController.java | 5 +++-- .../timsu/astrid/data/task/TaskModelForRepeat.java | 14 ++++++++++++++ src/com/timsu/astrid/utilities/Notifications.java | 4 +++- 6 files changed, 38 insertions(+), 6 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 74fc7db50..c8ada9219 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="87" + android:versionName="2.4.0"> @@ -12,6 +12,7 @@ + diff --git a/src/com/timsu/astrid/activities/TaskList.java b/src/com/timsu/astrid/activities/TaskList.java index a13c73261..01af7f36c 100644 --- a/src/com/timsu/astrid/activities/TaskList.java +++ b/src/com/timsu/astrid/activities/TaskList.java @@ -138,6 +138,12 @@ public class TaskList extends Activity { Synchronizer.synchronize(this, true, null); } } + + // if we have no filter tag, we're not on the last task + if(getCurrentSubActivity() == taskListWTag && + ((TaskListSubActivity)taskListWTag).getFilterTag() == null) { + switchToActivity(ActivityCode.TASK_LIST, null); + } } /** Set up user interface components */ @@ -166,7 +172,7 @@ public class TaskList extends Activity { }; } - /** Gesture detector switches between subactivities */ + /** Gesture detector switches between sub-activities */ private class AstridGestureDetector extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { diff --git a/src/com/timsu/astrid/activities/TaskListSubActivity.java b/src/com/timsu/astrid/activities/TaskListSubActivity.java index 2a16d49d9..24948ed19 100644 --- a/src/com/timsu/astrid/activities/TaskListSubActivity.java +++ b/src/com/timsu/astrid/activities/TaskListSubActivity.java @@ -858,4 +858,12 @@ public class TaskListSubActivity extends SubActivity { return false; } + + /* ====================================================================== + *===================================================== getters / setters + * ====================================================================== */ + + public TagModelForView getFilterTag() { + return filterTag; + } } \ No newline at end of file diff --git a/src/com/timsu/astrid/data/task/TaskController.java b/src/com/timsu/astrid/data/task/TaskController.java index e03cab2fd..1479ea9f0 100644 --- a/src/com/timsu/astrid/data/task/TaskController.java +++ b/src/com/timsu/astrid/data/task/TaskController.java @@ -268,8 +268,9 @@ public class TaskController extends AbstractController { } // due date was updated, update calendar event - if(values.containsKey(AbstractTaskModel.DEFINITE_DUE_DATE) || - values.containsKey(AbstractTaskModel.PREFERRED_DUE_DATE)) { + if((values.containsKey(AbstractTaskModel.DEFINITE_DUE_DATE) || + values.containsKey(AbstractTaskModel.PREFERRED_DUE_DATE)) && + !values.containsKey(AbstractTaskModel.CALENDAR_URI)) { try { Cursor cursor = fetchTaskCursor(task.getTaskIdentifier(), new String[] { AbstractTaskModel.CALENDAR_URI }); diff --git a/src/com/timsu/astrid/data/task/TaskModelForRepeat.java b/src/com/timsu/astrid/data/task/TaskModelForRepeat.java index 3c04ee060..a28480592 100644 --- a/src/com/timsu/astrid/data/task/TaskModelForRepeat.java +++ b/src/com/timsu/astrid/data/task/TaskModelForRepeat.java @@ -49,8 +49,18 @@ public class TaskModelForRepeat extends AbstractTaskModel implements Notifiable NOTIFICATION_FLAGS, }; + /** + * This method updates the task to reflect a new repeat iteration. It moves + * back the due dates and updates other task properties accordingly. + * + * @param context + * @param taskController + * @param repeatInfo + */ public void repeatTaskBy(Context context, TaskController taskController, RepeatInfo repeatInfo) { + + // move dates back if(getDefiniteDueDate() != null) setDefiniteDueDate(repeatInfo.shiftDate(getDefiniteDueDate())); if(getHiddenUntil() != null) @@ -76,6 +86,10 @@ public class TaskModelForRepeat extends AbstractTaskModel implements Notifiable alertController.addAlert(getTaskIdentifier(), newAlert); alerts.set(i, newAlert); } + + // reset periodic alerts + setLastNotificationTime(null); + Notifications.updateAlarm(context, taskController, alertController, this); alertController.close(); } diff --git a/src/com/timsu/astrid/utilities/Notifications.java b/src/com/timsu/astrid/utilities/Notifications.java index e6ffb9126..1e248232b 100644 --- a/src/com/timsu/astrid/utilities/Notifications.java +++ b/src/com/timsu/astrid/utilities/Notifications.java @@ -163,16 +163,18 @@ public class Notifications extends BroadcastReceiver { when, FLAG_PERIODIC, interval); } - // before, during, and after deadlines + // notifications at deadlines int estimatedDuration = DEADLINE_NOTIFY_SECS; if(task.getEstimatedSeconds() != null && task.getEstimatedSeconds() > DEADLINE_NOTIFY_SECS) estimatedDuration = (int)(task.getEstimatedSeconds() * 1.5f); + // we need to clear all alarms in case users removed a deadline clearAlarm(context, task.getTaskIdentifier().getId(), FLAG_DEFINITE_DEADLINE); clearAlarm(context, task.getTaskIdentifier().getId(), FLAG_PREFERRED_DEADLINE); clearAlarm(context, task.getTaskIdentifier().getId(), FLAG_DEFINITE_DEADLINE | FLAG_OVERDUE); clearAlarm(context, task.getTaskIdentifier().getId(), FLAG_PREFERRED_DEADLINE | FLAG_OVERDUE); + // before, during, and after deadlines if((task.getNotificationFlags() & TaskModelForList.NOTIFY_BEFORE_DEADLINE) > 0) { scheduleDeadline(context, task.getDefiniteDueDate(), -estimatedDuration, 0, FLAG_DEFINITE_DEADLINE, task);