Move TaskService.createWithValues to TaskCreator

pull/467/head
Alex Baker 9 years ago
parent f96490641a
commit 7348ea881a

@ -25,7 +25,7 @@ import static junit.framework.Assert.assertEquals;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public class QuickAddMarkupTest extends DatabaseTestCase { public class QuickAddMarkupTest extends DatabaseTestCase {
@Inject TaskService taskService; @Inject TaskCreator taskCreator;
@Override @Override
protected void inject(TestComponent component) { protected void inject(TestComponent component) {
@ -102,11 +102,10 @@ public class QuickAddMarkupTest extends DatabaseTestCase {
task = new Task(); task = new Task();
task.setTitle(title); task.setTitle(title);
tags.clear(); tags.clear();
taskService.parseQuickAddMarkup(task, tags); taskCreator.parseQuickAddMarkup(task, tags);
} }
private void assertImportanceIs(int importance) { private void assertImportanceIs(int importance) {
assertEquals(importance, (int)task.getImportance()); assertEquals(importance, (int)task.getImportance());
} }
} }

@ -9,6 +9,7 @@ import android.support.test.runner.AndroidJUnit4;
import com.google.ical.values.Frequency; import com.google.ical.values.Frequency;
import com.google.ical.values.RRule; import com.google.ical.values.RRule;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.test.DatabaseTestCase; import com.todoroo.astrid.test.DatabaseTestCase;
@ -35,9 +36,10 @@ import static org.tasks.date.DateTimeUtils.newDateTime;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public class TitleParserTest extends DatabaseTestCase { public class TitleParserTest extends DatabaseTestCase {
@Inject TaskService taskService; @Inject TaskDao taskDao;
@Inject TagService tagService; @Inject TagService tagService;
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject TaskCreator taskCreator;
@Override @Override
public void setUp() { public void setUp() {
@ -56,7 +58,7 @@ public class TitleParserTest extends DatabaseTestCase {
Task task = new Task(); Task task = new Task();
Task nothing = new Task(); Task nothing = new Task();
task.setTitle("Jog"); task.setTitle("Jog");
taskService.save(task); taskDao.save(task);
assertFalse(task.hasDueTime()); assertFalse(task.hasDueTime());
assertFalse(task.hasDueDate()); assertFalse(task.hasDueDate());
assertEquals(task.getRecurrence(), nothing.getRecurrence()); assertEquals(task.getRecurrence(), nothing.getRecurrence());
@ -179,7 +181,7 @@ public class TitleParserTest extends DatabaseTestCase {
private void insertTitleAddTask(String title, Task task) { private void insertTitleAddTask(String title, Task task) {
task.clear(); task.clear();
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
} }
@ -191,7 +193,7 @@ public class TitleParserTest extends DatabaseTestCase {
String title = "Jog today"; String title = "Jog today";
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
DateTime date = newDateTime(task.getDueDate()); DateTime date = newDateTime(task.getDueDate());
assertEquals(date.getDayOfWeek(), today.get(Calendar.DAY_OF_WEEK)); assertEquals(date.getDayOfWeek(), today.get(Calendar.DAY_OF_WEEK));
//Calendar starts 1-6, date.getDay() starts at 0 //Calendar starts 1-6, date.getDay() starts at 0
@ -199,7 +201,7 @@ public class TitleParserTest extends DatabaseTestCase {
task = new Task(); task = new Task();
title = "Jog tomorrow"; title = "Jog tomorrow";
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
date = newDateTime(task.getDueDate()); date = newDateTime(task.getDueDate());
assertEquals((date.getDayOfWeek()) % 7, (today.get(Calendar.DAY_OF_WEEK)+1) % 7); assertEquals((date.getDayOfWeek()) % 7, (today.get(Calendar.DAY_OF_WEEK)+1) % 7);
@ -226,14 +228,14 @@ public class TitleParserTest extends DatabaseTestCase {
task = new Task(); task = new Task();
title = "Jog "+ days[i]; title = "Jog "+ days[i];
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
date = newDateTime(task.getDueDate()); date = newDateTime(task.getDueDate());
assertEquals(date.getDayOfWeek(), i + 1); assertEquals(date.getDayOfWeek(), i + 1);
task = new Task(); task = new Task();
title = "Jog "+ abrevDays[i]; title = "Jog "+ abrevDays[i];
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
date = newDateTime(task.getDueDate()); date = newDateTime(task.getDueDate());
assertEquals(date.getDayOfWeek(), i + 1); assertEquals(date.getDayOfWeek(), i + 1);
} }
@ -258,14 +260,14 @@ public class TitleParserTest extends DatabaseTestCase {
task = new Task(); task = new Task();
String title = "Jog " + acceptedString; String title = "Jog " + acceptedString;
task.setTitle(title); //test at end of task. should set importance. task.setTitle(title); //test at end of task. should set importance.
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_NONE); assertEquals((int)task.getImportance(), Task.IMPORTANCE_NONE);
} }
for (String acceptedString:acceptedStrings){ for (String acceptedString:acceptedStrings){
task = new Task(); task = new Task();
String title = acceptedString + " jog"; String title = acceptedString + " jog";
task.setTitle(title); //test at beginning of task. should not set importance. task.setTitle(title); //test at beginning of task. should not set importance.
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertNotSame(task.getImportance(),Task.IMPORTANCE_NONE); assertNotSame(task.getImportance(),Task.IMPORTANCE_NONE);
} }
} }
@ -286,23 +288,23 @@ public class TitleParserTest extends DatabaseTestCase {
for (String acceptedStringAtEnd:acceptedStringsAtEnd){ for (String acceptedStringAtEnd:acceptedStringsAtEnd){
task = new Task(); task = new Task();
task.setTitle("Jog " + acceptedStringAtEnd); //test at end of task. should set importance. task.setTitle("Jog " + acceptedStringAtEnd); //test at end of task. should set importance.
taskService.save(task); taskDao.save(task);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_SHOULD_DO); assertEquals((int)task.getImportance(), Task.IMPORTANCE_SHOULD_DO);
} }
for (String acceptedStringAtEnd:acceptedStringsAtEnd){ for (String acceptedStringAtEnd:acceptedStringsAtEnd){
task = new Task(); task = new Task();
task.setTitle(acceptedStringAtEnd + " jog"); //test at beginning of task. should not set importance. task.setTitle(acceptedStringAtEnd + " jog"); //test at beginning of task. should not set importance.
taskService.save(task); taskDao.save(task);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_SHOULD_DO); assertEquals((int)task.getImportance(), Task.IMPORTANCE_SHOULD_DO);
} }
for (String acceptedStringAnywhere:acceptedStringsAnywhere){ for (String acceptedStringAnywhere:acceptedStringsAnywhere){
task = new Task(); task = new Task();
task.setTitle("Jog " + acceptedStringAnywhere); //test at end of task. should set importance. task.setTitle("Jog " + acceptedStringAnywhere); //test at end of task. should set importance.
taskService.save(task); taskDao.save(task);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_SHOULD_DO); assertEquals((int)task.getImportance(), Task.IMPORTANCE_SHOULD_DO);
task.setTitle(acceptedStringAnywhere + " jog"); //test at beginning of task. should set importance. task.setTitle(acceptedStringAnywhere + " jog"); //test at beginning of task. should set importance.
taskService.save(task); taskDao.save(task);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_SHOULD_DO); assertEquals((int)task.getImportance(), Task.IMPORTANCE_SHOULD_DO);
} }
} }
@ -324,25 +326,25 @@ public class TitleParserTest extends DatabaseTestCase {
task = new Task(); task = new Task();
String title = "Jog " + acceptedStringAtEnd; String title = "Jog " + acceptedStringAtEnd;
task.setTitle(title); //test at end of task. should set importance. task.setTitle(title); //test at end of task. should set importance.
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_MUST_DO); assertEquals((int)task.getImportance(), Task.IMPORTANCE_MUST_DO);
task = new Task(); task = new Task();
title = acceptedStringAtEnd + " jog"; title = acceptedStringAtEnd + " jog";
task.setTitle(title); //test at beginning of task. should not set importance. task.setTitle(title); //test at beginning of task. should not set importance.
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertNotSame(task.getImportance(), Task.IMPORTANCE_MUST_DO); assertNotSame(task.getImportance(), Task.IMPORTANCE_MUST_DO);
} }
for (String acceptedStringAnywhere:acceptedStringsAnywhere){ for (String acceptedStringAnywhere:acceptedStringsAnywhere){
task = new Task(); task = new Task();
String title = "Jog " + acceptedStringAnywhere; String title = "Jog " + acceptedStringAnywhere;
task.setTitle(title); //test at end of task. should set importance. task.setTitle(title); //test at end of task. should set importance.
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_MUST_DO); assertEquals((int)task.getImportance(), Task.IMPORTANCE_MUST_DO);
title = acceptedStringAnywhere + " jog"; title = acceptedStringAnywhere + " jog";
task.setTitle(title); //test at beginning of task. should set importance. task.setTitle(title); //test at beginning of task. should set importance.
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_MUST_DO); assertEquals((int)task.getImportance(), Task.IMPORTANCE_MUST_DO);
} }
} }
@ -367,25 +369,25 @@ public class TitleParserTest extends DatabaseTestCase {
task = new Task(); task = new Task();
String title = "Jog " + acceptedStringAtEnd; String title = "Jog " + acceptedStringAtEnd;
task.setTitle(title); //test at end of task. should set importance. task.setTitle(title); //test at end of task. should set importance.
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_DO_OR_DIE); assertEquals((int)task.getImportance(), Task.IMPORTANCE_DO_OR_DIE);
task = new Task(); task = new Task();
title = acceptedStringAtEnd + " jog"; title = acceptedStringAtEnd + " jog";
task.setTitle(title); //test at beginning of task. should not set importance. task.setTitle(title); //test at beginning of task. should not set importance.
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertNotSame(task.getImportance(), Task.IMPORTANCE_DO_OR_DIE); assertNotSame(task.getImportance(), Task.IMPORTANCE_DO_OR_DIE);
} }
for (String acceptedStringAnywhere:acceptedStringsAnywhere){ for (String acceptedStringAnywhere:acceptedStringsAnywhere){
task = new Task(); task = new Task();
String title = "Jog " + acceptedStringAnywhere; String title = "Jog " + acceptedStringAnywhere;
task.setTitle(title); //test at end of task. should set importance. task.setTitle(title); //test at end of task. should set importance.
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_DO_OR_DIE); assertEquals((int)task.getImportance(), Task.IMPORTANCE_DO_OR_DIE);
title = acceptedStringAnywhere + " jog"; title = acceptedStringAnywhere + " jog";
task.setTitle(title); //test at beginning of task. should set importance. task.setTitle(title); //test at beginning of task. should set importance.
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_DO_OR_DIE); assertEquals((int)task.getImportance(), Task.IMPORTANCE_DO_OR_DIE);
} }
} }
@ -400,7 +402,7 @@ public class TitleParserTest extends DatabaseTestCase {
Task task = new Task(); Task task = new Task();
String title = "Jog daily"; String title = "Jog daily";
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
RRule rrule = new RRule(); RRule rrule = new RRule();
rrule.setFreq(Frequency.DAILY); rrule.setFreq(Frequency.DAILY);
rrule.setInterval(1); rrule.setInterval(1);
@ -410,7 +412,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every day"; title = "Jog every day";
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal()); assertEquals(task.getRecurrence(), rrule.toIcal());
assertFalse(task.hasDueTime()); assertFalse(task.hasDueTime());
assertFalse(task.hasDueDate()); assertFalse(task.hasDueDate());
@ -419,7 +421,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every " + i + " days."; title = "Jog every " + i + " days.";
task.setTitle(title); task.setTitle(title);
rrule.setInterval(i); rrule.setInterval(i);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal()); assertEquals(task.getRecurrence(), rrule.toIcal());
assertFalse(task.hasDueTime()); assertFalse(task.hasDueTime());
assertFalse(task.hasDueDate()); assertFalse(task.hasDueDate());
@ -434,7 +436,7 @@ public class TitleParserTest extends DatabaseTestCase {
Task task = new Task(); Task task = new Task();
String title = "Jog weekly"; String title = "Jog weekly";
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
RRule rrule = new RRule(); RRule rrule = new RRule();
rrule.setFreq(Frequency.WEEKLY); rrule.setFreq(Frequency.WEEKLY);
rrule.setInterval(1); rrule.setInterval(1);
@ -444,7 +446,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every week"; title = "Jog every week";
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal()); assertEquals(task.getRecurrence(), rrule.toIcal());
assertFalse(task.hasDueTime()); assertFalse(task.hasDueTime());
assertFalse(task.hasDueDate()); assertFalse(task.hasDueDate());
@ -453,7 +455,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every " + i + " weeks"; title = "Jog every " + i + " weeks";
task.setTitle(title); task.setTitle(title);
rrule.setInterval(i); rrule.setInterval(i);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal()); assertEquals(task.getRecurrence(), rrule.toIcal());
assertFalse(task.hasDueTime()); assertFalse(task.hasDueTime());
assertFalse(task.hasDueDate()); assertFalse(task.hasDueDate());
@ -467,7 +469,7 @@ public class TitleParserTest extends DatabaseTestCase {
Task task = new Task(); Task task = new Task();
String title = "Jog monthly"; String title = "Jog monthly";
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
RRule rrule = new RRule(); RRule rrule = new RRule();
rrule.setFreq(Frequency.MONTHLY); rrule.setFreq(Frequency.MONTHLY);
rrule.setInterval(1); rrule.setInterval(1);
@ -477,7 +479,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every month"; title = "Jog every month";
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal()); assertEquals(task.getRecurrence(), rrule.toIcal());
assertFalse(task.hasDueTime()); assertFalse(task.hasDueTime());
assertFalse(task.hasDueDate()); assertFalse(task.hasDueDate());
@ -486,7 +488,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every " + i + " months"; title = "Jog every " + i + " months";
task.setTitle(title); task.setTitle(title);
rrule.setInterval(i); rrule.setInterval(i);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal()); assertEquals(task.getRecurrence(), rrule.toIcal());
assertFalse(task.hasDueTime()); assertFalse(task.hasDueTime());
assertFalse(task.hasDueDate()); assertFalse(task.hasDueDate());
@ -499,7 +501,7 @@ public class TitleParserTest extends DatabaseTestCase {
Task task = new Task(); Task task = new Task();
String title = "Jog daily starting from today"; String title = "Jog daily starting from today";
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
RRule rrule = new RRule(); RRule rrule = new RRule();
rrule.setFreq(Frequency.DAILY); rrule.setFreq(Frequency.DAILY);
rrule.setInterval(1); rrule.setInterval(1);
@ -510,7 +512,7 @@ public class TitleParserTest extends DatabaseTestCase {
task.clearValue(Task.UUID); task.clearValue(Task.UUID);
title = "Jog every day starting from today"; title = "Jog every day starting from today";
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal()); assertEquals(task.getRecurrence(), rrule.toIcal());
assertTrue(task.hasDueDate()); assertTrue(task.hasDueDate());
@ -518,7 +520,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every " + i + " days starting from today"; title = "Jog every " + i + " days starting from today";
task.setTitle(title); task.setTitle(title);
rrule.setInterval(i); rrule.setInterval(i);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal()); assertEquals(task.getRecurrence(), rrule.toIcal());
assertTrue(task.hasDueDate()); assertTrue(task.hasDueDate());
task = new Task(); task = new Task();
@ -530,7 +532,7 @@ public class TitleParserTest extends DatabaseTestCase {
Task task = new Task(); Task task = new Task();
String title = "Jog weekly starting from today"; String title = "Jog weekly starting from today";
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
RRule rrule = new RRule(); RRule rrule = new RRule();
rrule.setFreq(Frequency.WEEKLY); rrule.setFreq(Frequency.WEEKLY);
rrule.setInterval(1); rrule.setInterval(1);
@ -541,7 +543,7 @@ public class TitleParserTest extends DatabaseTestCase {
task.clearValue(Task.UUID); task.clearValue(Task.UUID);
title = "Jog every week starting from today"; title = "Jog every week starting from today";
task.setTitle(title); task.setTitle(title);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal()); assertEquals(task.getRecurrence(), rrule.toIcal());
assertTrue(task.hasDueDate()); assertTrue(task.hasDueDate());
@ -549,7 +551,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every " + i + " weeks starting from today"; title = "Jog every " + i + " weeks starting from today";
task.setTitle(title); task.setTitle(title);
rrule.setInterval(i); rrule.setInterval(i);
taskService.createWithValues(task, null, title); taskCreator.createWithValues(task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal()); assertEquals(task.getRecurrence(), rrule.toIcal());
assertTrue(task.hasDueDate()); assertTrue(task.hasDueDate());
task = new Task(); task = new Task();

@ -19,7 +19,6 @@ import android.view.View;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import org.tasks.activities.TagSettingsActivity;
import com.todoroo.astrid.actfm.TagViewFragment; import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
@ -28,13 +27,14 @@ import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.api.TagFilter; import com.todoroo.astrid.api.TagFilter;
import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.GtasksList; import com.todoroo.astrid.gtasks.GtasksList;
import com.todoroo.astrid.gtasks.GtasksListFragment; import com.todoroo.astrid.gtasks.GtasksListFragment;
import com.todoroo.astrid.gtasks.GtasksListService; import com.todoroo.astrid.gtasks.GtasksListService;
import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.repeats.RepeatControlSet;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskCreator;
import com.todoroo.astrid.subtasks.SubtasksHelper; import com.todoroo.astrid.subtasks.SubtasksHelper;
import com.todoroo.astrid.subtasks.SubtasksListFragment; import com.todoroo.astrid.subtasks.SubtasksListFragment;
import com.todoroo.astrid.subtasks.SubtasksTagListFragment; import com.todoroo.astrid.subtasks.SubtasksTagListFragment;
@ -42,6 +42,7 @@ import com.todoroo.astrid.timers.TimerControlSet;
import org.tasks.Broadcaster; import org.tasks.Broadcaster;
import org.tasks.R; import org.tasks.R;
import org.tasks.activities.TagSettingsActivity;
import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking; import org.tasks.analytics.Tracking;
import org.tasks.dialogs.SortDialog; import org.tasks.dialogs.SortDialog;
@ -83,7 +84,6 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject SubtasksHelper subtasksHelper; @Inject SubtasksHelper subtasksHelper;
@Inject TaskService taskService;
@Inject RepeatConfirmationReceiver repeatConfirmationReceiver; @Inject RepeatConfirmationReceiver repeatConfirmationReceiver;
@Inject DefaultFilterProvider defaultFilterProvider; @Inject DefaultFilterProvider defaultFilterProvider;
@Inject GtasksListService gtasksListService; @Inject GtasksListService gtasksListService;
@ -93,6 +93,8 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
@Inject ThemeCache themeCache; @Inject ThemeCache themeCache;
@Inject SyncAdapterHelper syncAdapterHelper; @Inject SyncAdapterHelper syncAdapterHelper;
@Inject Tracker tracker; @Inject Tracker tracker;
@Inject TaskCreator taskCreator;
@Inject TaskDao taskDao;
@BindView(R.id.drawer_layout) DrawerLayout drawerLayout; @BindView(R.id.drawer_layout) DrawerLayout drawerLayout;
@ -417,7 +419,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
Task model = null; Task model = null;
if (taskId> -1L) { if (taskId> -1L) {
model = taskService.fetchById(taskId, Task.PROPERTIES); model = taskDao.fetch(taskId, Task.PROPERTIES);
} }
// not found by id or was never passed an id // not found by id or was never passed an id
@ -434,7 +436,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
// oops, can't serialize // oops, can't serialize
Timber.e(e, e.getMessage()); Timber.e(e, e.getMessage());
} }
model = taskService.createWithValues(values, null); model = taskCreator.createWithValues(values, null);
} }
return model; return model;

