Updated the way deadlines (absolute vs goal) are handled. Goal deadlines don't send reminders once they're overdue.

Also, did some cosmetic things.
pull/14/head
Tim Su 17 years ago
parent 0f426aa86a
commit f1e6f5a480

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.timsu.astrid" package="com.timsu.astrid"
android:versionCode="10" android:versionCode="11"
android:versionName="1.7.4"> android:versionName="1.7.5">
<uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.VIBRATE"/>

@ -15,22 +15,20 @@
--> -->
<resources> <resources>
<!-- Choices for the "Reminder minutes" spinner. <!-- Make these < 20 chars so the task name is displayed -->
These must be kept in sync with the reminder_minutes_values array.
-->
<string-array name="reminders"> <string-array name="reminders">
<item>Hi there! Have a second?</item> <item>Hi there! Have a sec?</item>
<item>Can I see you for a moment?</item> <item>Can I see you for a sec?</item>
<item>Have a few minutes?</item> <item>Have a few minutes?</item>
<item>I think you forgot to do something...</item> <item>Did you forget?</item>
<item>Excuse me?</item> <item>Excuse me!</item>
<item>When you have a minute...</item> <item>When you have a minute:</item>
<item>Look what I dug up!</item> <item>On your agenda:</item>
<item>Are you free for a moment?</item> <item>Free for a moment?</item>
<item>Your friendly neighborhood assistant here!</item> <item>Astrid here!</item>
<item>Hi! Can I bother you for a moment?</item> <item>Hi! Can I bug you?</item>
<item>I would like a minute of your time.</item> <item>A minute of your time?</item>
<item>It\'s a great day to get something done!</item> <item>It\'s a great day to</item>
</string-array> </string-array>
<!-- Astrid says... (user should answer yes or no)--> <!-- Astrid says... (user should answer yes or no)-->

@ -67,6 +67,7 @@
<string name="taskList_titleTagPrefix">Tagged \"%s\": </string> <string name="taskList_titleTagPrefix">Tagged \"%s\": </string>
<string name="taskList_hiddenSuffix"> hidden</string> <string name="taskList_hiddenSuffix"> hidden</string>
<string name="taskList_dueIn">Due in</string> <string name="taskList_dueIn">Due in</string>
<string name="taskList_goalPrefix">Goal</string>
<string name="taskList_overdueBy">Overdue by</string> <string name="taskList_overdueBy">Overdue by</string>
<string name="addtask_label">New Task</string> <string name="addtask_label">New Task</string>
<string name="tags_prefix">Tags: </string> <string name="tags_prefix">Tags: </string>
@ -162,8 +163,8 @@
<!-- Notification --> <!-- Notification -->
<skip /> <skip />
<string name="notif_definiteDueDate">Absolute Deadline Coming Up!</string> <string name="notif_definiteDueDate">Absolute Deadline!</string>
<string name="notif_preferredDueDate">Goal Deadline Coming Up!</string> <string name="notif_preferredDueDate">Goal Deadline!</string>
<!-- Error MEssages --> <!-- Error MEssages -->
<skip /> <skip />

