From 16910c53c923afbf503afb2d346f913609420ead Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 18 Sep 2019 09:33:25 -0500 Subject: [PATCH] Remove TagService --- .../astrid/service/QuickAddMarkupTest.java | 6 +- .../astrid/service/TitleParserTest.java | 8 +- .../java/org/tasks/data/TagDataDaoTest.java | 51 +++++++++++ .../org/tasks/injection/TestComponent.java | 3 + .../java/org/tasks/makers/TagDataMaker.java | 25 ++++++ .../astrid/provider/Astrid2TaskProvider.java | 7 +- .../todoroo/astrid/service/TaskCreator.java | 7 +- .../com/todoroo/astrid/service/Upgrader.java | 6 +- .../todoroo/astrid/tags/TagFilterExposer.java | 6 +- .../com/todoroo/astrid/tags/TagService.java | 89 ------------------- .../todoroo/astrid/tags/TagsControlSet.java | 15 +++- .../todoroo/astrid/utility/TitleParser.java | 12 +-- .../tasks/activities/TagSettingsActivity.java | 3 - .../main/java/org/tasks/data/TagDataDao.java | 14 ++- .../tasks/filters/FilterCriteriaProvider.java | 14 +-- 15 files changed, 127 insertions(+), 139 deletions(-) create mode 100644 app/src/androidTest/java/org/tasks/data/TagDataDaoTest.java create mode 100644 app/src/androidTest/java/org/tasks/makers/TagDataMaker.java delete mode 100644 app/src/main/java/com/todoroo/astrid/tags/TagService.java diff --git a/app/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.java b/app/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.java index 7439e5fcf..0cf3b4994 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.java +++ b/app/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.java @@ -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 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) { diff --git a/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java b/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java index a9c281623..c73f19c76 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java +++ b/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java @@ -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 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 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(), diff --git a/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.java b/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.java new file mode 100644 index 000000000..89b126a50 --- /dev/null +++ b/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.java @@ -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); + } +} diff --git a/app/src/androidTest/java/org/tasks/injection/TestComponent.java b/app/src/androidTest/java/org/tasks/injection/TestComponent.java index e79348daf..1a863771c 100644 --- a/app/src/androidTest/java/org/tasks/injection/TestComponent.java +++ b/app/src/androidTest/java/org/tasks/injection/TestComponent.java @@ -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); } diff --git a/app/src/androidTest/java/org/tasks/makers/TagDataMaker.java b/app/src/androidTest/java/org/tasks/makers/TagDataMaker.java new file mode 100644 index 000000000..549ba963b --- /dev/null +++ b/app/src/androidTest/java/org/tasks/makers/TagDataMaker.java @@ -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 NAME = newProperty(); + + private static final Instantiator instantiator = lookup -> { + TagData tagData = new TagData(); + tagData.setName(lookup.valueOf(NAME, "tag")); + return tagData; + }; + + @SafeVarargs + public static TagData newTagData(PropertyValue... properties) { + return make(instantiator, properties); + } +} diff --git a/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java b/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java index 4257455fb..91b8ab734 100644 --- a/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java +++ b/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java @@ -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; + @Inject Lazy tagDataDao; @Inject Lazy taskDao; @Inject Lazy 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 tags = tagDataDao.get().tagDataOrderedByName(); MatrixCursor ret = new MatrixCursor(TAGS_FIELD_LIST); diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java index 8dd122d08..984235da2 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java +++ b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.java @@ -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); } diff --git a/app/src/main/java/com/todoroo/astrid/service/Upgrader.java b/app/src/main/java/com/todoroo/astrid/service/Upgrader.java index 0bd1dccf9..1ab2e408f 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrader.java +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrader.java @@ -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 tagsByUuid = - Multimaps.index(tagService.getTagList(), TagData::getRemoteId); + Multimaps.index(tagDataDao.tagDataOrderedByName(), TagData::getRemoteId); for (String uuid : tagsByUuid.keySet()) { removeDuplicateTagData(tagsByUuid.get(uuid)); removeDuplicateTagMetadata(uuid); diff --git a/app/src/main/java/com/todoroo/astrid/tags/TagFilterExposer.java b/app/src/main/java/com/todoroo/astrid/tags/TagFilterExposer.java index 1e50eb0ca..8c4047019 100644 --- a/app/src/main/java/com/todoroo/astrid/tags/TagFilterExposer.java +++ b/app/src/main/java/com/todoroo/astrid/tags/TagFilterExposer.java @@ -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)); } } diff --git a/app/src/main/java/com/todoroo/astrid/tags/TagService.java b/app/src/main/java/com/todoroo/astrid/tags/TagService.java deleted file mode 100644 index d7bd5f4a2..000000000 --- a/app/src/main/java/com/todoroo/astrid/tags/TagService.java +++ /dev/null @@ -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 - */ -@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 tags = tagDataDao.tagDataOrderedByName(); - return tags.toArray(new TagData[tags.size()]); - } - - public TagData tagFromUUID(String uuid) { - return tagDataDao.getByUuid(uuid); - } - - public List getTagDataForTask(String uuid) { - List uuids = tagDao.getTagUids(uuid); - return newArrayList(transform(uuids, this::tagFromUUID)); - } - - public ArrayList getTagDataForTask(long taskId) { - List 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 getTagList() { - final List 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); - } -} diff --git a/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.java b/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.java index 6ebb5dd91..bdb75d709 100644 --- a/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.java +++ b/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.java @@ -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 getTagDataForTask(String uuid) { + return transform(tagDao.getTagUids(uuid), tagDataDao::getByUuid); + } + + private List 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 existingHash = newHashSet(tagService.getTagDataForTask(taskUuid)); + Set existingHash = newHashSet(getTagDataForTask(taskUuid)); Set selectedHash = newHashSet(selectedTags); Sets.SetView added = difference(selectedHash, existingHash); Sets.SetView removed = difference(existingHash, selectedHash); diff --git a/app/src/main/java/com/todoroo/astrid/utility/TitleParser.java b/app/src/main/java/com/todoroo/astrid/utility/TitleParser.java index 87c6da62b..289e168b4 100644 --- a/app/src/main/java/com/todoroo/astrid/utility/TitleParser.java +++ b/app/src/main/java/com/todoroo/astrid/utility/TitleParser.java @@ -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 tags) { + public static void parse(TagDataDao tagDataDao, Task task, ArrayList 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 tags) { + public static void listHelper(TagDataDao tagDataDao, Task task, ArrayList 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); } diff --git a/app/src/main/java/org/tasks/activities/TagSettingsActivity.java b/app/src/main/java/org/tasks/activities/TagSettingsActivity.java index ee5c02794..562165312 100644 --- a/app/src/main/java/org/tasks/activities/TagSettingsActivity.java +++ b/app/src/main/java/org/tasks/activities/TagSettingsActivity.java @@ -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( diff --git a/app/src/main/java/org/tasks/data/TagDataDao.java b/app/src/main/java/org/tasks/data/TagDataDao.java index 23bdc8bb8..924ae9ada 100644 --- a/app/src/main/java/org/tasks/data/TagDataDao.java +++ b/app/src/main/java/org/tasks/data/TagDataDao.java @@ -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 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 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); diff --git a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java index 3f7779484..4396b2969 100644 --- a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java +++ b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java @@ -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 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 values = new HashMap<>(); values.put(Tag.KEY, "?"); return new MultipleSelectCriterion(