@ -344,7 +344,7 @@ public class TaskListFragment extends InjectingListFragment implements
} }
public Task addTask(String title) { public Task addTask(String title) {
return taskService.createWithValues(filter.valuesForNewTasks, title); return taskCreator.createWithValues(filter.valuesForNewTasks, title);
} }
@Override @Override

@ -4,25 +4,53 @@ import android.content.ContentValues;
import android.net.Uri; import android.net.Uri;
import android.text.TextUtils; import android.text.TextUtils;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.SyncFlags; import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gcal.GCalHelper; import com.todoroo.astrid.gcal.GCalHelper;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.utility.TitleParser;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import java.util.ArrayList;
import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import timber.log.Timber;
public class TaskCreator { public class TaskCreator {
private final TaskService taskService; private final TaskService taskService;
private final GCalHelper gcalHelper; private final GCalHelper gcalHelper;
private final Preferences preferences; private final Preferences preferences;
private final MetadataDao metadataDao;
private final TagDataDao tagDataDao;
private final TaskDao taskDao;
private final TagService tagService;
@Inject @Inject
public TaskCreator(TaskService taskService, GCalHelper gcalHelper, Preferences preferences) { public TaskCreator(TaskService taskService, GCalHelper gcalHelper, Preferences preferences,
MetadataDao metadataDao, TagDataDao tagDataDao, TaskDao taskDao,
TagService tagService) {
this.taskService = taskService; this.taskService = taskService;
this.gcalHelper = gcalHelper; this.gcalHelper = gcalHelper;
this.preferences = preferences; this.preferences = preferences;
this.metadataDao = metadataDao;
this.tagDataDao = tagDataDao;
this.taskDao = taskDao;
this.tagService = tagService;
} }
public Task basicQuickAddTask(String title) { public Task basicQuickAddTask(String title) {
@ -32,7 +60,7 @@ public class TaskCreator {
title = title.trim(); title = title.trim();
Task task = taskService.createWithValues(null, title); Task task = createWithValues(null, title);
addToCalendar(task); addToCalendar(task);
return task; return task;
@ -47,4 +75,102 @@ public class TaskCreator {
taskService.save(task); taskService.save(task);
} }
} }
/**
* Create task from the given content values, saving it. This version
* doesn't need to start with a base task model.
*/
public Task createWithValues(ContentValues values, String title) {
return createWithValues(new Task(), values, title);
}
Task createWithValues(Task task, ContentValues values, String title) {
if (title != null) {
task.setTitle(title.trim());
}
ArrayList<String> tags = new ArrayList<>();
try {
parseQuickAddMarkup(task, tags);
} catch (Throwable e) {
Timber.e(e, e.getMessage());
}
ContentValues forMetadata = null;
if (values != null && values.size() > 0) {
ContentValues forTask = new ContentValues();
forMetadata = new ContentValues();
outer: for (Map.Entry<String, Object> item : values.valueSet()) {
String key = item.getKey();
Object value = item.getValue();
if (value instanceof String) {
value = PermaSql.replacePlaceholders((String) value);
}
for (Property<?> property : Metadata.PROPERTIES) {
if (property.name.equals(key)) {
AndroidUtilities.putInto(forMetadata, key, value);
continue outer;
}
}
AndroidUtilities.putInto(forTask, key, value);
}
task.mergeWithoutReplacement(forTask);
}
saveWithoutPublishingFilterUpdate(task);
for(String tag : tags) {
createLink(task, tag);
}
if (forMetadata != null && forMetadata.size() > 0) {
Metadata metadata = new Metadata();
metadata.setTask(task.getId());
metadata.mergeWith(forMetadata);
if (TaskToTagMetadata.KEY.equals(metadata.getKey())) {
if (metadata.containsNonNullValue(TaskToTagMetadata.TAG_UUID) && !RemoteModel.NO_UUID.equals(metadata.getValue(TaskToTagMetadata.TAG_UUID))) {
// This is more efficient
createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME), metadata.getValue(TaskToTagMetadata.TAG_UUID));
} else {
// This is necessary for backwards compatibility
createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME));
}
} else {
metadataDao.persist(metadata);
}
}
return task;
}
private void saveWithoutPublishingFilterUpdate(Task item) {
taskDao.save(item);
}
private void createLink(Task task, String tagName) {
TagData tagData = tagDataDao.getTagByName(tagName, TagData.NAME, TagData.UUID);
if (tagData == null) {
tagData = new TagData();
tagData.setName(tagName);
tagDataDao.persist(tagData);
}
createLink(task, tagData.getName(), tagData.getUUID());
}
private void createLink(Task task, String tagName, String tagUuid) {
Metadata link = TaskToTagMetadata.newTagMetadata(task.getId(), task.getUuid(), tagName, tagUuid);
if (metadataDao.update(Criterion.and(MetadataDao.MetadataCriteria.byTaskAndwithKey(task.getId(), TaskToTagMetadata.KEY),
TaskToTagMetadata.TASK_UUID.eq(task.getUUID()), TaskToTagMetadata.TAG_UUID.eq(tagUuid)), link) <= 0) {
metadataDao.createNew(link);
}
}
/**
* Parse quick add markup for the given task
* @param tags an empty array to apply tags to
*/
void parseQuickAddMarkup(Task task, ArrayList<String> tags) {
TitleParser.parse(tagService, task, tags);
}
} }

