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;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.test.DatabaseTestCase;
import java.util.ArrayList;
@ -14,6 +16,8 @@ import java.util.List;
public class QuickAddMarkupTest extends DatabaseTestCase {
@Autowired TagService tagService;
@Override
protected void setUp() throws Exception {
super.setUp();
@ -85,7 +89,7 @@ public class QuickAddMarkupTest extends DatabaseTestCase {
task = new Task();
task.setTitle(title);
tags.clear();
TaskService.parseQuickAddMarkup(task, tags);
TaskService.parseQuickAddMarkup(tagService, task, tags);
}
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.utility.Preferences;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.test.DatabaseTestCase;
import com.todoroo.astrid.utility.TitleParser;
@ -26,6 +27,8 @@ public class TitleParserTest extends DatabaseTestCase {
@Autowired TaskService taskService;
@Autowired TagService tagService;
@Override
protected void setUp() throws Exception {
super.setUp();
@ -152,7 +155,7 @@ public class TitleParserTest extends DatabaseTestCase {
private void insertTitleAddTask(String title, Task task) {
task.clear();
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";
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
Date date = newDate(task.getDueDate());
assertEquals(date.getDay()+1, today.get(Calendar.DAY_OF_WEEK));
//Calendar starts 1-6, date.getDay() starts at 0
@ -171,7 +174,7 @@ public class TitleParserTest extends DatabaseTestCase {
task = new Task();
title = "Jog tomorrow";
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
date = newDate(task.getDueDate());
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();
title = "Jog "+ days[i];
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
date = newDate(task.getDueDate());
assertEquals(date.getDay(), i);
task = new Task();
title = "Jog "+ abrevDays[i];
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
date = newDate(task.getDueDate());
assertEquals(date.getDay(), i);
}
@ -229,14 +232,14 @@ public class TitleParserTest extends DatabaseTestCase {
task = new Task();
String title = "Jog " + acceptedString;
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);
}
for (String acceptedString:acceptedStrings){
task = new Task();
String title = acceptedString + " jog";
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);
}
}
@ -293,25 +296,25 @@ public class TitleParserTest extends DatabaseTestCase {
task = new Task();
String title = "Jog " + acceptedStringAtEnd;
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);
task = new Task();
title = acceptedStringAtEnd + " jog";
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);
}
for (String acceptedStringAnywhere:acceptedStringsAnywhere){
task = new Task();
String title = "Jog " + acceptedStringAnywhere;
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);
title = acceptedStringAnywhere + " jog";
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);
}
}
@ -335,25 +338,25 @@ public class TitleParserTest extends DatabaseTestCase {
task = new Task();
String title = "Jog " + acceptedStringAtEnd;
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);
task = new Task();
title = acceptedStringAtEnd + " jog";
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);
}
for (String acceptedStringAnywhere:acceptedStringsAnywhere){
task = new Task();
String title = "Jog " + acceptedStringAnywhere;
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);
title = acceptedStringAnywhere + " jog";
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);
}
}
@ -369,7 +372,7 @@ public class TitleParserTest extends DatabaseTestCase {
Task task = new Task();
String title = "Jog daily";
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
RRule rrule = new RRule();
rrule.setFreq(Frequency.DAILY);
rrule.setInterval(1);
@ -379,7 +382,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every day";
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal());
assertFalse(task.hasDueTime());
assertFalse(task.hasDueDate());
@ -388,7 +391,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every " + i + " days.";
task.setTitle(title);
rrule.setInterval(i);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal());
assertFalse(task.hasDueTime());
assertFalse(task.hasDueDate());
@ -402,7 +405,7 @@ public class TitleParserTest extends DatabaseTestCase {
Task task = new Task();
String title = "Jog weekly";
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
RRule rrule = new RRule();
rrule.setFreq(Frequency.WEEKLY);
rrule.setInterval(1);
@ -412,7 +415,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every week";
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal());
assertFalse(task.hasDueTime());
assertFalse(task.hasDueDate());
@ -421,7 +424,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every " + i + " weeks";
task.setTitle(title);
rrule.setInterval(i);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal());
assertFalse(task.hasDueTime());
assertFalse(task.hasDueDate());
@ -434,7 +437,7 @@ public class TitleParserTest extends DatabaseTestCase {
Task task = new Task();
String title = "Jog monthly";
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
RRule rrule = new RRule();
rrule.setFreq(Frequency.MONTHLY);
rrule.setInterval(1);
@ -444,7 +447,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every month";
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal());
assertFalse(task.hasDueTime());
assertFalse(task.hasDueDate());
@ -453,7 +456,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every " + i + " months";
task.setTitle(title);
rrule.setInterval(i);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal());
assertFalse(task.hasDueTime());
assertFalse(task.hasDueDate());
@ -465,7 +468,7 @@ public class TitleParserTest extends DatabaseTestCase {
Task task = new Task();
String title = "Jog daily starting from today";
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
RRule rrule = new RRule();
rrule.setFreq(Frequency.DAILY);
rrule.setInterval(1);
@ -476,7 +479,7 @@ public class TitleParserTest extends DatabaseTestCase {
task.clearValue(Task.UUID);
title = "Jog every day starting from today";
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal());
assertTrue(task.hasDueDate());
@ -484,7 +487,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every " + i + " days starting from today";
task.setTitle(title);
rrule.setInterval(i);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal());
assertTrue(task.hasDueDate());
task = new Task();
@ -495,7 +498,7 @@ public class TitleParserTest extends DatabaseTestCase {
Task task = new Task();
String title = "Jog weekly starting from today";
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
RRule rrule = new RRule();
rrule.setFreq(Frequency.WEEKLY);
rrule.setInterval(1);
@ -506,7 +509,7 @@ public class TitleParserTest extends DatabaseTestCase {
task.clearValue(Task.UUID);
title = "Jog every week starting from today";
task.setTitle(title);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal());
assertTrue(task.hasDueDate());
@ -514,7 +517,7 @@ public class TitleParserTest extends DatabaseTestCase {
title = "Jog every " + i + " weeks starting from today";
task.setTitle(title);
rrule.setInterval(i);
TaskService.createWithValues(task, null, title);
TaskService.createWithValues(tagService, task, null, title);
assertEquals(task.getRecurrence(), rrule.toIcal());
assertTrue(task.hasDueDate());
task = new Task();
@ -538,7 +541,7 @@ public class TitleParserTest extends DatabaseTestCase {
task = new Task();
task.setTitle("Jog " + acceptedString); //test at end of task. should set importance.
ArrayList<String> tags = new ArrayList<>();
TitleParser.listHelper(task, tags);
TitleParser.listHelper(tagService, task, tags);
String tag = TitleParser.trimParenthesis(acceptedString);
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.setTitle("Jog " + acceptedString); //test at end of task. should set importance.
ArrayList<String> tags = new ArrayList<>();
TitleParser.listHelper(task, tags);
TitleParser.listHelper(tagService, task, tags);
String tag = TitleParser.trimParenthesis(acceptedString);
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);
TagService service = TagService.getInstance();
if (nameChanged) {
if (oldName.equalsIgnoreCase(newName)) { // Change the capitalization of a list manually
tagData.setName(newName);
service.rename(tagData.getUuid(), newName);
tagService.rename(tagData.getUuid(), newName);
} else { // Rename list--check for existing name
newName = service.getTagWithCase(newName);
newName = tagService.getTagWithCase(newName);
tagName.setText(newName);
if (!newName.equals(oldName)) {
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.astrid.data.Task;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.ui.QuickAddBar;
/**
@ -20,6 +21,9 @@ import com.todoroo.astrid.ui.QuickAddBar;
public final class ShareLinkActivity extends TaskListActivity {
@Autowired private TaskService taskService;
@Autowired private TagService tagService;
private String subject;
private boolean handled;
@ -48,7 +52,7 @@ public final class ShareLinkActivity extends TaskListActivity {
if (!handled) {
Intent callerIntent = getIntent();
Task task = QuickAddBar.basicQuickAddTask(subject);
Task task = QuickAddBar.basicQuickAddTask(tagService, subject);
if (task != null) {
task.setNotes(callerIntent.getStringExtra(Intent.EXTRA_TEXT));
taskService.save(task);

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

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

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

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

@ -79,15 +79,17 @@ public class TaskService {
private final Broadcaster broadcaster;
private final FilterCounter filterCounter;
private final RefreshScheduler refreshScheduler;
private final TagService tagService;
@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.metadataDao = metadataDao;
this.userActivityDao = userActivityDao;
this.broadcaster = broadcaster;
this.filterCounter = filterCounter;
this.refreshScheduler = refreshScheduler;
this.tagService = tagService;
}
// --- service layer
@ -339,7 +341,7 @@ public class TaskService {
private void quickAdd(Task task, List<String> tags) {
saveWithoutPublishingFilterUpdate(task);
for(String tag : tags) {
TagService.getInstance().createLink(task, tag);
tagService.createLink(task, tag);
}
broadcastFilterListUpdated();
}
@ -357,8 +359,8 @@ public class TaskService {
* Parse quick add markup for the given task
* @param tags an empty array to apply tags to
*/
public static boolean parseQuickAddMarkup(Task task, ArrayList<String> tags) {
return TitleParser.parse(task, tags);
public static boolean parseQuickAddMarkup(TagService tagService, Task task, ArrayList<String> 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
* 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();
return createWithValues(task, values, title);
return createWithValues(tagService, task, values, title);
}
/**
* Create task from the given content values, saving it.
* @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) {
task.setTitle(title);
}
@ -404,7 +406,7 @@ public class TaskService {
ArrayList<String> tags = new ArrayList<>();
boolean quickAddMarkup = false;
try {
quickAddMarkup = parseQuickAddMarkup(task, tags);
quickAddMarkup = parseQuickAddMarkup(tagService, task, tags);
} catch (Throwable e) {
Log.e(TAG, e.getMessage(), e);
}
@ -448,10 +450,10 @@ public class TaskService {
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
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 {
// This is necessary for backwards compatibility
TagService.getInstance().createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME));
tagService.createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME));
}
} else {
PluginServices.getMetadataService().save(metadata);

@ -12,6 +12,8 @@ import android.content.Intent;
import android.content.res.Resources;
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.Join;
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_CONTAINS = "tag_contains"; //$NON-NLS-1$
@Autowired TagService tagService;
public TagCustomFilterCriteriaExposer() {
DependencyInjectionService.getInstance().inject(this);
}
@Override
public void onReceive(Context context, Intent intent) {
Resources r = context.getResources();
@ -40,7 +48,7 @@ public class TagCustomFilterCriteriaExposer extends BroadcastReceiver {
// 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());
String[] tagNames = new String[tags.length];
for(int i = 0; i < tags.length; i++) {

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

@ -59,8 +59,14 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
private static final String TAG = "tag"; //$NON-NLS-1$
@Autowired TagService tagService;
protected boolean addUntaggedFilter = true;
public TagFilterExposer() {
DependencyInjectionService.getInstance().inject(this);
}
/** Create filter from new tag object */
public static FilterWithCustomIntent filterFromTag(Context context, Tag tag, Criterion criterion) {
String title = tag.tag;
@ -142,7 +148,7 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
}
protected List<Tag> getTagList() {
return TagService.getInstance().getTagList();
return tagService.getTagList();
}
private FilterCategory filterFromTags(Tag[] tags, int name) {
@ -160,7 +166,7 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
if (shouldAddUntagged) {
Filter untagged = new Filter(r.getString(R.string.tag_FEx_untagged),
r.getString(R.string.tag_FEx_untagged),
TagService.getInstance().untaggedTemplate(),
tagService.untaggedTemplate(),
null);
untagged.listingIcon = ((BitmapDrawable)r.getDrawable(
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.CountProperty;
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.Field;
import com.todoroo.andlib.sql.Functions;
@ -43,18 +41,18 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Inject;
import javax.inject.Singleton;
/**
* Provides operations for working with tags
*
* @author Tim Su <tim@todoroo.com>
*
*/
@Singleton
public final class TagService {
// --- singleton
private static TagService instance = null;
private static int[] default_tag_images = new int[] {
R.drawable.default_list_0,
R.drawable.default_list_1,
@ -62,23 +60,15 @@ public final class TagService {
R.drawable.default_list_3
};
public static synchronized TagService getInstance() {
if(instance == null) {
instance = new TagService();
}
return instance;
}
// --- implementation details
@Autowired MetadataDao metadataDao;
@Autowired TagDataService tagDataService;
@Autowired TagDataDao tagDataDao;
private final MetadataDao metadataDao;
private final TagDataService tagDataService;
private final TagDataDao tagDataDao;
public TagService() {
DependencyInjectionService.getInstance().inject(this);
@Inject
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.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DateUtilities;
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 final TagService tagService = TagService.getInstance();
private ArrayList<String> allTagNames;
private LinearLayout newTags;
@ -64,6 +64,8 @@ public final class TagsControlSet extends PopupControlSet {
//private final LinearLayout tagsContainer;
private final TextView tagsDisplay;
@Autowired TagService tagService;
public TagsControlSet(Activity activity, int viewLayout, int displayViewLayout, int title) {
super(activity, viewLayout, displayViewLayout, title);
DependencyInjectionService.getInstance().inject(this);
@ -72,7 +74,7 @@ public final class TagsControlSet extends PopupControlSet {
}
private Tag[] getTagArray() {
ArrayList<Tag> tagsList = TagService.getInstance().getTagList();
ArrayList<Tag> tagsList = tagService.getTagList();
return tagsList.toArray(new Tag[tagsList.size()]);
}
@ -303,7 +305,7 @@ public final class TagsControlSet extends PopupControlSet {
LinkedHashSet<String> tags = getTagSet();
TagService.getInstance().synchronizeTags(task.getId(), task.getUUID(), tags);
tagService.synchronizeTags(task.getId(), task.getUUID(), tags);
Flags.set(Flags.TAGS_CHANGED);
task.setModificationDate(DateUtilities.now());
}

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

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

Loading…
Cancel
Save