diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java
index 1dbbdc6dc..1320eb72d 100644
--- a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java
+++ b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java
@@ -75,7 +75,7 @@ public class NotificationActivity extends Activity {
taskListIntent.putExtra(TaskListActivity.TOKEN_FILTER, itemFilter);
startActivity(taskListIntent);
- String reminder = Notifications.getRandomReminder(getResources().getStringArray(R.array.reminder_responses));
+ String reminder = Notifications.getRandomReminder(getResources().getStringArray(R.array.responses));
Toast.makeText(this, reminder, Toast.LENGTH_LONG).show();
finish();
diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java
index 4fe6c93e2..07b0566e7 100644
--- a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java
+++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderService.java
@@ -84,7 +84,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, 7);
+ 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_nagging, true);
Preferences.setIfUnset(prefs, editor, r, R.string.p_rmd_persistent, true);
diff --git a/astrid/res/layout/task_edit_activity.xml b/astrid/res/layout/task_edit_activity.xml
index 60d6c6a6e..0046a5d4a 100644
--- a/astrid/res/layout/task_edit_activity.xml
+++ b/astrid/res/layout/task_edit_activity.xml
@@ -151,11 +151,20 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/TEA_reminder_overdue" />
-
+ android:layout_height="fill_parent">
+
+
+
reminder_time
-
- notif_default_reminder
+
+ notif_default_reminder
diff --git a/astrid/res/values/strings-3.0.xml b/astrid/res/values/strings-3.0.xml
index c532e9f08..0aa0a7cfa 100644
--- a/astrid/res/values/strings-3.0.xml
+++ b/astrid/res/values/strings-3.0.xml
@@ -292,27 +292,6 @@ to the plugin creator for fastest service.
No Repeat Set
-
- Remind me...
-
-
- ... when it\'s time to start the task
-
-
- ... when task is overdue
-
-
- ... randomly every %s
-
-
- Ring/Vibrate Type:
-
-
- Ring Once
-
-
- Ring Until I Dismiss Alarm
-
Tags:
diff --git a/astrid/res/values/strings-reminders.xml b/astrid/res/values/strings-reminders.xml
index a14e73903..853d1c878 100644
--- a/astrid/res/values/strings-reminders.xml
+++ b/astrid/res/values/strings-reminders.xml
@@ -4,10 +4,53 @@
+
+
+
+ Remind me...
+
+
+ ... when it\'s time to start the task
+
+
+ ... when task is overdue
+
+
+ ... randomly every
+
+
+ Ring/Vibrate Type:
+
+
+ Ring Once
+
+
+ Ring Until I Dismiss Alarm
+
+
+
+ - hour
+ - day
+ - week
+ - two weeks
+ - month
+ - two months
+
+
+
+
+ - 1
+ - 24
+ - 168
+ - 336
+ - 730
+ - 1460
+
+
- Astrid: Reminder
+ Reminder!
@@ -43,6 +86,28 @@
New Task Defaults
+
+
+ - disabled
+ - hourly
+ - daily
+ - weekly
+ - bi-weekly
+ - monthly
+ - bi-monthly
+
+
+
+
+ - 0
+ - 1
+ - 24
+ - 168
+ - 336
+ - 730
+ - 1460
+
+
diff --git a/astrid/res/xml/preferences_reminders.xml b/astrid/res/xml/preferences_reminders.xml
index 5a886e08f..ec209916c 100644
--- a/astrid/res/xml/preferences_reminders.xml
+++ b/astrid/res/xml/preferences_reminders.xml
@@ -20,10 +20,11 @@
android:key="@string/p_rmd_vibrate"
android:title="@string/prefs_vibrate_title"
android:summary="@string/prefs_vibrate_desc" />
-
+ android:entries="@array/EPr_reminder_random"
+ android:entryValues="@array/EPr_reminder_random_hours"/>
";
- random.setText(Html.fromHtml(getString(R.string.TEA_reminder_random,
- dateString)));
- }
-
public void setValue(int flags) {
during.setChecked((flags & Task.NOTIFY_AT_DEADLINE) > 0);
after.setChecked((flags &
@@ -1025,18 +1012,87 @@ public final class TaskEditActivity extends TabActivity {
@Override
public void readFromModel() {
setValue(model.getValue(Task.REMINDER_FLAGS));
- periodic = model.getValue(Task.REMINDER_PERIOD);
- if(periodic > 0) {
- random.setChecked(true);
- updatePeriodicString();
- }
}
@Override
public void writeToModel() {
model.setValue(Task.REMINDER_FLAGS, getValue());
- if(random.isChecked())
- model.setValue(Task.REMINDER_PERIOD, periodic);
+ }
+ }
+
+ /**
+ * Control set dealing with random reminder settings
+ *
+ * @author Tim Su
+ *
+ */
+ public class RandomReminderControlSet implements TaskEditControlSet {
+ private final CheckBox settingCheckbox;
+ private final Spinner periodSpinner;
+
+ private final int[] hours;
+
+ public RandomReminderControlSet(int settingCheckboxId, int periodButtonId) {
+ settingCheckbox = (CheckBox)findViewById(settingCheckboxId);
+ periodSpinner = (Spinner)findViewById(periodButtonId);
+ periodSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
+
+ @Override
+ public void onItemSelected(AdapterView> arg0, View arg1,
+ int arg2, long arg3) {
+ settingCheckbox.setChecked(true);
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> arg0) {
+ // ignore
+ }
+
+ });
+
+ // create adapter
+ ArrayAdapter adapter = new ArrayAdapter(
+ TaskEditActivity.this, android.R.layout.simple_spinner_item,
+ getResources().getStringArray(R.array.TEA_reminder_random));
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ periodSpinner.setAdapter(adapter);
+
+ // create hour array
+ String[] hourStrings = getResources().getStringArray(R.array.TEA_reminder_random_hours);
+ hours = new int[hourStrings.length];
+ for(int i = 0; i < hours.length; i++)
+ hours[i] = Integer.parseInt(hourStrings[i]);
+ }
+
+ @Override
+ public void readFromModel() {
+ long time;
+ if(isNewTask()) {
+ time = Preferences.getIntegerFromString(R.string.p_rmd_default_random_hours) *
+ DateUtilities.ONE_HOUR;
+ } else {
+ time = model.getValue(Task.REMINDER_PERIOD);
+ }
+
+ settingCheckbox.setChecked(time > 0);
+ if(time == 0) {
+ time = 7*24;
+ }
+
+ int i;
+ for(i = 0; i < hours.length - 1; i++)
+ if(hours[i] * DateUtilities.ONE_HOUR >= time)
+ break;
+ periodSpinner.setSelection(i);
+ }
+
+ @Override
+ public void writeToModel() {
+ if(settingCheckbox.isChecked()) {
+ int hourValue = hours[periodSpinner.getSelectedItemPosition()];
+ model.setValue(Task.REMINDER_PERIOD, hourValue * DateUtilities.ONE_HOUR);
+ } else
+ model.setValue(Task.REMINDER_PERIOD, 0L);
}
}
diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java
index 23f33dc3f..0c61445c7 100644
--- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java
+++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java
@@ -151,7 +151,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener {
String title = extras.getString(TOKEN_FILTER_TITLE);
String sql = extras.getString(TOKEN_FILTER_SQL);
ContentValues values = extras.getParcelable(TOKEN_FILTER_VALUES);
- filter = new Filter("", "", title, new QueryTemplate(), values);
+ filter = new Filter("", "", title, new QueryTemplate(), values); //$NON-NLS-1$ //$NON-NLS-2$
filter.sqlQuery = sql;
} else {
filter = CoreFilterExposer.buildInboxFilter(getResources());
@@ -457,8 +457,9 @@ public class TaskListActivity extends ListActivity implements OnScrollListener {
R.string.TAd_contextDeleteTask);
if(Constants.DEBUG) {
+ menu.add("--- debug ---"); //$NON-NLS-1$
menu.add(id, CONTEXT_MENU_DEBUG, Menu.NONE,
- "schedule alarm"); //$NON-NLS-1$
+ "when alarm?"); //$NON-NLS-1$
menu.add(id, CONTEXT_MENU_DEBUG + 1, Menu.NONE,
"make notification"); //$NON-NLS-1$
}
@@ -539,19 +540,24 @@ public class TaskListActivity extends ListActivity implements OnScrollListener {
return true;
}
+ // --- debug
+
case CONTEXT_MENU_DEBUG: {
itemId = item.getGroupId();
Task task = new Task();
task.setId(itemId);
- ReminderService reminderService = new ReminderService();
+ final ReminderService reminderService = new ReminderService();
reminderService.setScheduler(new AlarmScheduler() {
@Override
public void createAlarm(Task theTask, long time, int type) {
Toast.makeText(TaskListActivity.this, "Scheduled Alarm: " + //$NON-NLS-1$
new Date(time), Toast.LENGTH_LONG).show();
+ reminderService.setScheduler(null);
}
});
reminderService.scheduleAlarm(task);
+ if(reminderService.getScheduler() != null)
+ Toast.makeText(this, "No alarms", Toast.LENGTH_LONG).show(); //$NON-NLS-1$
return true;
}
diff --git a/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java b/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java
index 8f743d5cd..8b667cf2f 100644
--- a/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java
+++ b/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java
@@ -7,6 +7,8 @@ import java.util.Map.Entry;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
@@ -35,6 +37,7 @@ import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.model.Metadata;
import com.todoroo.astrid.model.Task;
import com.todoroo.astrid.tags.TagService;
+import com.todoroo.astrid.utility.Preferences;
public class Astrid2To3UpgradeHelper {
@@ -160,6 +163,16 @@ public class Astrid2To3UpgradeHelper {
// --- clean up database
metadataService.cleanup();
+ // --- upgrade properties
+ SharedPreferences prefs = Preferences.getPrefs(context);
+ Editor editor = prefs.edit();
+ if(prefs.contains(context.getString(R.string.p_rmd_default_random_hours))) {
+ // convert days => hours
+ editor.putString(context.getString(R.string.p_rmd_default_random_hours),
+ Integer.toString(Preferences.getIntegerFromString(R.string.p_rmd_default_random_hours) * 24));
+ }
+
+
database.close();
if(dialog != null)