Deprecated the repeat after completion flag

pull/14/head
Sam Bosley 12 years ago
parent b707c33742
commit e30b71d416

@ -187,7 +187,7 @@ public final class Task extends RemoteModel {
// --- flags
/** whether repeat occurs relative to completion date instead of due date */
public static final int FLAG_REPEAT_AFTER_COMPLETION = 1 << 1;
@Deprecated public static final int FLAG_REPEAT_AFTER_COMPLETION = 1 << 1;
/** whether task is read-only */
@Deprecated public static final int FLAG_IS_READONLY = 1 << 2;
@ -505,6 +505,14 @@ public final class Task extends RemoteModel {
!(getValue(Task.IS_PUBLIC) == 1 && getValue(Task.USER_ID) != Task.USER_ID_SELF);
}
public boolean repeatAfterCompletion() {
return getValue(Task.RECURRENCE).contains("FROM=COMPLETION");
}
public String sanitizedRecurrence() {
return getValue(Task.RECURRENCE).replaceAll(";?FROM=[^;]*", ""); //$NON-NLS-1$//$NON-NLS-2$
}
/**
* Checks whether provided due date has a due time or only a date
*/

@ -508,7 +508,7 @@ public class ProducteevSyncProvider extends SyncProvider<ProducteevTaskContainer
remote.pdvTask.getValue(ProducteevTask.REPEATING_SETTING).length()>0));
boolean isAstridRepeating = local.task.containsNonNullValue(Task.RECURRENCE) &&
local.task.getValue(Task.RECURRENCE).length() > 0;
!TextUtils.isEmpty(local.task.getValue(Task.RECURRENCE));
if (isAstridRepeating && isPDVRepeating) {
// Astrid-repeat overrides PDV-repeat
@ -609,8 +609,7 @@ public class ProducteevSyncProvider extends SyncProvider<ProducteevTaskContainer
@Override
protected void write(ProducteevTaskContainer task) throws IOException {
if(task.task.isSaved()) {
Task local = PluginServices.getTaskService().fetchById(task.task.getId(), Task.COMPLETION_DATE, Task.FLAGS);
task.task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, local.getFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION));
Task local = PluginServices.getTaskService().fetchById(task.task.getId(), Task.COMPLETION_DATE);
if(task.task.isCompleted() && !local.isCompleted())
StatisticsService.reportEvent(StatisticsConstants.PDV_TASK_COMPLETED);
} else { // Set default reminders for remotely created tasks

@ -164,7 +164,7 @@ public class RepeatControlSet extends PopupControlSet {
@Override
public void readFromTask(Task task) {
super.readFromTask(task);
recurrence = model.getValue(Task.RECURRENCE);
recurrence = model.sanitizedRecurrence();
if(recurrence == null)
recurrence = "";
@ -251,7 +251,7 @@ public class RepeatControlSet extends PopupControlSet {
doRepeat = recurrence.length() > 0;
// read flag
if(model.getFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION))
if(model.repeatAfterCompletion())
type.setSelection(TYPE_COMPLETION_DATE);
else
type.setSelection(TYPE_DUE_DATE);
@ -367,21 +367,18 @@ public class RepeatControlSet extends PopupControlSet {
result = rrule.toIcal();
}
if (type.getSelectedItemPosition() == TYPE_COMPLETION_DATE) {
result = result + ";FROM=COMPLETION"; //$NON-NLS-1$
}
if (!result.equals(task.getValue(Task.RECURRENCE)))
task.putTransitory(TaskService.TRANS_REPEAT_CHANGED, true);
task.setValue(Task.RECURRENCE, result);
task.setValue(Task.REPEAT_UNTIL, repeatUntilValue);
switch(type.getSelectedItemPosition()) {
case TYPE_DUE_DATE:
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, false);
break;
case TYPE_COMPLETION_DATE:
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, true);
}
if(task.getFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION))
if(task.repeatAfterCompletion())
type.setSelection(1);
return null;
}