@ -38,7 +38,6 @@ import android.widget.ArrayAdapter;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.CompoundButton.OnCheckedChangeListener;
@ -109,7 +108,7 @@ public class TaskListAdapter extends ArrayAdapter<TaskModelForList> {
final TextView tagsView = ((TextView)view.findViewById(R.id.text_tags)); final TextView tagsView = ((TextView)view.findViewById(R.id.text_tags));
final CheckBox progress = ((CheckBox)view.findViewById(R.id.cb1)); final CheckBox progress = ((CheckBox)view.findViewById(R.id.cb1));
final ImageView timer = ((ImageView)view.findViewById(R.id.image1)); final ImageView timer = ((ImageView)view.findViewById(R.id.image1));
final LinearLayout properties = (LinearLayout)view.findViewById(R.id.prop_layout); boolean hasProperties = false;
view.setTag(task); view.setTag(task);
progress.setTag(task); progress.setTag(task);
@ -121,21 +120,29 @@ public class TaskListAdapter extends ArrayAdapter<TaskModelForList> {
// due date // due date
Date dueDate = task.getDefiniteDueDate(); Date dueDate = task.getDefiniteDueDate();
String dueString = "";
if(dueDate == null || (task.getPreferredDueDate() != null && if(dueDate == null || (task.getPreferredDueDate() != null &&
task.getPreferredDueDate().getTime() < dueDate.getTime())) task.getPreferredDueDate().before(dueDate))) {
// only prefix with "goal:" if the real deadline isn't overdue
if(task.getDefiniteDueDate() == null || task.getDefiniteDueDate().
after(new Date()))
dueString = r.getString(R.string.taskList_goalPrefix) + " ";
dueDate = task.getPreferredDueDate(); dueDate = task.getPreferredDueDate();
}
if(dueDate != null) { if(dueDate != null) {
int secondsLeft = (int)(dueDate.getTime() - int secondsLeft = (int)(dueDate.getTime() -
System.currentTimeMillis()) / 1000; System.currentTimeMillis()) / 1000;
String dueString = " " + DateUtilities.getDurationString(r,
Math.abs(secondsLeft), 1);
if(secondsLeft > 0) if(secondsLeft > 0)
dueString = r.getString(R.string.taskList_dueIn) + dueString; dueString += r.getString(R.string.taskList_dueIn) + " ";
else { else {
dueString = r.getString(R.string.taskList_overdueBy) + dueString; dueString += r.getString(R.string.taskList_overdueBy) + " ";
dueDateView.setTextColor(r.getColor(R.color.taskList_dueDateOverdue)); dueDateView.setTextColor(r.getColor(R.color.taskList_dueDateOverdue));
} }
dueString += DateUtilities.getDurationString(r, Math.abs(secondsLeft), 1);
dueDateView.setText(dueString); dueDateView.setText(dueString);
hasProperties = true;
} else } else
dueDateView.setVisibility(View.GONE); dueDateView.setVisibility(View.GONE);
@ -152,7 +159,7 @@ public class TaskListAdapter extends ArrayAdapter<TaskModelForList> {
if(tagString.length() > 0) { if(tagString.length() > 0) {
tagsView.setText(r.getString(R.string.tags_prefix) + " " + tagsView.setText(r.getString(R.string.tags_prefix) + " " +
tagString); tagString);
} else { } else if(!hasProperties) {
tagsView.setText(r.getString(R.string.no_tags)); tagsView.setText(r.getString(R.string.no_tags));
} }

@ -137,7 +137,9 @@ public class Notifications extends BroadcastReceiver {
flags = FLAG_DEFINITE_DEADLINE; flags = FLAG_DEFINITE_DEADLINE;
} }
} }
if(task.getPreferredDueDate() != null) { // for goal deadlines, once it's overdue, forget about it.
if(task.getPreferredDueDate() != null &&
task.getPreferredDueDate().getTime() > System.currentTimeMillis()) {
long deadlineWhen = task.getPreferredDueDate().getTime() - long deadlineWhen = task.getPreferredDueDate().getTime() -
DEADLINE_NOTIFY_SECS * 1000; DEADLINE_NOTIFY_SECS * 1000;
if(when == null || deadlineWhen < when) { if(when == null || deadlineWhen < when) {
@ -279,8 +281,8 @@ public class Notifications extends BroadcastReceiver {
System.currentTimeMillis()); System.currentTimeMillis());
notification.setLatestEventInfo(context, notification.setLatestEventInfo(context,
appName + ": " + reminder, appName,
taskName, reminder + " " + taskName,
pendingIntent); pendingIntent);
notification.defaults = Notification.DEFAULT_ALL; notification.defaults = Notification.DEFAULT_ALL;

Loading…
Cancel
Save