Remove TagService

pull/848/head
Alex Baker 5 years ago
parent 4f2cba7abc
commit 16910c53c9

@ -11,7 +11,6 @@ import static junit.framework.Assert.assertEquals;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.Task.Priority;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.utility.TitleParser;
import java.util.ArrayList;
import java.util.Arrays;
@ -19,6 +18,7 @@ import java.util.List;
import javax.inject.Inject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.tasks.data.TagDataDao;
import org.tasks.injection.InjectingTestCase;
import org.tasks.injection.TestComponent;
@ -26,7 +26,7 @@ import org.tasks.injection.TestComponent;
public class QuickAddMarkupTest extends InjectingTestCase {
private final ArrayList<String> tags = new ArrayList<>();
@Inject TagService tagService;
@Inject TagDataDao tagDataDao;
private Task task;
@Override
@ -101,7 +101,7 @@ public class QuickAddMarkupTest extends InjectingTestCase {
task = new Task();
task.setTitle(title);
tags.clear();
TitleParser.parse(tagService, task, tags);
TitleParser.parse(tagDataDao, task, tags);
}
private void assertPriority(int priority) {

@ -17,7 +17,6 @@ import com.google.ical.values.Frequency;
import com.google.ical.values.RRule;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.Task.Priority;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.utility.TitleParser;
import java.util.ArrayList;
import java.util.Calendar;
@ -25,6 +24,7 @@ import javax.inject.Inject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.tasks.R;
import org.tasks.data.TagDataDao;
import org.tasks.injection.InjectingTestCase;
import org.tasks.injection.TestComponent;
import org.tasks.jobs.WorkManager;
@ -34,7 +34,7 @@ import org.tasks.time.DateTime;
@RunWith(AndroidJUnit4.class)
public class TitleParserTest extends InjectingTestCase {
@Inject TagService tagService;
@Inject TagDataDao tagDataDao;
@Inject Preferences preferences;
@Inject TaskCreator taskCreator;
@Inject WorkManager workManager;
@ -454,7 +454,7 @@ public class TitleParserTest extends InjectingTestCase {
task = new Task();
task.setTitle("Jog " + acceptedString); // test at end of task. should set importance.
ArrayList<String> tags = new ArrayList<>();
TitleParser.listHelper(tagService, task, tags);
TitleParser.listHelper(tagDataDao, task, tags);
String tag = TitleParser.trimParenthesis(acceptedString);
assertTrue(
"test pound at failed for string: " + acceptedString + " for tags: " + tags.toString(),
@ -471,7 +471,7 @@ public class TitleParserTest extends InjectingTestCase {
task = new Task();
task.setTitle("Jog " + acceptedString); // test at end of task. should set importance.
ArrayList<String> tags = new ArrayList<>();
TitleParser.listHelper(tagService, task, tags);
TitleParser.listHelper(tagDataDao, task, tags);
String tag = TitleParser.trimParenthesis(acceptedString);
assertTrue(
"testTagsAt failed for string: " + acceptedString + " for tags: " + tags.toString(),

@ -0,0 +1,51 @@
package org.tasks.data;
import static com.natpryce.makeiteasy.MakeItEasy.with;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.tasks.makers.TagDataMaker.NAME;
import static org.tasks.makers.TagDataMaker.newTagData;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import javax.inject.Inject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.tasks.injection.InjectingTestCase;
import org.tasks.injection.TestComponent;
@RunWith(AndroidJUnit4.class)
public class TagDataDaoTest extends InjectingTestCase {
@Inject TagDataDao tagDataDao;
@Test
public void tagDataOrderedByNameIgnoresNullNames() {
tagDataDao.createNew(newTagData(with(NAME, (String) null)));
assertTrue(tagDataDao.tagDataOrderedByName().isEmpty());
}
@Test
public void tagDataOrderedByNameIgnoresEmptyNames() {
tagDataDao.createNew(newTagData(with(NAME, "")));
assertTrue(tagDataDao.tagDataOrderedByName().isEmpty());
}
@Test
public void getTagWithCaseForMissingTag() {
assertEquals("derp", tagDataDao.getTagWithCase("derp"));
}
@Test
public void getTagWithCaseFixesCase() {
tagDataDao.createNew(newTagData(with(NAME, "Derp")));
assertEquals("Derp", tagDataDao.getTagWithCase("derp"));
}
@Override
protected void inject(TestComponent component) {
component.inject(this);
}
}

@ -15,6 +15,7 @@ import com.todoroo.astrid.sync.NewSyncTestCase;
import dagger.Component;
import org.tasks.data.DeletionDaoTests;
import org.tasks.data.GoogleTaskDaoTests;
import org.tasks.data.TagDataDaoTest;
import org.tasks.jobs.BackupServiceTests;
@ApplicationScope
@ -50,4 +51,6 @@ public interface TestComponent extends ApplicationComponent {
void inject(DeletionDaoTests deletionDaoTests);
void inject(GoogleTaskDaoTests googleTaskDaoTests);
void inject(TagDataDaoTest tagDataDaoTest);
}

@ -0,0 +1,25 @@
package org.tasks.makers;
import static com.natpryce.makeiteasy.Property.newProperty;
import static org.tasks.makers.Maker.make;
import com.natpryce.makeiteasy.Instantiator;
import com.natpryce.makeiteasy.Property;
import com.natpryce.makeiteasy.PropertyValue;
import org.tasks.data.TagData;
public class TagDataMaker {
public static final Property<TagData, String> NAME = newProperty();
private static final Instantiator<TagData> instantiator = lookup -> {
TagData tagData = new TagData();
tagData.setName(lookup.valueOf(NAME, "tag"));
return tagData;
};
@SafeVarargs
public static TagData newTagData(PropertyValue<? super TagData, ?>... properties) {
return make(instantiator, properties);
}
}

@ -16,7 +16,6 @@ import androidx.annotation.NonNull;
import com.google.common.base.Joiner;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.tags.TagService;
import dagger.Lazy;
import java.math.BigInteger;
import java.security.MessageDigest;
@ -26,6 +25,7 @@ import javax.inject.Inject;
import org.tasks.BuildConfig;
import org.tasks.data.TagDao;
import org.tasks.data.TagData;
import org.tasks.data.TagDataDao;
import org.tasks.injection.ContentProviderComponent;
import org.tasks.injection.InjectingContentProvider;
import org.tasks.ui.CheckBoxes;
@ -80,7 +80,7 @@ public class Astrid2TaskProvider extends InjectingContentProvider {
URI_MATCHER.addURI(AUTHORITY, "tags", URI_TAGS);
}
@Inject Lazy<TagService> tagService;
@Inject Lazy<TagDataDao> tagDataDao;
@Inject Lazy<TaskDao> taskDao;
@Inject Lazy<TagDao> tagDao;
@ -124,8 +124,7 @@ public class Astrid2TaskProvider extends InjectingContentProvider {
* @return two-column cursor: tag id (string) and tag name
*/
private Cursor getTags() {
TagData[] tags = tagService.get().getGroupedTags();
List<TagData> tags = tagDataDao.get().tagDataOrderedByName();
MatrixCursor ret = new MatrixCursor(TAGS_FIELD_LIST);

@ -16,7 +16,6 @@ import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.Task.Priority;
import com.todoroo.astrid.gcal.GCalHelper;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.utility.TitleParser;
import java.util.ArrayList;
import java.util.Map;
@ -32,7 +31,6 @@ import org.tasks.data.Tag;
import org.tasks.data.TagDao;
import org.tasks.data.TagData;
import org.tasks.data.TagDataDao;
import org.tasks.data.TaskAttachment;
import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences;
import timber.log.Timber;
@ -48,7 +46,6 @@ public class TaskCreator {
private final CaldavDao caldavDao;
private final TagDataDao tagDataDao;
private final TaskDao taskDao;
private final TagService tagService;
@Inject
public TaskCreator(
@ -56,7 +53,6 @@ public class TaskCreator {
Preferences preferences,
TagDataDao tagDataDao,
TaskDao taskDao,
TagService tagService,
TagDao tagDao,
GoogleTaskDao googleTaskDao,
Tracker tracker,
@ -66,7 +62,6 @@ public class TaskCreator {
this.preferences = preferences;
this.tagDataDao = tagDataDao;
this.taskDao = taskDao;
this.tagService = tagService;
this.tagDao = tagDao;
this.googleTaskDao = googleTaskDao;
this.tracker = tracker;
@ -188,7 +183,7 @@ public class TaskCreator {
}
try {
TitleParser.parse(tagService, task, tags);
TitleParser.parse(tagDataDao, task, tags);
} catch (Throwable e) {
Timber.e(e);
}

@ -9,7 +9,6 @@ import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimaps;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.tags.TagService;
import java.io.File;
import java.util.List;
import javax.inject.Inject;
@ -45,7 +44,6 @@ public class Upgrader {
private final Preferences preferences;
private final Tracker tracker;
private final TagDataDao tagDataDao;
private final TagService tagService;
private final TagDao tagDao;
private final FilterDao filterDao;
private final DefaultFilterProvider defaultFilterProvider;
@ -58,7 +56,6 @@ public class Upgrader {
Preferences preferences,
Tracker tracker,
TagDataDao tagDataDao,
TagService tagService,
TagDao tagDao,
FilterDao filterDao,
DefaultFilterProvider defaultFilterProvider,
@ -68,7 +65,6 @@ public class Upgrader {
this.preferences = preferences;
this.tracker = tracker;
this.tagDataDao = tagDataDao;
this.tagService = tagService;
this.tagDao = tagDao;
this.filterDao = filterDao;
this.defaultFilterProvider = defaultFilterProvider;
@ -118,7 +114,7 @@ public class Upgrader {
private void removeDuplicateTags() {
ListMultimap<String, TagData> tagsByUuid =
Multimaps.index(tagService.getTagList(), TagData::getRemoteId);
Multimaps.index(tagDataDao.tagDataOrderedByName(), TagData::getRemoteId);
for (String uuid : tagsByUuid.keySet()) {
removeDuplicateTagData(tagsByUuid.get(uuid));
removeDuplicateTagMetadata(uuid);

@ -25,13 +25,11 @@ import org.tasks.filters.TagFilters;
*/
public class TagFilterExposer {
private final TagService tagService;
private final TagDataDao tagDataDao;
@Inject
public TagFilterExposer(TagDataDao tagDataDao, TagService tagService) {
public TagFilterExposer(TagDataDao tagDataDao) {
this.tagDataDao = tagDataDao;
this.tagService = tagService;
}
/** Create filter from new tag object */
@ -47,6 +45,6 @@ public class TagFilterExposer {
}
public Filter getFilterByUuid(String uuid) {
return filterFromTag(tagService.tagFromUUID(uuid));
return filterFromTag(tagDataDao.getByUuid(uuid));
}
}

@ -1,89 +0,0 @@
/*
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.tags;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Lists.transform;
import android.text.TextUtils;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import org.tasks.data.TagDao;
import org.tasks.data.TagData;
import org.tasks.data.TagDataDao;
import org.tasks.injection.ApplicationScope;
/**
* Provides operations for working with tags
*
* @author Tim Su <tim@todoroo.com>
*/
@ApplicationScope
public final class TagService {
private final TagDataDao tagDataDao;
private final TagDao tagDao;
@Inject
public TagService(TagDataDao tagDataDao, TagDao tagDao) {
this.tagDataDao = tagDataDao;
this.tagDao = tagDao;
}
/**
* Return all tags ordered by given clause
*
* @return empty array if no tags, otherwise array
*/
public TagData[] getGroupedTags() {
List<TagData> tags = tagDataDao.tagDataOrderedByName();
return tags.toArray(new TagData[tags.size()]);
}
public TagData tagFromUUID(String uuid) {
return tagDataDao.getByUuid(uuid);
}
public List<TagData> getTagDataForTask(String uuid) {
List<String> uuids = tagDao.getTagUids(uuid);
return newArrayList(transform(uuids, this::tagFromUUID));
}
public ArrayList<TagData> getTagDataForTask(long taskId) {
List<String> uuids = tagDao.getTagUids(taskId);
return newArrayList(transform(uuids, this::tagFromUUID));
}
/** Return all tags (including metadata tags and TagData tags) in an array list */
public List<TagData> getTagList() {
final List<TagData> tagList = new ArrayList<>();
for (TagData tagData : tagDataDao.tagDataOrderedByName()) {
if (!TextUtils.isEmpty(tagData.getName())) {
tagList.add(tagData);
}
}
return tagList;
}
/**
* If a tag already exists in the database that case insensitively matches the given tag, return
* that. Otherwise, return the argument
*/
public String getTagWithCase(String tag) {
TagData tagData = tagDataDao.getTagByName(tag);
if (tagData != null) {
return tagData.getName();
}
return tag;
}
public void rename(String uuid, String newName) {
tagDataDao.rename(uuid, newName);
tagDao.rename(uuid, newName);
}
}

@ -82,7 +82,6 @@ public final class TagsControlSet extends TaskEditControlFragment {
};
@Inject TagDao tagDao;
@Inject TagDataDao tagDataDao;
@Inject TagService tagService;
@Inject DialogBuilder dialogBuilder;
@Inject ThemeCache themeCache;
@Inject ChipProvider chipProvider;
@ -113,11 +112,11 @@ public final class TagsControlSet extends TaskEditControlFragment {
new ArrayList<>(
task.isNew()
? transform(task.getTags(), tagDataDao::getTagByName)
: tagService.getTagDataForTask(task.getId()));
: getTagDataForTask(task.getId()));
selectedTags = new ArrayList<>(originalTags);
newTags = new ArrayList<>();
}
allTags = tagService.getTagList();
allTags = tagDataDao.tagDataOrderedByName();
dialogView = inflater.inflate(R.layout.control_set_tag_list, null);
newTagLayout = dialogView.findViewById(R.id.newTags);
tagListView = dialogView.findViewById(R.id.existingTags);
@ -156,6 +155,14 @@ public final class TagsControlSet extends TaskEditControlFragment {
return view;
}
private List<TagData> getTagDataForTask(String uuid) {
return transform(tagDao.getTagUids(uuid), tagDataDao::getByUuid);
}
private List<TagData> getTagDataForTask(long taskId) {
return transform(tagDao.getTagUids(taskId), tagDataDao::getByUuid);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
@ -374,7 +381,7 @@ public final class TagsControlSet extends TaskEditControlFragment {
tagDataDao.createNew(tagData);
}
}
Set<TagData> existingHash = newHashSet(tagService.getTagDataForTask(taskUuid));
Set<TagData> existingHash = newHashSet(getTagDataForTask(taskUuid));
Set<TagData> selectedHash = newHashSet(selectedTags);
Sets.SetView<TagData> added = difference(selectedHash, existingHash);
Sets.SetView<TagData> removed = difference(existingHash, selectedHash);

@ -13,7 +13,6 @@ import com.mdimension.jchronic.AstridChronic;
import com.mdimension.jchronic.Chronic;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.Task.Priority;
import com.todoroo.astrid.tags.TagService;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
@ -21,14 +20,15 @@ import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.tasks.data.TagDataDao;
import timber.log.Timber;
public class TitleParser {
public static void parse(TagService tagService, Task task, ArrayList<String> tags) {
public static void parse(TagDataDao tagDataDao, Task task, ArrayList<String> tags) {
repeatHelper(task);
listHelper(
tagService,
tagDataDao,
task,
tags); // Don't need to know if tags affected things since we don't show alerts for them
dayHelper(task);
@ -45,7 +45,7 @@ public class TitleParser {
return pattern;
}
public static void listHelper(TagService tagService, Task task, ArrayList<String> tags) {
public static void listHelper(TagDataDao tagDataDao, Task task, ArrayList<String> tags) {
String inputText = task.getTitle();
Pattern tagPattern = Pattern.compile("(\\s|^)#(\\(.*\\)|[^\\s]+)");
Pattern contextPattern = Pattern.compile("(\\s|^)@(\\(.*\\)|[^\\s]+)");
@ -56,7 +56,7 @@ public class TitleParser {
Matcher m = tagPattern.matcher(inputText);
if (m.find()) {
String tag = TitleParser.trimParenthesis(m.group(2));
String tagWithCase = tagService.getTagWithCase(tag);
String tagWithCase = tagDataDao.getTagWithCase(tag);
if (!addedTags.contains(tagWithCase)) {
tags.add(tagWithCase);
}
@ -65,7 +65,7 @@ public class TitleParser {
m = contextPattern.matcher(inputText);
if (m.find()) {
String tag = TitleParser.trimParenthesis(m.group(2));
String tagWithCase = tagService.getTagWithCase(tag);
String tagWithCase = tagDataDao.getTagWithCase(tag);
if (!addedTags.contains(tagWithCase)) {
tags.add(tagWithCase);
}

@ -20,7 +20,6 @@ import com.todoroo.astrid.activity.MainActivity;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.TagFilter;
import com.todoroo.astrid.helper.UUIDHelper;
import com.todoroo.astrid.tags.TagService;
import javax.inject.Inject;
import org.tasks.R;
import org.tasks.caldav.BaseListSettingsActivity;
@ -34,7 +33,6 @@ public class TagSettingsActivity extends BaseListSettingsActivity {
public static final String TOKEN_AUTOPOPULATE_NAME = "autopopulateName"; // $NON-NLS-1$
public static final String EXTRA_TAG_DATA = "tagData"; // $NON-NLS-1$
private static final String EXTRA_TAG_UUID = "uuid"; // $NON-NLS-1$
@Inject TagService tagService;
@Inject TagDataDao tagDataDao;
@Inject TagDao tagDao;
@ -131,7 +129,6 @@ public class TagSettingsActivity extends BaseListSettingsActivity {
tagData.setName(newName);
tagData.setColor(selectedTheme);
tagData.setIcon(selectedIcon);
tagService.rename(tagData.getRemoteId(), newName);
tagDataDao.update(tagData);
tagDao.rename(tagData.getRemoteId(), newName);
setResult(

@ -19,18 +19,24 @@ public abstract class TagDataDao {
@Query("SELECT * FROM tagdata WHERE name = :name COLLATE NOCASE LIMIT 1")
public abstract TagData getTagByName(String name);
/**
* If a tag already exists in the database that case insensitively matches the given tag, return
* that. Otherwise, return the argument
*/
public String getTagWithCase(String tag) {
TagData tagData = getTagByName(tag);
return tagData != null ? tagData.getName() : tag;
}
@Query("SELECT * FROM tagdata")
public abstract List<TagData> getAll();
@Query("SELECT * FROM tagdata WHERE remoteId = :uuid LIMIT 1")
public abstract TagData getByUuid(String uuid);
@Query("SELECT * FROM tagdata WHERE name IS NOT NULL ORDER BY UPPER(name) ASC")
@Query("SELECT * FROM tagdata WHERE name IS NOT NULL AND name != '' ORDER BY UPPER(name) ASC")
public abstract List<TagData> tagDataOrderedByName();
@Query("UPDATE tagdata SET name = :name WHERE remoteId = :remoteId")
public abstract void rename(String remoteId, String name);
@Query("DELETE FROM tagdata WHERE _id = :id")
public abstract void delete(Long id);

@ -18,7 +18,6 @@ import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.Task.Priority;
import com.todoroo.astrid.gtasks.GtasksListService;
import com.todoroo.astrid.tags.TagService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -32,6 +31,7 @@ import org.tasks.data.GoogleTaskList;
import org.tasks.data.GoogleTaskListDao;
import org.tasks.data.Tag;
import org.tasks.data.TagData;
import org.tasks.data.TagDataDao;
import org.tasks.injection.ForApplication;
import org.tasks.sync.SyncAdapters;
@ -46,7 +46,7 @@ public class FilterCriteriaProvider {
private static final String IDENTIFIER_TAG_CONTAINS = "tag_contains"; // $NON-NLS-1$
private final Context context;
private final TagService tagService;
private final TagDataDao tagDataDao;
private final Resources r;
private final GoogleTaskListDao googleTaskListDao;
private final CaldavDao caldavDao;
@ -54,13 +54,13 @@ public class FilterCriteriaProvider {
@Inject
public FilterCriteriaProvider(
@ForApplication Context context,
TagService tagService,
TagDataDao tagDataDao,
GtasksListService gtasksListService,
SyncAdapters syncAdapters,
GoogleTaskListDao googleTaskListDao,
CaldavDao caldavDao) {
this.context = context;
this.tagService = tagService;
this.tagDataDao = tagDataDao;
r = context.getResources();
this.googleTaskListDao = googleTaskListDao;
@ -86,9 +86,9 @@ public class FilterCriteriaProvider {
private CustomFilterCriterion getTagFilter() {
// TODO: adding to hash set because duplicate tag name bug hasn't been fixed yet
List<String> tags =
newArrayList(newLinkedHashSet(transform(tagService.getTagList(), TagData::getName)));
String[] tagNames = tags.toArray(new String[tags.size()]);
String[] tagNames =
newLinkedHashSet(transform(tagDataDao.tagDataOrderedByName(), TagData::getName))
.toArray(new String[0]);
Map<String, Object> values = new HashMap<>();
values.put(Tag.KEY, "?");
return new MultipleSelectCriterion(

Loading…
Cancel
Save