Remove TagService singleton, inject with dagger

pull/143/head
Alex Baker 12 years ago
parent 82ecf5545b
commit 8ed650446f

@ -5,7 +5,9 @@
*/ */
package com.todoroo.astrid.service; package com.todoroo.astrid.service;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.test.DatabaseTestCase; import com.todoroo.astrid.test.DatabaseTestCase;
import java.util.ArrayList; import java.util.ArrayList;
@ -14,6 +16,8 @@ import java.util.List;
public class QuickAddMarkupTest extends DatabaseTestCase { public class QuickAddMarkupTest extends DatabaseTestCase {
@Autowired TagService tagService;
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
@ -85,7 +89,7 @@ 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); TaskService.parseQuickAddMarkup(tagService, task, tags);
} }
private void assertImportanceIs(int importance) { private void assertImportanceIs(int importance) {

@ -11,6 +11,7 @@ import com.google.ical.values.RRule;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.test.DatabaseTestCase; import com.todoroo.astrid.test.DatabaseTestCase;
import com.todoroo.astrid.utility.TitleParser; import com.todoroo.astrid.utility.TitleParser;
@ -26,6 +27,8 @@ public class TitleParserTest extends DatabaseTestCase {
@Autowired TaskService taskService; @Autowired TaskService taskService;
@Autowired TagService tagService;
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
@ -152,7 +155,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); TaskService.createWithValues(tagService, task, null, title);
} }
@ -163,7 +166,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); TaskService.createWithValues(tagService, task, null, title);
Date date = newDate(task.getDueDate()); Date date = newDate(task.getDueDate());
assertEquals(date.getDay()+1, today.get(Calendar.DAY_OF_WEEK)); assertEquals(date.getDay()+1, today.get(Calendar.DAY_OF_WEEK));
//Calendar starts 1-6, date.getDay() starts at 0 //Calendar starts 1-6, date.getDay() starts at 0
@ -171,7 +174,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); TaskService.createWithValues(tagService, task, null, title);
date = newDate(task.getDueDate()); date = newDate(task.getDueDate());
assertEquals((date.getDay()+1) % 7, (today.get(Calendar.DAY_OF_WEEK)+1) % 7); assertEquals((date.getDay()+1) % 7, (today.get(Calendar.DAY_OF_WEEK)+1) % 7);
@ -198,14 +201,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); TaskService.createWithValues(tagService, task, null, title);
date = newDate(task.getDueDate()); date = newDate(task.getDueDate());
assertEquals(date.getDay(), i); assertEquals(date.getDay(), i);
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); TaskService.createWithValues(tagService, task, null, title);
date = newDate(task.getDueDate()); date = newDate(task.getDueDate());
assertEquals(date.getDay(), i); assertEquals(date.getDay(), i);
} }
@ -229,14 +232,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); TaskService.createWithValues(tagService, task, null, title);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_LEAST); assertEquals((int)task.getImportance(), Task.IMPORTANCE_LEAST);
} }
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); TaskService.createWithValues(tagService, task, null, title);
assertNotSame(task.getImportance(),Task.IMPORTANCE_LEAST); assertNotSame(task.getImportance(),Task.IMPORTANCE_LEAST);
} }
} }
@ -293,25 +296,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); TaskService.createWithValues(tagService, 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); TaskService.createWithValues(tagService, 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); TaskService.createWithValues(tagService, 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); TaskService.createWithValues(tagService, task, null, title);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_MUST_DO); assertEquals((int)task.getImportance(), Task.IMPORTANCE_MUST_DO);
} }
} }
@ -335,25 +338,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); TaskService.createWithValues(tagService, 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); TaskService.createWithValues(tagService, 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); TaskService.createWithValues(tagService, 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); TaskService.createWithValues(tagService, task, null, title);
assertEquals((int)task.getImportance(), Task.IMPORTANCE_DO_OR_DIE); assertEquals((int)task.getImportance(), Task.IMPORTANCE_DO_OR_DIE);
} }
} }
@ -369,7 +372,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); TaskService.createWithValues(tagService, 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);
@ -379,7 +382,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); TaskService.createWithValues(tagService, 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());
@ -388,7 +391,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); TaskService.createWithValues(tagService, 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());
@ -402,7 +405,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); TaskService.createWithValues(tagService, 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);
@ -412,7 +415,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); TaskService.createWithValues(tagService, 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());
@ -421,7 +424,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); TaskService.createWithValues(tagService, 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 +437,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); TaskService.createWithValues(tagService, 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);
@ -444,7 +447,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); TaskService.createWithValues(tagService, 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 +456,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); TaskService.createWithValues(tagService, 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());
@ -465,7 +468,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); TaskService.createWithValues(tagService, 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);
@ -476,7 +479,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); TaskService.createWithValues(tagService, task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal()); assertEquals(task.getRecurrence(), rrule.toIcal());
assertTrue(task.hasDueDate()); assertTrue(task.hasDueDate());
@ -484,7 +487,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); TaskService.createWithValues(tagService, 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();
@ -495,7 +498,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); TaskService.createWithValues(tagService, 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);
@ -506,7 +509,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); TaskService.createWithValues(tagService, task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal()); assertEquals(task.getRecurrence(), rrule.toIcal());
assertTrue(task.hasDueDate()); assertTrue(task.hasDueDate());
@ -514,7 +517,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); TaskService.createWithValues(tagService, 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();
@ -538,7 +541,7 @@ public class TitleParserTest extends DatabaseTestCase {
task = new Task(); task = new Task();
task.setTitle("Jog " + acceptedString); //test at end of task. should set importance. task.setTitle("Jog " + acceptedString); //test at end of task. should set importance.
ArrayList<String> tags = new ArrayList<>(); ArrayList<String> tags = new ArrayList<>();
TitleParser.listHelper(task, tags); TitleParser.listHelper(tagService, task, tags);
String tag = TitleParser.trimParenthesis(acceptedString); String tag = TitleParser.trimParenthesis(acceptedString);
assertTrue("test pound at failed for string: " + acceptedString + " for tags: " + tags.toString(), tags.contains(tag)); assertTrue("test pound at failed for string: " + acceptedString + " for tags: " + tags.toString(), tags.contains(tag));
} }
@ -557,7 +560,7 @@ public class TitleParserTest extends DatabaseTestCase {
task = new Task(); task = new Task();
task.setTitle("Jog " + acceptedString); //test at end of task. should set importance. task.setTitle("Jog " + acceptedString); //test at end of task. should set importance.
ArrayList<String> tags = new ArrayList<>(); ArrayList<String> tags = new ArrayList<>();
TitleParser.listHelper(task, tags); TitleParser.listHelper(tagService, task, tags);
String tag = TitleParser.trimParenthesis(acceptedString); String tag = TitleParser.trimParenthesis(acceptedString);
assertTrue("testTagsAt failed for string: " + acceptedString+ " for tags: " + tags.toString(), tags.contains(tag)); assertTrue("testTagsAt failed for string: " + acceptedString+ " for tags: " + tags.toString(), tags.contains(tag));
} }

