Fix drawer count issues

pull/848/head
Alex Baker 5 years ago
parent f3d2a3323e
commit dc4ab11583

@ -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

@ -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<FilterListItem, FilterV
private OnClick onClick;
private Filter selected = null;
private Map<Filter, Integer> counts = new HashMap<>();
private List<FilterListItem> items;
@Inject
public NavigationDrawerAdapter(
@ -75,11 +72,6 @@ public class NavigationDrawerAdapter extends ListAdapter<FilterListItem, FilterV
selected = savedInstanceState.getParcelable(TOKEN_SELECTED);
}
public void setData(List<FilterListItem> items) {
this.items = items;
submitList(items);
}
public void setCounts(Map<Filter, Integer> counts) {
assertMainThread();
this.counts = counts;
@ -100,11 +92,6 @@ public class NavigationDrawerAdapter extends ListAdapter<FilterListItem, FilterV
notifyDataSetChanged();
}
public List<FilterListItem> getItems() {
assertMainThread();
return newArrayList(items);
}
@NonNull
@Override
public FilterViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

@ -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<GoogleTaskAccount, List<Filter>> getFilters() {
List<GoogleTaskFilters> googleTaskFilters = googleTaskListDao.getGoogleTaskFilters();
List<GoogleTaskFilters> googleTaskFilters = googleTaskListDao.getGoogleTaskFilters(now());
LinkedHashMap<GoogleTaskAccount, List<Filter>> filters = new LinkedHashMap<>();
for (GoogleTaskFilters filter : googleTaskFilters) {
if (!filters.containsKey(filter.googleTaskAccount)) {

@ -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<Filter> getFilters() {
return transform(tagDataDao.getTagFilters(), TagFilters::toTagFilter);
return transform(tagDataDao.getTagFilters(now()), TagFilters::toTagFilter);
}
public Filter getFilterByUuid(String uuid) {

@ -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<CaldavAccount, List<Filter>> getFilters() {
List<CaldavFilters> caldavFilters = caldavDao.getCaldavFilters();
List<CaldavFilters> caldavFilters = caldavDao.getCaldavFilters(now());
LinkedHashMap<CaldavAccount, List<Filter>> filters = new LinkedHashMap<>();
for (CaldavFilters filter : caldavFilters) {
if (!filters.containsKey(filter.caldavAccount)) {

@ -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<CaldavFilters> getCaldavFilters();
List<CaldavFilters> getCaldavFilters(long now);
}

@ -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<GoogleTaskFilters> getGoogleTaskFilters();
public abstract List<GoogleTaskFilters> getGoogleTaskFilters(long now);
}

@ -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<TagFilters> getTagFilters();
public abstract List<TagFilters> getTagFilters(long now);
}

@ -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<FilterListItem> items = adapter.getItems();
return Single.fromCallable(() -> this.refreshFilterCount(items))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(adapter::setCounts);
}
private Map<Filter, Integer> refreshFilterCount(List<FilterListItem> 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());
}
}

Loading…
Cancel
Save