@ -50,13 +50,13 @@ public class RepeatDetailExposer extends BroadcastReceiver {
}
public String getTaskDetails(Context context, long id) {
Task task = PluginServices.getTaskService().fetchById(id, Task.FLAGS, Task.RECURRENCE);
Task task = PluginServices.getTaskService().fetchById(id, Task.RECURRENCE);
if(task == null)
return null;
Resources r = context.getResources();
String recurrence = task.getValue(Task.RECURRENCE);
String recurrence = task.sanitizedRecurrence();
if(recurrence != null && recurrence.length() > 0) {
RRule rrule;
try {
@ -86,7 +86,7 @@ public class RepeatDetailExposer extends BroadcastReceiver {
}
String detail;
if(task.getFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION))
if(task.repeatAfterCompletion())
detail = context.getString(R.string.repeat_detail_completion, interval);
else
detail = context.getString(R.string.repeat_detail_duedate, interval);

@ -56,11 +56,13 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver {
if(task == null || !task.isCompleted())
return;
String recurrence = task.getValue(Task.RECURRENCE);
String recurrence = task.sanitizedRecurrence();
boolean repeatAfterCompletion = task.repeatAfterCompletion();
if(recurrence != null && recurrence.length() > 0) {
long newDueDate;
try {
newDueDate = computeNextDueDate(task, recurrence);
newDueDate = computeNextDueDate(task, recurrence, repeatAfterCompletion);
if(newDueDate == -1)
return;
} catch (ParseException e) {
@ -114,8 +116,7 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver {
}
/** Compute next due date */
public static long computeNextDueDate(Task task, String recurrence) throws ParseException {
boolean repeatAfterCompletion = task.getFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION);
public static long computeNextDueDate(Task task, String recurrence, boolean repeatAfterCompletion) throws ParseException {
RRule rrule = initRRule(recurrence);
// initialize startDateAsDV

@ -1,5 +1,6 @@
package com.todoroo.astrid.tags;
import android.text.TextUtils;
import android.util.Log;
import com.todoroo.andlib.data.DatabaseDao;
@ -17,6 +18,7 @@ import com.todoroo.astrid.dao.UpdateDao;
import com.todoroo.astrid.dao.UserDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.Update;
@ -76,11 +78,11 @@ public class AstridNewSyncMigrator {
// --------------
// Then ensure that every remote model has a remote id, by generating one using the uuid generator for all those without one
// --------------
Query tagsWithoutUUIDQuery = Query.select(TagData.ID, TagData.REMOTE_ID).where(Criterion.all);
assertUUIDsExist(tagsWithoutUUIDQuery, new TagData(), tagDataDao, null);
Query tagsQuery = Query.select(TagData.ID, TagData.REMOTE_ID).where(Criterion.all);
assertUUIDsExist(tagsQuery, new TagData(), tagDataDao, null);
Query tasksWithoutUUIDQuery = Query.select(Task.ID, Task.REMOTE_ID, Task.FLAGS).where(Criterion.all);
assertUUIDsExist(tasksWithoutUUIDQuery, new Task(), taskDao, new UUIDAssertionExtras<Task>() {
Query tasksQuery = Query.select(Task.ID, Task.REMOTE_ID, Task.RECURRENCE, Task.FLAGS).where(Criterion.all);
assertUUIDsExist(tasksQuery, new Task(), taskDao, new UUIDAssertionExtras<Task>() {
@Override
public void beforeSave(Task instance) {
if (instance.getFlag(Task.FLAGS, Task.FLAG_IS_READONLY)) {
@ -92,6 +94,17 @@ public class AstridNewSyncMigrator {
instance.setFlag(Task.FLAGS, Task.FLAG_PUBLIC, false);
instance.setValue(Task.IS_PUBLIC, 1);
}
String recurrence = instance.getValue(Task.RECURRENCE);
if (!TextUtils.isEmpty(recurrence)) {
boolean repeatAfterCompletion = instance.getFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION);
instance.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, false);
recurrence = recurrence.replaceAll("BYDAY=;", "");
if (repeatAfterCompletion)
recurrence = recurrence + ";FROM=COMPLETION";
instance.setValue(Task.RECURRENCE, recurrence);
}
}
});
@ -147,7 +160,6 @@ public class AstridNewSyncMigrator {
}
Preferences.setBoolean(PREF_SYNC_MIGRATION, true);
}
@ -170,6 +182,7 @@ public class AstridNewSyncMigrator {
if (extras != null)
extras.beforeSave(instance);
instance.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
dao.saveExisting(instance);
}
} finally {

@ -309,7 +309,7 @@ public class DateChangedAlerts {
@SuppressWarnings("nls")
private static String getRecurrenceString(Context context, Task task) {
try {
RRule rrule = new RRule(task.getValue(Task.RECURRENCE));
RRule rrule = new RRule(task.sanitizedRecurrence());
String[] dateAbbrev = context.getResources().getStringArray(
R.array.repeat_interval);

@ -123,8 +123,6 @@ abstract public class AbstractSyncRepeatTests<REMOTE_MODEL> extends DatabaseTest
t.setValue(Task.TITLE, title);
long dueDate = DateUtilities.now() + ((completeBefore ? -1 : 1) * DateUtilities.ONE_DAY * 3);
dueDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, (dueDate / 1000L) * 1000L); // Strip milliseconds
if (fromCompletion)
t.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, true);
t.setValue(Task.DUE_DATE, dueDate);
@ -134,6 +132,11 @@ abstract public class AbstractSyncRepeatTests<REMOTE_MODEL> extends DatabaseTest
int interval = frequency.equals(Frequency.MINUTELY) ? 100: 2;
rrule.setInterval(interval);
}
String result = rrule.toIcal();
if (fromCompletion)
result = result + ";FROM=COMPLETION";
t.setValue(Task.RECURRENCE, rrule.toIcal());
taskDao.save(t);

@ -140,8 +140,6 @@ public class RepeatTestsActFmSync extends AbstractSyncRepeatTests<Task> {
t.setValue(Task.TITLE, title);
long dueDate = DateUtilities.now() + ((completeBefore ? -1 : 1) * DateUtilities.ONE_DAY * 3);
dueDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, (dueDate / 1000L) * 1000L); // Strip milliseconds
if (fromCompletion)
t.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, true);
t.setValue(Task.DUE_DATE, dueDate);
@ -151,6 +149,11 @@ public class RepeatTestsActFmSync extends AbstractSyncRepeatTests<Task> {
int interval = 5;
rrule.setInterval(interval);
}
String result = rrule.toIcal();
if (fromCompletion)
result = result + ";FROM=COMPLETION";
t.setValue(Task.RECURRENCE, rrule.toIcal());
taskDao.save(t);

@ -42,7 +42,6 @@ public class AdvancedRepeatTests extends TodorooTestCase {
// --- date with time tests
public void testDueDateSpecificTime() throws ParseException {
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, false);
buildRRule(1, Frequency.DAILY);
// test specific day & time
@ -50,12 +49,11 @@ public class AdvancedRepeatTests extends TodorooTestCase {
task.setValue(Task.DUE_DATE, dayWithTime);
long nextDayWithTime = dayWithTime + DateUtilities.ONE_DAY;
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal(), false);
assertDateTimeEquals(nextDayWithTime, nextDueDate);
}
public void testCompletionDateSpecificTime() throws ParseException {
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, true);
buildRRule(1, Frequency.DAILY);
// test specific day & time
@ -70,7 +68,7 @@ public class AdvancedRepeatTests extends TodorooTestCase {
nextDayWithTimeLong += DateUtilities.ONE_DAY;
nextDayWithTimeLong = nextDayWithTimeLong / 1000L * 1000;
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal(), true);
assertDateTimeEquals(nextDayWithTimeLong, nextDueDate);
}
@ -78,89 +76,85 @@ public class AdvancedRepeatTests extends TodorooTestCase {
/** test multiple days per week - DUE DATE */
public void testDueDateInPastSingleWeekMultiDay() throws Exception {
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, false);
buildRRule(1, Frequency.WEEKLY, Weekday.MO, Weekday.WE, Weekday.FR);
setTaskDueDate(THIS, Calendar.SUNDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, THIS, Calendar.MONDAY);
setTaskDueDate(THIS, Calendar.MONDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, THIS, Calendar.WEDNESDAY);
setTaskDueDate(THIS, Calendar.FRIDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, THIS, Calendar.MONDAY);
}
/** test single day repeats - DUE DATE */
public void testDueDateSingleDay() throws Exception {
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, false);
buildRRule(1, Frequency.WEEKLY, Weekday.MO);
setTaskDueDate(PREV_PREV, Calendar.MONDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, NEXT, Calendar.MONDAY);
setTaskDueDate(PREV_PREV, Calendar.FRIDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, THIS, Calendar.MONDAY);
setTaskDueDate(PREV, Calendar.MONDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, NEXT, Calendar.MONDAY);
setTaskDueDate(PREV, Calendar.FRIDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, THIS, Calendar.MONDAY);
setTaskDueDate(THIS, Calendar.SUNDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, THIS, Calendar.MONDAY);
setTaskDueDate(THIS, Calendar.MONDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, NEXT, Calendar.MONDAY);
}
/** test multiple days per week - DUE DATE */
public void testDueDateSingleWeekMultiDay() throws Exception {
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, false);
buildRRule(1, Frequency.WEEKLY, Weekday.MO, Weekday.WE, Weekday.FR);
setTaskDueDate(THIS, Calendar.SUNDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, THIS, Calendar.MONDAY);
setTaskDueDate(THIS, Calendar.MONDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, THIS, Calendar.WEDNESDAY);
setTaskDueDate(THIS, Calendar.FRIDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, THIS, Calendar.MONDAY);
}
/** test multiple days per week, multiple intervals - DUE DATE */
public void testDueDateMultiWeekMultiDay() throws Exception {
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, false);
buildRRule(2, Frequency.WEEKLY, Weekday.MO, Weekday.WE, Weekday.FR);
setTaskDueDate(THIS, Calendar.SUNDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, NEXT, Calendar.MONDAY);
setTaskDueDate(THIS, Calendar.MONDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, THIS, Calendar.WEDNESDAY);
setTaskDueDate(THIS, Calendar.FRIDAY);
computeNextDueDate();
computeNextDueDate(false);
assertDueDate(nextDueDate, NEXT, Calendar.MONDAY);
}
@ -168,11 +162,10 @@ public class AdvancedRepeatTests extends TodorooTestCase {
/** test multiple days per week - COMPLETE DATE */
public void testCompleteDateSingleWeek() throws Exception {
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, true);
for(Weekday wday : Weekday.values()) {
buildRRule(1, Frequency.WEEKLY, wday);
computeNextDueDate();
computeNextDueDate(true);
long expected = getDate(DateUtilities.now() + DateUtilities.ONE_DAY, THIS, wday.javaDayNum);
nextDueDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY, nextDueDate);
assertDateEquals(nextDueDate, expected);
@ -186,7 +179,7 @@ public class AdvancedRepeatTests extends TodorooTestCase {
buildRRule(1, Frequency.WEEKLY, wday1, wday2);
long nextOne = getDate(DateUtilities.now() + DateUtilities.ONE_DAY, THIS, wday1.javaDayNum);
long nextTwo = getDate(DateUtilities.now() + DateUtilities.ONE_DAY, THIS, wday2.javaDayNum);
computeNextDueDate();
computeNextDueDate(true);
nextDueDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY, nextDueDate);
assertDateEquals(nextDueDate, Math.min(nextOne, nextTwo));
}
@ -195,11 +188,10 @@ public class AdvancedRepeatTests extends TodorooTestCase {
/** test multiple days per week, multiple intervals - COMPLETE DATE */
public void testCompleteDateMultiWeek() throws Exception {
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, true);
for(Weekday wday : Weekday.values()) {
buildRRule(2, Frequency.WEEKLY, wday);
computeNextDueDate();
computeNextDueDate(true);
long expected = getDate(DateUtilities.now() + DateUtilities.ONE_DAY, NEXT, wday.javaDayNum);
nextDueDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY, nextDueDate);
assertDateEquals(nextDueDate, expected);
@ -213,7 +205,7 @@ public class AdvancedRepeatTests extends TodorooTestCase {
buildRRule(2, Frequency.WEEKLY, wday1, wday2);
long nextOne = getDate(DateUtilities.now() + DateUtilities.ONE_DAY, NEXT, wday1.javaDayNum);
long nextTwo = getDate(DateUtilities.now() + DateUtilities.ONE_DAY, NEXT, wday2.javaDayNum);
computeNextDueDate();
computeNextDueDate(true);
nextDueDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY, nextDueDate);
assertDateEquals(nextDueDate, Math.min(nextOne, nextTwo));
}
@ -222,8 +214,8 @@ public class AdvancedRepeatTests extends TodorooTestCase {
// --- helpers
private void computeNextDueDate() throws ParseException{
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
private void computeNextDueDate(boolean fromComplete) throws ParseException{
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal(), fromComplete);
}
private void buildRRule(int interval, Frequency freq, Weekday... weekdays) {

@ -133,8 +133,6 @@ public class NewRepeatTests<REMOTE_MODEL> extends DatabaseTestCase {
adjustDate.setSeconds(1);
dueDate = adjustDate.getTime();
dueDate = (dueDate / 1000L) * 1000L; // Strip milliseconds
if (fromCompletion)
t.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, true);
t.setValue(Task.DUE_DATE, dueDate);
@ -144,6 +142,10 @@ public class NewRepeatTests<REMOTE_MODEL> extends DatabaseTestCase {
int interval = 2;
rrule.setInterval(interval);
}
String result = rrule.toIcal();
if (fromCompletion)
result = result + ";FROM=COMPLETION";
t.setValue(Task.RECURRENCE, rrule.toIcal());
taskDao.save(t);

@ -36,7 +36,6 @@ public class RepeatAfterCompleteTests extends TodorooTestCase {
public void testSubDailyFreqs() throws ParseException {
task.setValue(Task.DUE_DATE, DateUtilities.now() - DateUtilities.ONE_WEEK);
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, true);
for(Frequency freq : Frequency.values()) {
long interval = -1;
@ -50,10 +49,10 @@ public class RepeatAfterCompleteTests extends TodorooTestCase {
}
buildRRule(1, freq);
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal(), true);
buildRRule(6, freq);
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal(), true);
assertDateTimeEquals(freq.toString() + "x6", DateUtilities.now() + 6 * interval, nextDueDate);
task.setValue(Task.DUE_DATE, nextDueDate);
assertTrue(task.hasDueTime());
@ -64,7 +63,6 @@ public class RepeatAfterCompleteTests extends TodorooTestCase {
task.setValue(Task.DUE_DATE,
Task.createDueDate(Task.URGENCY_SPECIFIC_DAY,
DateUtilities.now() - DateUtilities.ONE_WEEK));
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, true);
for(int interval = 1; interval < 7; interval++) {
for(Frequency freq : Frequency.values()) {
@ -83,7 +81,7 @@ public class RepeatAfterCompleteTests extends TodorooTestCase {
}
buildRRule(interval, freq);
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal(), true);
assertDateEquals(freq.toString() + "x" + interval, next, nextDueDate);
task.setValue(Task.DUE_DATE, nextDueDate);
assertFalse(task.hasDueTime());
@ -94,8 +92,7 @@ public class RepeatAfterCompleteTests extends TodorooTestCase {
public void testTimeZoneLate() throws ParseException {
TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
task.setValue(Task.DUE_DATE, DateUtilities.now() + DateUtilities.ONE_WEEK);
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, true);
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal(), true);
long expected = Task.createDueDate(Task.URGENCY_TOMORROW, 0);
assertDateEquals("tomorrow", expected, nextDueDate);

Loading…
Cancel
Save