diff --git a/api/src/com/todoroo/astrid/api/PermaSql.java b/api/src/com/todoroo/astrid/api/PermaSql.java index b8b2386c1..65667d1da 100644 --- a/api/src/com/todoroo/astrid/api/PermaSql.java +++ b/api/src/com/todoroo/astrid/api/PermaSql.java @@ -25,21 +25,39 @@ public final class PermaSql { /** value to be replaced by end of day as long */ public static final String VALUE_EOD = "EOD()"; //$NON-NLS-1$ + /** value to be replaced by noon today as long */ + public static final String VALUE_NOON = "NOON()"; //$NON-NLS-1$ + /** value to be replaced by end of day yesterday as long */ public static final String VALUE_EOD_YESTERDAY = "EODY()"; //$NON-NLS-1$ + /** value to be replaced by noon yesterday as long */ + public static final String VALUE_NOON_YESTERDAY = "NOONY()"; //$NON-NLS-1$ + /** value to be replaced by end of day tomorrow as long */ public static final String VALUE_EOD_TOMORROW = "EODT()"; //$NON-NLS-1$ + /** value to be replaced by noon tomorrow as long */ + public static final String VALUE_NOON_TOMORROW = "NOONT()"; //$NON-NLS-1$ + /** value to be replaced by end of day day after tomorrow as long */ public static final String VALUE_EOD_DAY_AFTER = "EODTT()"; //$NON-NLS-1$ + /** value to be replaced by noon day after tomorrow as long */ + public static final String VALUE_NOON_DAY_AFTER = "NOONTT()"; //$NON-NLS-1$ + /** value to be replaced by end of day next week as long */ public static final String VALUE_EOD_NEXT_WEEK = "EODW()"; //$NON-NLS-1$ + /** value to be replaced by noon next week as long */ + public static final String VALUE_NOON_NEXT_WEEK = "NOONW()"; //$NON-NLS-1$ + /** value to be replaced by approximate end of day next month as long */ public static final String VALUE_EOD_NEXT_MONTH = "EODM()"; //$NON-NLS-1$ + /** value to be replaced by approximate noon next month as long */ + public static final String VALUE_NOON_NEXT_MONTH = "NOONM()"; //$NON-NLS-1$ + /** Replace placeholder strings with actual */ public static String replacePlaceholders(String value) { if(value.contains(VALUE_NOW)) @@ -47,19 +65,44 @@ public final class PermaSql { if(value.contains(VALUE_EOD) || value.contains(VALUE_EOD_DAY_AFTER) || value.contains(VALUE_EOD_NEXT_WEEK) || value.contains(VALUE_EOD_TOMORROW) || value.contains(VALUE_EOD_YESTERDAY) || value.contains(VALUE_EOD_NEXT_MONTH)) { - Date date = new Date(); - date.setHours(23); - date.setMinutes(59); - date.setSeconds(59); - long time = date.getTime() / 1000l * 1000l; // chop milliseconds off - value = value.replace(VALUE_EOD_YESTERDAY, Long.toString(time - DateUtilities.ONE_DAY)); - value = value.replace(VALUE_EOD, Long.toString(time)); - value = value.replace(VALUE_EOD_TOMORROW, Long.toString(time + DateUtilities.ONE_DAY)); - value = value.replace(VALUE_EOD_DAY_AFTER, Long.toString(time + 2 * DateUtilities.ONE_DAY)); - value = value.replace(VALUE_EOD_NEXT_WEEK, Long.toString(time + 7 * DateUtilities.ONE_DAY)); - value = value.replace(VALUE_EOD_NEXT_MONTH, Long.toString(time + 30 * DateUtilities.ONE_DAY)); + value = replaceEodValues(value); + } + if(value.contains(VALUE_NOON) || value.contains(VALUE_NOON_DAY_AFTER) || + value.contains(VALUE_NOON_NEXT_WEEK) || value.contains(VALUE_NOON_TOMORROW) || + value.contains(VALUE_NOON_YESTERDAY) || value.contains(VALUE_NOON_NEXT_MONTH)) { + value = replaceNoonValues(value); } return value; } + private static String replaceEodValues(String value) { + Date date = new Date(); + date.setHours(23); + date.setMinutes(59); + date.setSeconds(59); + long time = date.getTime() / 1000l * 1000l; // chop milliseconds off + value = value.replace(VALUE_EOD_YESTERDAY, Long.toString(time - DateUtilities.ONE_DAY)); + value = value.replace(VALUE_EOD, Long.toString(time)); + value = value.replace(VALUE_EOD_TOMORROW, Long.toString(time + DateUtilities.ONE_DAY)); + value = value.replace(VALUE_EOD_DAY_AFTER, Long.toString(time + 2 * DateUtilities.ONE_DAY)); + value = value.replace(VALUE_EOD_NEXT_WEEK, Long.toString(time + 7 * DateUtilities.ONE_DAY)); + value = value.replace(VALUE_EOD_NEXT_MONTH, Long.toString(time + 30 * DateUtilities.ONE_DAY)); + return value; + } + + private static String replaceNoonValues(String value) { + Date date = new Date(); + date.setHours(12); + date.setMinutes(0); + date.setSeconds(0); + long time = date.getTime() / 1000l * 1000l; // chop milliseconds off + value = value.replace(VALUE_NOON_YESTERDAY, Long.toString(time - DateUtilities.ONE_DAY)); + value = value.replace(VALUE_NOON, Long.toString(time)); + value = value.replace(VALUE_NOON_TOMORROW, Long.toString(time + DateUtilities.ONE_DAY)); + value = value.replace(VALUE_NOON_DAY_AFTER, Long.toString(time + 2 * DateUtilities.ONE_DAY)); + value = value.replace(VALUE_NOON_NEXT_WEEK, Long.toString(time + 7 * DateUtilities.ONE_DAY)); + value = value.replace(VALUE_NOON_NEXT_MONTH, Long.toString(time + 30 * DateUtilities.ONE_DAY)); + return value; + } + } diff --git a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java index f3d185392..41502606c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java @@ -87,7 +87,7 @@ public final class CustomFilterExposer extends BroadcastReceiver implements Astr // stock filters String todayTitle = AndroidUtilities.capitalize(r.getString(R.string.today)); ContentValues todayValues = new ContentValues(); - todayValues.put(Task.DUE_DATE.name, PermaSql.VALUE_EOD); + todayValues.put(Task.DUE_DATE.name, PermaSql.VALUE_NOON); list[0] = new Filter(todayTitle, todayTitle, new QueryTemplate().where( diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationFragment.java b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationFragment.java index b8de894d6..a4a44cd4b 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationFragment.java @@ -39,8 +39,7 @@ import com.timsu.astrid.R; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.activity.AstridActivity; -import com.todoroo.astrid.activity.TaskListActivity; -import com.todoroo.astrid.activity.TaskListFragment; +import com.todoroo.astrid.activity.DisposableTaskListFragment; import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.repeats.RepeatControlSet; @@ -56,7 +55,7 @@ import com.todoroo.astrid.ui.NumberPicker; * @author timsu * */ -public class NotificationFragment extends TaskListFragment implements OnTimeSetListener, SnoozeCallback { +public class NotificationFragment extends DisposableTaskListFragment implements OnTimeSetListener, SnoozeCallback { // --- constants @@ -106,16 +105,6 @@ public class NotificationFragment extends TaskListFragment implements OnTimeSetL new ReminderDialog((AstridActivity) getActivity(), taskId, title).show(); } - @Override - public void onDetach() { - Activity activity = getActivity(); - if (activity instanceof TaskListActivity) { - TaskListActivity tla = (TaskListActivity) activity; - tla.getFragmentPagerAdapter().remove(filter); - } - super.onDetach(); - } - public static class SnoozeDialog extends FrameLayout implements DialogInterface.OnClickListener { LinearLayout snoozePicker; diff --git a/astrid/src/com/todoroo/astrid/activity/DisposableTaskListFragment.java b/astrid/src/com/todoroo/astrid/activity/DisposableTaskListFragment.java new file mode 100644 index 000000000..64c6f529b --- /dev/null +++ b/astrid/src/com/todoroo/astrid/activity/DisposableTaskListFragment.java @@ -0,0 +1,22 @@ +package com.todoroo.astrid.activity; + +import android.app.Activity; + +/** + * Task list fragment that will remove itself from the filterlist/fragment pager when it is detached + * @author Sam + * + */ +public class DisposableTaskListFragment extends TaskListFragment { + + @Override + public void onDetach() { + Activity activity = getActivity(); + if (activity instanceof TaskListActivity) { + TaskListActivity tla = (TaskListActivity) activity; + tla.getFragmentPagerAdapter().remove(filter); + } + super.onDetach(); + } + +} \ No newline at end of file