@ -164,17 +164,16 @@ public class TagSettingsActivity extends ActionBarActivity {
} }
boolean nameChanged = !oldName.equals(newName); boolean nameChanged = !oldName.equals(newName);
TagService service = TagService.getInstance();
if (nameChanged) { if (nameChanged) {
if (oldName.equalsIgnoreCase(newName)) { // Change the capitalization of a list manually if (oldName.equalsIgnoreCase(newName)) { // Change the capitalization of a list manually
tagData.setName(newName); tagData.setName(newName);
service.rename(tagData.getUuid(), newName); tagService.rename(tagData.getUuid(), newName);
} else { // Rename list--check for existing name } else { // Rename list--check for existing name
newName = service.getTagWithCase(newName); newName = tagService.getTagWithCase(newName);
tagName.setText(newName); tagName.setText(newName);
if (!newName.equals(oldName)) { if (!newName.equals(oldName)) {
tagData.setName(newName); tagData.setName(newName);
service.rename(tagData.getUuid(), newName); tagService.rename(tagData.getUuid(), newName);
} }
} }
} }

@ -10,6 +10,7 @@ import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.ui.QuickAddBar; import com.todoroo.astrid.ui.QuickAddBar;
/** /**
@ -20,6 +21,9 @@ import com.todoroo.astrid.ui.QuickAddBar;
public final class ShareLinkActivity extends TaskListActivity { public final class ShareLinkActivity extends TaskListActivity {
@Autowired private TaskService taskService; @Autowired private TaskService taskService;
@Autowired private TagService tagService;
private String subject; private String subject;
private boolean handled; private boolean handled;
@ -48,7 +52,7 @@ public final class ShareLinkActivity extends TaskListActivity {
if (!handled) { if (!handled) {
Intent callerIntent = getIntent(); Intent callerIntent = getIntent();
Task task = QuickAddBar.basicQuickAddTask(subject); Task task = QuickAddBar.basicQuickAddTask(tagService, subject);
if (task != null) { if (task != null) {
task.setNotes(callerIntent.getStringExtra(Intent.EXTRA_TEXT)); task.setNotes(callerIntent.getStringExtra(Intent.EXTRA_TEXT));
taskService.save(task); taskService.save(task);

@ -65,6 +65,7 @@ import com.todoroo.astrid.reminders.Notifications;
import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.repeats.RepeatControlSet;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.service.ThemeService; import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.TagsControlSet; import com.todoroo.astrid.tags.TagsControlSet;
import com.todoroo.astrid.timers.TimerActionControlSet; import com.todoroo.astrid.timers.TimerActionControlSet;
import com.todoroo.astrid.timers.TimerControlSet; import com.todoroo.astrid.timers.TimerControlSet;
@ -171,6 +172,8 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener {
@Autowired private TaskAttachmentDao taskAttachmentDao; @Autowired private TaskAttachmentDao taskAttachmentDao;
@Autowired private TagService tagService;
// --- UI components // --- UI components
private EditNotesControlSet notesControlSet = null; private EditNotesControlSet notesControlSet = null;
@ -597,7 +600,7 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener {
} catch (Exception e) { } catch (Exception e) {
// oops, can't serialize // oops, can't serialize
} }
model = TaskService.createWithValues(values, null); model = TaskService.createWithValues(tagService, values, null);
getActivity().getIntent().putExtra(TOKEN_ID, model.getId()); getActivity().getIntent().putExtra(TOKEN_ID, model.getId());
} }

@ -72,6 +72,8 @@ public class TasksXmlImporter {
@Autowired TagDataService tagDataService; @Autowired TagDataService tagDataService;
@Autowired TagService tagService;
private final Handler handler; private final Handler handler;
private int taskCount; private int taskCount;
private int importCount = 0; private int importCount = 0;
@ -490,7 +492,7 @@ public class TasksXmlImporter {
private void saveTags() { private void saveTags() {
if(currentTask != null && tags.size() > 0) { if(currentTask != null && tags.size() > 0) {
TagService.getInstance().synchronizeTags(currentTask.getId(), currentTask.getUUID(), tags); tagService.synchronizeTags(currentTask.getId(), currentTask.getUUID(), tags);
} }
tags.clear(); tags.clear();
} }

@ -81,6 +81,8 @@ public class Astrid2TaskProvider extends ContentProvider {
@Autowired private TaskService taskService; @Autowired private TaskService taskService;
@Autowired private TagService tagService;
private static Context ctx = null; private static Context ctx = null;
static { static {
@ -122,7 +124,7 @@ public class Astrid2TaskProvider extends ContentProvider {
*/ */
public Cursor getTags() { public Cursor getTags() {
Tag[] tags = TagService.getInstance().getGroupedTags(TagService.GROUPED_TAGS_BY_SIZE, Tag[] tags = tagService.getGroupedTags(TagService.GROUPED_TAGS_BY_SIZE,
Criterion.all); Criterion.all);
MatrixCursor ret = new MatrixCursor(TAGS_FIELD_LIST); MatrixCursor ret = new MatrixCursor(TAGS_FIELD_LIST);
@ -179,7 +181,7 @@ public class Astrid2TaskProvider extends ContentProvider {
cursor.moveToNext(); cursor.moveToNext();
task.readFromCursor(cursor); task.readFromCursor(cursor);
String taskTags = TagService.getInstance().getTagsAsString(task.getId(), TAG_SEPARATOR); String taskTags = tagService.getTagsAsString(task.getId(), TAG_SEPARATOR);
Object[] values = new Object[7]; Object[] values = new Object[7];
values[0] = task.getTitle(); values[0] = task.getTitle();

@ -62,6 +62,7 @@ public class AstridDependencyInjector extends AbstractDependencyInjector {
@Inject FilterCounter filterCounter; @Inject FilterCounter filterCounter;
@Inject RefreshScheduler refreshScheduler; @Inject RefreshScheduler refreshScheduler;
@Inject TaskService taskService; @Inject TaskService taskService;
@Inject TagService tagService;
/** /**
* Initialize list of injectables. Special care must used when * Initialize list of injectables. Special care must used when
@ -97,7 +98,7 @@ public class AstridDependencyInjector extends AbstractDependencyInjector {
injectables.put("gtasksSyncService", GtasksSyncService.class); injectables.put("gtasksSyncService", GtasksSyncService.class);
// com.todoroo.astrid.tags // com.todoroo.astrid.tags
injectables.put("tagService", TagService.class); injectables.put("tagService", tagService);
injectables.put("broadcaster", broadcaster); injectables.put("broadcaster", broadcaster);

@ -79,15 +79,17 @@ public class TaskService {
private final Broadcaster broadcaster; private final Broadcaster broadcaster;
private final FilterCounter filterCounter; private final FilterCounter filterCounter;
private final RefreshScheduler refreshScheduler; private final RefreshScheduler refreshScheduler;
private final TagService tagService;
@Inject @Inject
public TaskService(TaskDao taskDao, MetadataDao metadataDao, UserActivityDao userActivityDao, Broadcaster broadcaster, FilterCounter filterCounter, RefreshScheduler refreshScheduler) { public TaskService(TaskDao taskDao, MetadataDao metadataDao, UserActivityDao userActivityDao, Broadcaster broadcaster, FilterCounter filterCounter, RefreshScheduler refreshScheduler, TagService tagService) {
this.taskDao = taskDao; this.taskDao = taskDao;
this.metadataDao = metadataDao; this.metadataDao = metadataDao;
this.userActivityDao = userActivityDao; this.userActivityDao = userActivityDao;
this.broadcaster = broadcaster; this.broadcaster = broadcaster;
this.filterCounter = filterCounter; this.filterCounter = filterCounter;
this.refreshScheduler = refreshScheduler; this.refreshScheduler = refreshScheduler;
this.tagService = tagService;
} }
// --- service layer // --- service layer
@ -339,7 +341,7 @@ public class TaskService {
private void quickAdd(Task task, List<String> tags) { private void quickAdd(Task task, List<String> tags) {
saveWithoutPublishingFilterUpdate(task); saveWithoutPublishingFilterUpdate(task);
for(String tag : tags) { for(String tag : tags) {
TagService.getInstance().createLink(task, tag); tagService.createLink(task, tag);
} }
broadcastFilterListUpdated(); broadcastFilterListUpdated();
} }
@ -357,8 +359,8 @@ public class TaskService {
* Parse quick add markup for the given task * Parse quick add markup for the given task
* @param tags an empty array to apply tags to * @param tags an empty array to apply tags to
*/ */
public static boolean parseQuickAddMarkup(Task task, ArrayList<String> tags) { public static boolean parseQuickAddMarkup(TagService tagService, Task task, ArrayList<String> tags) {
return TitleParser.parse(task, tags); return TitleParser.parse(tagService, task, tags);
} }
/** /**
@ -387,16 +389,16 @@ public class TaskService {
* Create task from the given content values, saving it. This version * Create task from the given content values, saving it. This version
* doesn't need to start with a base task model. * doesn't need to start with a base task model.
*/ */
public static Task createWithValues(ContentValues values, String title) { public static Task createWithValues(TagService tagService, ContentValues values, String title) {
Task task = new Task(); Task task = new Task();
return createWithValues(task, values, title); return createWithValues(tagService, task, values, title);
} }
/** /**
* Create task from the given content values, saving it. * Create task from the given content values, saving it.
* @param task base task to start with * @param task base task to start with
*/ */
public static Task createWithValues(Task task, ContentValues values, String title) { public static Task createWithValues(TagService tagService, Task task, ContentValues values, String title) {
if (title != null) { if (title != null) {
task.setTitle(title); task.setTitle(title);
} }
@ -404,7 +406,7 @@ public class TaskService {
ArrayList<String> tags = new ArrayList<>(); ArrayList<String> tags = new ArrayList<>();
boolean quickAddMarkup = false; boolean quickAddMarkup = false;
try { try {
quickAddMarkup = parseQuickAddMarkup(task, tags); quickAddMarkup = parseQuickAddMarkup(tagService, task, tags);
} catch (Throwable e) { } catch (Throwable e) {
Log.e(TAG, e.getMessage(), e); Log.e(TAG, e.getMessage(), e);
} }
@ -448,10 +450,10 @@ public class TaskService {
if (TaskToTagMetadata.KEY.equals(metadata.getKey())) { if (TaskToTagMetadata.KEY.equals(metadata.getKey())) {
if (metadata.containsNonNullValue(TaskToTagMetadata.TAG_UUID) && !RemoteModel.NO_UUID.equals(metadata.getValue(TaskToTagMetadata.TAG_UUID))) { if (metadata.containsNonNullValue(TaskToTagMetadata.TAG_UUID) && !RemoteModel.NO_UUID.equals(metadata.getValue(TaskToTagMetadata.TAG_UUID))) {
// This is more efficient // This is more efficient
TagService.getInstance().createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME), metadata.getValue(TaskToTagMetadata.TAG_UUID)); tagService.createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME), metadata.getValue(TaskToTagMetadata.TAG_UUID));
} else { } else {
// This is necessary for backwards compatibility // This is necessary for backwards compatibility
TagService.getInstance().createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME)); tagService.createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME));
} }
} else { } else {
PluginServices.getMetadataService().save(metadata); PluginServices.getMetadataService().save(metadata);

@ -12,6 +12,8 @@ import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Join; import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
@ -31,6 +33,12 @@ public class TagCustomFilterCriteriaExposer extends BroadcastReceiver {
private static final String IDENTIFIER_TAG_IS = "tag_is"; //$NON-NLS-1$ private static final String IDENTIFIER_TAG_IS = "tag_is"; //$NON-NLS-1$
private static final String IDENTIFIER_TAG_CONTAINS = "tag_contains"; //$NON-NLS-1$ private static final String IDENTIFIER_TAG_CONTAINS = "tag_contains"; //$NON-NLS-1$
@Autowired TagService tagService;
public TagCustomFilterCriteriaExposer() {
DependencyInjectionService.getInstance().inject(this);
}
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
Resources r = context.getResources(); Resources r = context.getResources();
@ -40,7 +48,7 @@ public class TagCustomFilterCriteriaExposer extends BroadcastReceiver {
// built in criteria: tags // built in criteria: tags
{ {
TagService.Tag[] tags = TagService.getInstance().getGroupedTags(TagService.GROUPED_TAGS_BY_SIZE, TagService.Tag[] tags = tagService.getGroupedTags(TagService.GROUPED_TAGS_BY_SIZE,
TaskDao.TaskCriteria.activeAndVisible()); TaskDao.TaskCriteria.activeAndVisible());
String[] tagNames = new String[tags.length]; String[] tagNames = new String[tags.length];
for(int i = 0; i < tags.length; i++) { for(int i = 0; i < tags.length; i++) {

@ -9,6 +9,8 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridApiConstants;
/** /**
@ -19,6 +21,12 @@ import com.todoroo.astrid.api.AstridApiConstants;
*/ */
public class TagDetailExposer extends BroadcastReceiver { public class TagDetailExposer extends BroadcastReceiver {
@Autowired TagService tagService;
public TagDetailExposer() {
DependencyInjectionService.getInstance().inject(this);
}
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
// get tags associated with this task // get tags associated with this task
@ -41,7 +49,7 @@ public class TagDetailExposer extends BroadcastReceiver {
} }
public String getTaskDetails(long id) { public String getTaskDetails(long id) {
String tagList = TagService.getInstance().getTagsAsString(id); String tagList = tagService.getTagsAsString(id);
if(tagList.length() == 0) { if(tagList.length() == 0) {
return null; return null;
} }

@ -59,8 +59,14 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
private static final String TAG = "tag"; //$NON-NLS-1$ private static final String TAG = "tag"; //$NON-NLS-1$
@Autowired TagService tagService;
protected boolean addUntaggedFilter = true; protected boolean addUntaggedFilter = true;
public TagFilterExposer() {
DependencyInjectionService.getInstance().inject(this);
}
/** Create filter from new tag object */ /** Create filter from new tag object */
public static FilterWithCustomIntent filterFromTag(Context context, Tag tag, Criterion criterion) { public static FilterWithCustomIntent filterFromTag(Context context, Tag tag, Criterion criterion) {
String title = tag.tag; String title = tag.tag;
@ -142,7 +148,7 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
} }
protected List<Tag> getTagList() { protected List<Tag> getTagList() {
return TagService.getInstance().getTagList(); return tagService.getTagList();
} }
private FilterCategory filterFromTags(Tag[] tags, int name) { private FilterCategory filterFromTags(Tag[] tags, int name) {
@ -160,7 +166,7 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
if (shouldAddUntagged) { if (shouldAddUntagged) {
Filter untagged = new Filter(r.getString(R.string.tag_FEx_untagged), Filter untagged = new Filter(r.getString(R.string.tag_FEx_untagged),
r.getString(R.string.tag_FEx_untagged), r.getString(R.string.tag_FEx_untagged),
TagService.getInstance().untaggedTemplate(), tagService.untaggedTemplate(),
null); null);
untagged.listingIcon = ((BitmapDrawable)r.getDrawable( untagged.listingIcon = ((BitmapDrawable)r.getDrawable(
ThemeService.getDrawable(R.drawable.gl_lists, themeFlags))).getBitmap(); ThemeService.getDrawable(R.drawable.gl_lists, themeFlags))).getBitmap();

@ -13,8 +13,6 @@ import android.widget.Toast;
import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Property.CountProperty; import com.todoroo.andlib.data.Property.CountProperty;
import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Field; import com.todoroo.andlib.sql.Field;
import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Functions;
@ -43,18 +41,18 @@ import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import javax.inject.Inject;
import javax.inject.Singleton;
/** /**
* Provides operations for working with tags * Provides operations for working with tags
* *
* @author Tim Su <tim@todoroo.com> * @author Tim Su <tim@todoroo.com>
* *
*/ */
@Singleton
public final class TagService { public final class TagService {
// --- singleton
private static TagService instance = null;
private static int[] default_tag_images = new int[] { private static int[] default_tag_images = new int[] {
R.drawable.default_list_0, R.drawable.default_list_0,
R.drawable.default_list_1, R.drawable.default_list_1,
@ -62,23 +60,15 @@ public final class TagService {
R.drawable.default_list_3 R.drawable.default_list_3
}; };
public static synchronized TagService getInstance() { private final MetadataDao metadataDao;
if(instance == null) { private final TagDataService tagDataService;
instance = new TagService(); private final TagDataDao tagDataDao;
}
return instance;
}
// --- implementation details
@Autowired MetadataDao metadataDao;
@Autowired TagDataService tagDataService;
@Autowired TagDataDao tagDataDao;
public TagService() { @Inject
DependencyInjectionService.getInstance().inject(this); public TagService(MetadataDao metadataDao, TagDataService tagDataService, TagDataDao tagDataDao) {
this.metadataDao = metadataDao;
this.tagDataService = tagDataService;
this.tagDataDao = tagDataDao;
} }
/** /**

@ -25,6 +25,7 @@ import android.widget.TextView.OnEditorActionListener;
import com.todoroo.andlib.data.AbstractModel; import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
@ -52,7 +53,6 @@ public final class TagsControlSet extends PopupControlSet {
private static final String TRANSITORY_TAGS = "tags";//$NON-NLS-1$ private static final String TRANSITORY_TAGS = "tags";//$NON-NLS-1$
private final TagService tagService = TagService.getInstance();
private ArrayList<String> allTagNames; private ArrayList<String> allTagNames;
private LinearLayout newTags; private LinearLayout newTags;
@ -64,6 +64,8 @@ public final class TagsControlSet extends PopupControlSet {
//private final LinearLayout tagsContainer; //private final LinearLayout tagsContainer;
private final TextView tagsDisplay; private final TextView tagsDisplay;
@Autowired TagService tagService;
public TagsControlSet(Activity activity, int viewLayout, int displayViewLayout, int title) { public TagsControlSet(Activity activity, int viewLayout, int displayViewLayout, int title) {
super(activity, viewLayout, displayViewLayout, title); super(activity, viewLayout, displayViewLayout, title);
DependencyInjectionService.getInstance().inject(this); DependencyInjectionService.getInstance().inject(this);
@ -72,7 +74,7 @@ public final class TagsControlSet extends PopupControlSet {
} }
private Tag[] getTagArray() { private Tag[] getTagArray() {
ArrayList<Tag> tagsList = TagService.getInstance().getTagList(); ArrayList<Tag> tagsList = tagService.getTagList();
return tagsList.toArray(new Tag[tagsList.size()]); return tagsList.toArray(new Tag[tagsList.size()]);
} }
@ -303,7 +305,7 @@ public final class TagsControlSet extends PopupControlSet {
LinkedHashSet<String> tags = getTagSet(); LinkedHashSet<String> tags = getTagSet();
TagService.getInstance().synchronizeTags(task.getId(), task.getUUID(), tags); tagService.synchronizeTags(task.getId(), task.getUUID(), tags);
Flags.set(Flags.TAGS_CHANGED); Flags.set(Flags.TAGS_CHANGED);
task.setModificationDate(DateUtilities.now()); task.setModificationDate(DateUtilities.now());
} }

@ -43,6 +43,7 @@ import com.todoroo.astrid.gcal.GCalControlSet;
import com.todoroo.astrid.gcal.GCalHelper; import com.todoroo.astrid.gcal.GCalHelper;
import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.repeats.RepeatControlSet;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.utility.Flags; import com.todoroo.astrid.utility.Flags;
import com.todoroo.astrid.voice.VoiceRecognizer; import com.todoroo.astrid.voice.VoiceRecognizer;
@ -74,6 +75,8 @@ public class QuickAddBar extends LinearLayout {
@Autowired private TaskAttachmentDao taskAttachmentDao; @Autowired private TaskAttachmentDao taskAttachmentDao;
@Autowired private TagService tagService;
private VoiceRecognizer voiceRecognizer; private VoiceRecognizer voiceRecognizer;
private AstridActivity activity; private AstridActivity activity;
@ -271,7 +274,7 @@ public class QuickAddBar extends LinearLayout {
} }
gcalControl.writeToModel(task); gcalControl.writeToModel(task);
TaskService.createWithValues(task, fragment.getFilter().valuesForNewTasks, title); TaskService.createWithValues(tagService, task, fragment.getFilter().valuesForNewTasks, title);
resetControlSets(); resetControlSets();
@ -316,14 +319,14 @@ public class QuickAddBar extends LinearLayout {
* Static method to quickly add tasks without all the control set nonsense. * Static method to quickly add tasks without all the control set nonsense.
* Used from the share link activity. * Used from the share link activity.
*/ */
public static Task basicQuickAddTask(String title) { public static Task basicQuickAddTask(TagService tagService, String title) {
if (TextUtils.isEmpty(title)) { if (TextUtils.isEmpty(title)) {
return null; return null;
} }
title = title.trim(); title = title.trim();
Task task = TaskService.createWithValues(null, title); Task task = TaskService.createWithValues(tagService, null, title);
addToCalendar(task, title); addToCalendar(task, title);
return task; return task;

@ -24,10 +24,10 @@ import java.util.regex.Pattern;
public class TitleParser { public class TitleParser {
public static boolean parse(Task task, ArrayList<String> tags) { public static boolean parse(TagService tagService, Task task, ArrayList<String> tags) {
boolean markup = false; boolean markup;
markup = repeatHelper(task) || markup; markup = repeatHelper(task);
listHelper(task,tags); // Don't need to know if tags affected things since we don't show alerts for them listHelper(tagService, task,tags); // Don't need to know if tags affected things since we don't show alerts for them
markup = dayHelper(task) || markup; markup = dayHelper(task) || markup;
markup = priorityHelper(task) || markup; markup = priorityHelper(task) || markup;
return markup; return markup;
@ -42,13 +42,12 @@ public class TitleParser {
} }
return pattern; return pattern;
} }
public static void listHelper(Task task, ArrayList<String> tags) { public static void listHelper(TagService tagService, Task task, ArrayList<String> tags) {
String inputText = task.getTitle(); String inputText = task.getTitle();
Pattern tagPattern = Pattern.compile("(\\s|^)#(\\(.*\\)|[^\\s]+)"); Pattern tagPattern = Pattern.compile("(\\s|^)#(\\(.*\\)|[^\\s]+)");
Pattern contextPattern = Pattern.compile("(\\s|^)@(\\(.*\\)|[^\\s]+)"); Pattern contextPattern = Pattern.compile("(\\s|^)@(\\(.*\\)|[^\\s]+)");
Set<String> addedTags = new HashSet<>(); Set<String> addedTags = new HashSet<>();
TagService tagService = TagService.getInstance();
while(true) { while(true) {
Matcher m = tagPattern.matcher(inputText); Matcher m = tagPattern.matcher(inputText);

Loading…
Cancel
Save