From 3d83bd381b237ade3bc36c93dbf0d896183305b0 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 19 Sep 2019 11:32:10 -0500 Subject: [PATCH] Update tag and tagdata deletion --- .../com/todoroo/astrid/service/Upgrader.java | 10 +++++----- .../tasks/activities/TagSettingsActivity.java | 3 +-- app/src/main/java/org/tasks/data/TagDao.java | 8 +++----- .../main/java/org/tasks/data/TagDataDao.java | 18 ++++++++++++++++-- 4 files changed, 25 insertions(+), 14 deletions(-) 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 eafaaaca0..49ce35e4b 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrader.java +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrader.java @@ -256,8 +256,8 @@ public class Upgrader { } private void removeDuplicateTagData(List tagData) { - for (int i = 1; i < tagData.size(); i++) { - tagDataDao.delete(tagData.get(i).getId()); + if (tagData.size() > 1) { + tagDataDao.delete(tagData.subList(1, tagData.size())); } } @@ -265,9 +265,9 @@ public class Upgrader { List metadatas = tagDao.getByTagUid(uuid); ImmutableListMultimap metadataByTask = Multimaps.index(metadatas, Tag::getTask); for (Long key : metadataByTask.keySet()) { - ImmutableList tagData = metadataByTask.get(key); - for (int i = 1; i < tagData.size(); i++) { - tagDao.deleteById(tagData.get(i).getId()); + ImmutableList tags = metadataByTask.get(key); + if (tags.size() > 1) { + tagDao.delete(tags.subList(1, tags.size())); } } } diff --git a/app/src/main/java/org/tasks/activities/TagSettingsActivity.java b/app/src/main/java/org/tasks/activities/TagSettingsActivity.java index 562165312..512e036cf 100644 --- a/app/src/main/java/org/tasks/activities/TagSettingsActivity.java +++ b/app/src/main/java/org/tasks/activities/TagSettingsActivity.java @@ -166,8 +166,7 @@ public class TagSettingsActivity extends BaseListSettingsActivity { protected void delete() { if (tagData != null) { String uuid = tagData.getRemoteId(); - tagDao.deleteTag(uuid); - tagDataDao.delete(tagData.getId()); + tagDataDao.delete(tagData); setResult( RESULT_OK, new Intent(TaskListFragment.ACTION_DELETED).putExtra(EXTRA_TAG_UUID, uuid)); diff --git a/app/src/main/java/org/tasks/data/TagDao.java b/app/src/main/java/org/tasks/data/TagDao.java index 44769756c..c0b418592 100644 --- a/app/src/main/java/org/tasks/data/TagDao.java +++ b/app/src/main/java/org/tasks/data/TagDao.java @@ -6,6 +6,7 @@ import static com.google.common.collect.Sets.difference; import static com.google.common.collect.Sets.newHashSet; import androidx.room.Dao; +import androidx.room.Delete; import androidx.room.Insert; import androidx.room.Query; import androidx.room.Transaction; @@ -20,9 +21,6 @@ public abstract class TagDao { @Query("UPDATE tags SET name = :name WHERE tag_uid = :tagUid") public abstract void rename(String tagUid, String name); - @Query("DELETE FROM tags WHERE tag_uid = :tagUid") - public abstract void deleteTag(String tagUid); - @Insert public abstract void insert(Tag tag); @@ -44,8 +42,8 @@ public abstract class TagDao { @Query("SELECT * FROM tags WHERE task = :taskId AND tag_uid = :tagUid") public abstract Tag getTagByTaskAndTagUid(long taskId, String tagUid); - @Query("DELETE FROM tags WHERE _id = :id") - public abstract void deleteById(long id); + @Delete + public abstract void delete(List tags); @Transaction public boolean applyTags(Task task, TagDataDao tagDataDao,List current) { diff --git a/app/src/main/java/org/tasks/data/TagDataDao.java b/app/src/main/java/org/tasks/data/TagDataDao.java index ea102ebe8..2830fa09e 100644 --- a/app/src/main/java/org/tasks/data/TagDataDao.java +++ b/app/src/main/java/org/tasks/data/TagDataDao.java @@ -2,8 +2,10 @@ package org.tasks.data; import androidx.lifecycle.LiveData; import androidx.room.Dao; +import androidx.room.Delete; import androidx.room.Insert; import androidx.room.Query; +import androidx.room.Transaction; import androidx.room.Update; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.helper.UUIDHelper; @@ -37,8 +39,20 @@ public abstract class TagDataDao { @Query("SELECT * FROM tagdata WHERE name IS NOT NULL AND name != '' ORDER BY UPPER(name) ASC") public abstract List tagDataOrderedByName(); - @Query("DELETE FROM tagdata WHERE _id = :id") - public abstract void delete(Long id); + @Delete + abstract void deleteTagData(TagData tagData); + + @Query("DELETE FROM tags WHERE tag_uid = :tagUid") + abstract void deleteTags(String tagUid); + + @Transaction + public void delete(TagData tagData) { + deleteTags(tagData.getRemoteId()); + deleteTagData(tagData); + } + + @Delete + public abstract void delete(List tagData); @Query("SELECT tagdata.* FROM tagdata " + "INNER JOIN tags ON tags.tag_uid = tagdata.remoteId "