From eabe880f522fa0fe75be7d42572591f8d67a504c Mon Sep 17 00:00:00 2001 From: Joshua Ball Date: Wed, 29 Sep 2010 16:40:26 -0700 Subject: [PATCH] Fixed bug in producteev filters. If multiple users had the same name, then only one of them would show up in the filters. Also, if a user existed in multiple workspaces, one of them would get picked randomly for the filter, and all tasks assigned to that user but on a workspace other than the randomly picked one would not show up. Now all tasks by that user appear, regardless of workspace. Also, it's 9 lines shorter. :) --- .../producteev/ProducteevFilterExposer.java | 40 +++++++------------ 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevFilterExposer.java index 7d88030ad..8d3e75e39 100644 --- a/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevFilterExposer.java @@ -3,8 +3,7 @@ */ package com.todoroo.astrid.producteev; -import java.util.TreeMap; -import java.util.Map.Entry; +import java.util.TreeSet; import android.content.BroadcastReceiver; import android.content.ContentValues; @@ -14,7 +13,6 @@ import android.content.Intent; import com.timsu.astrid.R; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.QueryTemplate; -import com.todoroo.andlib.utility.Pair; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterCategory; @@ -27,6 +25,7 @@ import com.todoroo.astrid.data.StoreObject; import com.todoroo.astrid.producteev.sync.ProducteevDashboard; import com.todoroo.astrid.producteev.sync.ProducteevDataService; import com.todoroo.astrid.producteev.sync.ProducteevTask; +import com.todoroo.astrid.producteev.sync.ProducteevUser; /** * Exposes filters based on Producteev Dashboards @@ -59,20 +58,19 @@ public class ProducteevFilterExposer extends BroadcastReceiver { return filter; } - private Filter filterFromUser(Context context, String user, Pair ids) { - String title = context.getString(R.string.producteev_FEx_responsible_title, user); + private Filter filterFromUser(Context context, ProducteevUser user) { + String title = context.getString(R.string.producteev_FEx_responsible_title, user.toString()); ContentValues values = new ContentValues(); values.put(Metadata.KEY.name, ProducteevTask.METADATA_KEY); - values.put(ProducteevTask.DASHBOARD_ID.name, ids.getLeft()); values.put(ProducteevTask.ID.name, 0); values.put(ProducteevTask.CREATOR_ID.name, 0); - values.put(ProducteevTask.RESPONSIBLE_ID.name, ids.getRight()); - Filter filter = new Filter(user, title, new QueryTemplate().join( + values.put(ProducteevTask.RESPONSIBLE_ID.name, user.getId()); + Filter filter = new Filter(user.toString(), title, new QueryTemplate().join( ProducteevDataService.METADATA_JOIN).where(Criterion.and( MetadataCriteria.withKey(ProducteevTask.METADATA_KEY), TaskCriteria.isActive(), TaskCriteria.isVisible(), - ProducteevTask.RESPONSIBLE_ID.eq(ids.getRight()))), + ProducteevTask.RESPONSIBLE_ID.eq(user.getId()))), values); return filter; @@ -100,11 +98,11 @@ public class ProducteevFilterExposer extends BroadcastReceiver { dashboardFilters); // load responsible people - TreeMap> people = loadResponsiblePeople(dashboards); + TreeSet people = loadResponsiblePeople(dashboards); Filter[] peopleFilters = new Filter[people.size()]; int index = 0; - for(Entry> person : people.entrySet()) - peopleFilters[index++] = filterFromUser(context, person.getKey(), person.getValue()); + for (ProducteevUser person : people) + peopleFilters[index++] = filterFromUser(context, person); FilterCategory producteevUsers = new FilterCategory(context.getString(R.string.producteev_FEx_responsible), peopleFilters); @@ -124,22 +122,14 @@ public class ProducteevFilterExposer extends BroadcastReceiver { * @return people in a map of name => pair(dashboard id, user id) */ @SuppressWarnings("nls") - private TreeMap> loadResponsiblePeople( - StoreObject[] dashboards) { - TreeMap> results = new TreeMap>(); + private TreeSet loadResponsiblePeople(StoreObject[] dashboards) { + TreeSet users = new TreeSet(); for(StoreObject dashboard : dashboards) { - String users = dashboard.getValue(ProducteevDashboard.USERS); - String[] entries = users.split(";"); - for(String entry : entries) { - String[] data = entry.split(","); - if(data.length != 2) - continue; - results.put(data[1], new Pair( - dashboard.getValue(ProducteevDashboard.REMOTE_ID), data[0])); // name, id - } + ProducteevDashboard elDashboard = new ProducteevDashboard(dashboard); + users.addAll(elDashboard.getUsers()); } - return results; + return users; } }