@ -5,38 +5,22 @@
*/ */
package com.todoroo.astrid.service; package com.todoroo.astrid.service;
import android.content.ContentValues;
import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Functions;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.utility.TitleParser;
import org.tasks.Broadcaster; import org.tasks.Broadcaster;
import org.tasks.injection.ApplicationScope; import org.tasks.injection.ApplicationScope;
import org.tasks.scheduling.RefreshScheduler; import org.tasks.scheduling.RefreshScheduler;
import java.util.ArrayList;
import java.util.Map.Entry;
import javax.inject.Inject; import javax.inject.Inject;
import timber.log.Timber;
/** /**
* Service layer for {@link Task}-centered activities. * Service layer for {@link Task}-centered activities.
@ -47,22 +31,15 @@ import timber.log.Timber;
@ApplicationScope @ApplicationScope
public class TaskService { public class TaskService {
private final TagDataDao tagDataDao;
private final TaskDao taskDao; private final TaskDao taskDao;
private final Broadcaster broadcaster; private final Broadcaster broadcaster;
private final RefreshScheduler refreshScheduler; private final RefreshScheduler refreshScheduler;
private final TagService tagService;
private final MetadataDao metadataDao;
@Inject @Inject
public TaskService(TagDataDao tagDataDao, TaskDao taskDao, Broadcaster broadcaster, public TaskService(TaskDao taskDao, Broadcaster broadcaster, RefreshScheduler refreshScheduler) {
RefreshScheduler refreshScheduler, TagService tagService, MetadataDao metadataDao) {
this.tagDataDao = tagDataDao;
this.taskDao = taskDao; this.taskDao = taskDao;
this.broadcaster = broadcaster; this.broadcaster = broadcaster;
this.refreshScheduler = refreshScheduler; this.refreshScheduler = refreshScheduler;
this.tagService = tagService;
this.metadataDao = metadataDao;
} }
// --- service layer // --- service layer
@ -97,10 +74,6 @@ public class TaskService {
return databaseChanged; return databaseChanged;
} }
private void saveWithoutPublishingFilterUpdate(Task item) {
taskDao.save(item);
}
/** /**
* Fetch tasks for the given filter * Fetch tasks for the given filter
* @param constraint text constraint, or null * @param constraint text constraint, or null
@ -136,98 +109,4 @@ public class TaskService {
return taskDao.query(Query.select(properties).withQueryTemplate(sql)); return taskDao.query(Query.select(properties).withQueryTemplate(sql));
} }
/**
* Parse quick add markup for the given task
* @param tags an empty array to apply tags to
*/
void parseQuickAddMarkup(Task task, ArrayList<String> tags) {
TitleParser.parse(tagService, task, tags);
}
/**
* Create task from the given content values, saving it. This version
* doesn't need to start with a base task model.
*/
public Task createWithValues(ContentValues values, String title) {
return createWithValues(new Task(), values, title);
}
Task createWithValues(Task task, ContentValues values, String title) {
if (title != null) {
task.setTitle(title.trim());
}
ArrayList<String> tags = new ArrayList<>();
try {
parseQuickAddMarkup(task, tags);
} catch (Throwable e) {
Timber.e(e, e.getMessage());
}
ContentValues forMetadata = null;
if (values != null && values.size() > 0) {
ContentValues forTask = new ContentValues();
forMetadata = new ContentValues();
outer: for (Entry<String, Object> item : values.valueSet()) {
String key = item.getKey();
Object value = item.getValue();
if (value instanceof String) {
value = PermaSql.replacePlaceholders((String) value);
}
for (Property<?> property : Metadata.PROPERTIES) {
if (property.name.equals(key)) {
AndroidUtilities.putInto(forMetadata, key, value);
continue outer;
}
}
AndroidUtilities.putInto(forTask, key, value);
}
task.mergeWithoutReplacement(forTask);
}
saveWithoutPublishingFilterUpdate(task);
for(String tag : tags) {
createLink(task, tag);
}
if (forMetadata != null && forMetadata.size() > 0) {
Metadata metadata = new Metadata();
metadata.setTask(task.getId());
metadata.mergeWith(forMetadata);
if (TaskToTagMetadata.KEY.equals(metadata.getKey())) {
if (metadata.containsNonNullValue(TaskToTagMetadata.TAG_UUID) && !RemoteModel.NO_UUID.equals(metadata.getValue(TaskToTagMetadata.TAG_UUID))) {
// This is more efficient
createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME), metadata.getValue(TaskToTagMetadata.TAG_UUID));
} else {
// This is necessary for backwards compatibility
createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME));
}
} else {
metadataDao.persist(metadata);
}
}
return task;
}
private void createLink(Task task, String tagName) {
TagData tagData = tagDataDao.getTagByName(tagName, TagData.NAME, TagData.UUID);
if (tagData == null) {
tagData = new TagData();
tagData.setName(tagName);
tagDataDao.persist(tagData);
}
createLink(task, tagData.getName(), tagData.getUUID());
}
private void createLink(Task task, String tagName, String tagUuid) {
Metadata link = TaskToTagMetadata.newTagMetadata(task.getId(), task.getUuid(), tagName, tagUuid);
if (metadataDao.update(Criterion.and(MetadataDao.MetadataCriteria.byTaskAndwithKey(task.getId(), TaskToTagMetadata.KEY),
TaskToTagMetadata.TASK_UUID.eq(task.getUUID()), TaskToTagMetadata.TAG_UUID.eq(tagUuid)), link) <= 0) {
metadataDao.createNew(link);
}
}
} }

Loading…
Cancel
Save