From dc4ab11583fd045accdf7f455224c67d935f9ea5 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 9 Jul 2019 17:12:49 -0500 Subject: [PATCH] Fix drawer count issues --- CHANGELOG.md | 8 ++++++++ .../astrid/adapter/NavigationDrawerAdapter.java | 13 ------------- .../astrid/gtasks/GtasksFilterExposer.java | 4 +++- .../todoroo/astrid/tags/TagFilterExposer.java | 3 ++- .../org/tasks/caldav/CaldavFilterExposer.java | 4 +++- app/src/main/java/org/tasks/data/CaldavDao.java | 4 ++-- .../java/org/tasks/data/GoogleTaskListDao.java | 4 ++-- app/src/main/java/org/tasks/data/TagDataDao.java | 4 ++-- .../org/tasks/ui/NavigationDrawerFragment.java | 16 ++++------------ 9 files changed, 26 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 830ab4acf..fe8233a87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ Change Log --- +### 6.8 (beta) + +* Choose icons for lists (requires [subscription](http://tasks.org/subscribe)) +* Choose color for custom filters +* Performance improvements +* Allow duplicate CalDAV list names +* Fix duplicate tag name bug + ### 6.7.2 (2019-07-08) * Handle 404 errors when creating new Google Tasks diff --git a/app/src/main/java/com/todoroo/astrid/adapter/NavigationDrawerAdapter.java b/app/src/main/java/com/todoroo/astrid/adapter/NavigationDrawerAdapter.java index 7f31a0137..9173f0277 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/NavigationDrawerAdapter.java +++ b/app/src/main/java/com/todoroo/astrid/adapter/NavigationDrawerAdapter.java @@ -6,7 +6,6 @@ package com.todoroo.astrid.adapter; -import static com.google.common.collect.Lists.newArrayList; import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread; import static com.todoroo.astrid.api.FilterListItem.Type.ITEM; import static com.todoroo.astrid.api.FilterListItem.Type.SUBHEADER; @@ -24,7 +23,6 @@ import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.api.FilterListItem.Type; import java.util.HashMap; -import java.util.List; import java.util.Map; import javax.inject.Inject; import org.tasks.billing.Inventory; @@ -49,7 +47,6 @@ public class NavigationDrawerAdapter extends ListAdapter counts = new HashMap<>(); - private List items; @Inject public NavigationDrawerAdapter( @@ -75,11 +72,6 @@ public class NavigationDrawerAdapter extends ListAdapter items) { - this.items = items; - submitList(items); - } - public void setCounts(Map counts) { assertMainThread(); this.counts = counts; @@ -100,11 +92,6 @@ public class NavigationDrawerAdapter extends ListAdapter getItems() { - assertMainThread(); - return newArrayList(items); - } - @NonNull @Override public FilterViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { diff --git a/app/src/main/java/com/todoroo/astrid/gtasks/GtasksFilterExposer.java b/app/src/main/java/com/todoroo/astrid/gtasks/GtasksFilterExposer.java index 288f97cdc..14f40e7ba 100644 --- a/app/src/main/java/com/todoroo/astrid/gtasks/GtasksFilterExposer.java +++ b/app/src/main/java/com/todoroo/astrid/gtasks/GtasksFilterExposer.java @@ -6,6 +6,8 @@ package com.todoroo.astrid.gtasks; +import static com.todoroo.andlib.utility.DateUtilities.now; + import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.GtasksFilter; import java.util.ArrayList; @@ -41,7 +43,7 @@ public class GtasksFilterExposer { } public Map> getFilters() { - List googleTaskFilters = googleTaskListDao.getGoogleTaskFilters(); + List googleTaskFilters = googleTaskListDao.getGoogleTaskFilters(now()); LinkedHashMap> filters = new LinkedHashMap<>(); for (GoogleTaskFilters filter : googleTaskFilters) { if (!filters.containsKey(filter.googleTaskAccount)) { 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 148f2dfbe..1e50eb0ca 100644 --- a/app/src/main/java/com/todoroo/astrid/tags/TagFilterExposer.java +++ b/app/src/main/java/com/todoroo/astrid/tags/TagFilterExposer.java @@ -7,6 +7,7 @@ package com.todoroo.astrid.tags; import static com.google.common.collect.Lists.transform; +import static com.todoroo.andlib.utility.DateUtilities.now; import com.google.common.base.Strings; import com.todoroo.astrid.api.Filter; @@ -42,7 +43,7 @@ public class TagFilterExposer { } public List getFilters() { - return transform(tagDataDao.getTagFilters(), TagFilters::toTagFilter); + return transform(tagDataDao.getTagFilters(now()), TagFilters::toTagFilter); } public Filter getFilterByUuid(String uuid) { diff --git a/app/src/main/java/org/tasks/caldav/CaldavFilterExposer.java b/app/src/main/java/org/tasks/caldav/CaldavFilterExposer.java index 91d225b39..10cceb94e 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavFilterExposer.java +++ b/app/src/main/java/org/tasks/caldav/CaldavFilterExposer.java @@ -1,5 +1,7 @@ package org.tasks.caldav; +import static com.todoroo.andlib.utility.DateUtilities.now; + import com.todoroo.astrid.api.CaldavFilter; import com.todoroo.astrid.api.Filter; import java.util.ArrayList; @@ -25,7 +27,7 @@ public class CaldavFilterExposer { } public Map> getFilters() { - List caldavFilters = caldavDao.getCaldavFilters(); + List caldavFilters = caldavDao.getCaldavFilters(now()); LinkedHashMap> filters = new LinkedHashMap<>(); for (CaldavFilters filter : caldavFilters) { if (!filters.containsKey(filter.caldavAccount)) { diff --git a/app/src/main/java/org/tasks/data/CaldavDao.java b/app/src/main/java/org/tasks/data/CaldavDao.java index 75c249204..0465ac61e 100644 --- a/app/src/main/java/org/tasks/data/CaldavDao.java +++ b/app/src/main/java/org/tasks/data/CaldavDao.java @@ -93,8 +93,8 @@ public interface CaldavDao { + " FROM caldav_lists" + " LEFT JOIN caldav_accounts ON caldav_lists.cdl_account = caldav_accounts.cda_uuid" + " LEFT JOIN caldav_tasks ON caldav_tasks.cd_calendar = caldav_lists.cdl_uuid" - + " LEFT JOIN tasks ON caldav_tasks.cd_task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil = 0" + + " LEFT JOIN tasks ON caldav_tasks.cd_task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil < :now" + " GROUP BY caldav_lists.cdl_uuid" + " ORDER BY caldav_accounts.cda_name COLLATE NOCASE, caldav_lists.cdl_name COLLATE NOCASE") - List getCaldavFilters(); + List getCaldavFilters(long now); } diff --git a/app/src/main/java/org/tasks/data/GoogleTaskListDao.java b/app/src/main/java/org/tasks/data/GoogleTaskListDao.java index 39e91ec81..d240237e8 100644 --- a/app/src/main/java/org/tasks/data/GoogleTaskListDao.java +++ b/app/src/main/java/org/tasks/data/GoogleTaskListDao.java @@ -61,8 +61,8 @@ public abstract class GoogleTaskListDao { + " FROM google_task_lists" + " LEFT JOIN google_task_accounts ON google_task_lists.gtl_account = google_task_accounts.gta_account" + " LEFT JOIN google_tasks ON google_tasks.gt_list_id = google_task_lists.gtl_remote_id" - + " LEFT JOIN tasks ON google_tasks.gt_task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil = 0" + + " LEFT JOIN tasks ON google_tasks.gt_task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil < :now" + " GROUP BY google_task_lists.gtl_remote_id" + " ORDER BY google_task_lists.gtl_account COLLATE NOCASE, google_task_lists.gtl_title COLLATE NOCASE") - public abstract List getGoogleTaskFilters(); + public abstract List getGoogleTaskFilters(long now); } diff --git a/app/src/main/java/org/tasks/data/TagDataDao.java b/app/src/main/java/org/tasks/data/TagDataDao.java index b836d9d77..23bdc8bb8 100644 --- a/app/src/main/java/org/tasks/data/TagDataDao.java +++ b/app/src/main/java/org/tasks/data/TagDataDao.java @@ -51,9 +51,9 @@ public abstract class TagDataDao { "SELECT tagdata.*, COUNT(tasks._id) AS count" + " FROM tagdata" + " LEFT JOIN tags ON tags.tag_uid = tagdata.remoteId" - + " LEFT JOIN tasks ON tags.task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil = 0" + + " LEFT JOIN tasks ON tags.task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil < :now" + " WHERE tagdata.name IS NOT NULL AND tagdata.name != ''" + " GROUP BY tagdata.remoteId" + " ORDER BY tagdata.name COLLATE NOCASE") - public abstract List getTagFilters(); + public abstract List getTagFilters(long now); } diff --git a/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.java b/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.java index 4227ad792..161238804 100644 --- a/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.java +++ b/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.java @@ -4,6 +4,8 @@ import static android.app.Activity.RESULT_OK; import static com.google.common.collect.Iterables.filter; import static com.todoroo.andlib.utility.AndroidUtilities.assertNotMainThread; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop; +import static org.tasks.LocalBroadcastManager.REFRESH; +import static org.tasks.LocalBroadcastManager.REFRESH_LIST; import android.app.Activity; import android.content.BroadcastReceiver; @@ -225,21 +227,13 @@ public class NavigationDrawerFragment extends InjectingFragment { return Single.fromCallable(() -> filterProvider.getItems(true)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .doOnSuccess(adapter::setData) + .doOnSuccess(adapter::submitList) .observeOn(Schedulers.io()) .map(this::refreshFilterCount) .observeOn(AndroidSchedulers.mainThread()) .subscribe(adapter::setCounts); } - private Disposable updateCount() { - List items = adapter.getItems(); - return Single.fromCallable(() -> this.refreshFilterCount(items)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(adapter::setCounts); - } - private Map refreshFilterCount(List items) { assertNotMainThread(); @@ -257,9 +251,7 @@ public class NavigationDrawerFragment extends InjectingFragment { return; } String action = intent.getAction(); - if (LocalBroadcastManager.REFRESH.equals(action)) { - disposables.add(updateCount()); - } else if (LocalBroadcastManager.REFRESH_LIST.equals(action)) { + if (REFRESH.equals(action) || REFRESH_LIST.equals(action)) { disposables.add(updateFilters()); } }