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)