From 897a5dab81ef2c67b2dba425a96e8e562361b2ac Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Wed, 17 Apr 2013 14:44:05 -0700 Subject: [PATCH] Minor bugfix to monthly repeating logic --- .../astrid/repeats/RepeatTaskCompleteListener.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java index c69be879e..500e2c981 100644 --- a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java +++ b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java @@ -128,7 +128,7 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver { else if(rrule.getFreq() == Frequency.WEEKLY && rrule.getByDay().size() > 0 && repeatAfterCompletion) return handleWeeklyRepeatAfterComplete(rrule, original, task.hasDueTime()); else if (rrule.getFreq() == Frequency.MONTHLY) - return handleMonthlyRepeat(original, startDateAsDV, rrule); + return handleMonthlyRepeat(original, startDateAsDV, task.hasDueTime(), rrule); else return invokeRecurrence(rrule, original, startDateAsDV); } @@ -155,7 +155,7 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver { return Task.createDueDate(Task.URGENCY_SPECIFIC_DAY, time); } - private static long handleMonthlyRepeat(Date original, DateValue startDateAsDV, RRule rrule) { + private static long handleMonthlyRepeat(Date original, DateValue startDateAsDV, boolean hasDueTime, RRule rrule) { if (DateUtilities.isEndOfMonth(original)) { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(original.getTime()); @@ -164,7 +164,11 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver { cal.add(Calendar.MONTH, interval); cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE)); - return cal.getTimeInMillis(); + long time = cal.getTimeInMillis(); + if (hasDueTime) + return Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, time); + else + return Task.createDueDate(Task.URGENCY_SPECIFIC_DAY, time); } else { return invokeRecurrence(rrule, original, startDateAsDV); }