From 4dd8bff567c6234cfaff668b7fbcf378648d962b Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Wed, 9 May 2012 19:25:37 -0700 Subject: [PATCH] Added a default people filter that shows all the tasks you have shared with anyone --- .../astrid/people/PeopleFilterExposer.java | 58 +++++++++++++++++-- .../astrid/people/PeopleViewActivity.java | 3 +- .../astrid/people/PersonViewFragment.java | 37 +++++++----- astrid/res/values/strings-actfm.xml | 6 ++ .../astrid/activity/TaskListActivity.java | 9 +-- 5 files changed, 88 insertions(+), 25 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterExposer.java index b204f79de..9a0775fae 100644 --- a/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterExposer.java @@ -10,12 +10,16 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; +import com.timsu.astrid.R; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Field; +import com.todoroo.andlib.sql.Join; import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.QueryTemplate; +import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.astrid.actfm.sync.ActFmSyncService; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; @@ -23,13 +27,16 @@ import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.api.FilterWithCustomIntent; import com.todoroo.astrid.api.FilterWithUpdate; import com.todoroo.astrid.core.PluginServices; +import com.todoroo.astrid.data.Metadata; +import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.User; +import com.todoroo.astrid.tags.TagService; public class PeopleFilterExposer extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - FilterListItem[] listAsArray = prepareFilters(); + FilterListItem[] listAsArray = prepareFilters(context); Intent broadcastIntent = new Intent(PeopleFilterAdapter.BROADCAST_SEND_PEOPLE_FILTERS); broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, listAsArray); @@ -37,13 +44,14 @@ public class PeopleFilterExposer extends BroadcastReceiver { context.sendBroadcast(broadcastIntent); } - private FilterListItem[] prepareFilters() { + private FilterListItem[] prepareFilters(Context context) { TodorooCursor users = PluginServices.getUserDao().query(Query.select(User.PROPERTIES) .orderBy(Order.asc(User.NAME), Order.asc(User.EMAIL))); try { - FilterListItem[] items = new FilterListItem[users.getCount()]; + FilterListItem[] items = new FilterListItem[users.getCount() + 1]; + items[0] = mySharedTasks(context); User user = new User(); - int i = 0; + int i = 1; for (users.moveToFirst(); !users.isAfterLast(); users.moveToNext()) { user.readFromCursor(users); Filter currFilter = filterFromUserData(user); @@ -89,4 +97,46 @@ public class PeopleFilterExposer extends BroadcastReceiver { return filter; } + + @SuppressWarnings("nls") + public static FilterWithCustomIntent mySharedTasks(Context context) { + AndroidUtilities.copyDatabases(context, "/sdcard/databases"); + TodorooCursor tagsWithMembers = PluginServices.getTagDataService() + .query(Query.select(TagData.NAME, TagData.MEMBERS).where(TagData.MEMBER_COUNT.gt(0))); + String[] names; + try { + if (tagsWithMembers.getCount() == 0) { + names = new String[1]; + names[0] = "\"\""; + } else { + names = new String[tagsWithMembers.getCount()]; + TagData curr = new TagData(); + int i = 0; + for (tagsWithMembers.moveToFirst(); !tagsWithMembers.isAfterLast(); tagsWithMembers.moveToNext()) { + curr.readFromCursor(tagsWithMembers); + names[i] = "\"" + curr.getValue(TagData.NAME) + "\""; + System.err.println("Tag data " + curr.getValue(TagData.NAME) + " has members " + curr.getValue(TagData.MEMBERS)); + i++; + } + } + } finally { + tagsWithMembers.close(); + } + + String title = context.getString(R.string.actfm_my_shared_tasks_title); + QueryTemplate template = new QueryTemplate().join(Join.inner(Metadata.TABLE.as("mtags"), + Criterion.and(Task.ID.eq(Field.field("mtags." + Metadata.TASK.name)), + Field.field("mtags." + Metadata.KEY.name).eq(TagService.KEY), + Field.field("mtags." + TagService.TAG.name).in(names)))); + + FilterWithUpdate filter = new FilterWithUpdate(title, title, template, null); + + filter.customTaskList = new ComponentName(ContextManager.getContext(), PersonViewFragment.class); + + Bundle extras = new Bundle(); + extras.putBoolean(PersonViewFragment.EXTRA_HIDE_QUICK_ADD, true); + filter.customExtras = extras; + + return filter; + } } diff --git a/astrid/plugin-src/com/todoroo/astrid/people/PeopleViewActivity.java b/astrid/plugin-src/com/todoroo/astrid/people/PeopleViewActivity.java index 27272f3b4..3204a539e 100644 --- a/astrid/plugin-src/com/todoroo/astrid/people/PeopleViewActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/people/PeopleViewActivity.java @@ -33,8 +33,7 @@ public class PeopleViewActivity extends TaskListActivity { @Override protected Filter getDefaultFilter() { - // TODO More suitable default - return super.getDefaultFilter(); + return PeopleFilterExposer.mySharedTasks(this); } @Override diff --git a/astrid/plugin-src/com/todoroo/astrid/people/PersonViewFragment.java b/astrid/plugin-src/com/todoroo/astrid/people/PersonViewFragment.java index 954f9dd2b..d1e1792ef 100644 --- a/astrid/plugin-src/com/todoroo/astrid/people/PersonViewFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/people/PersonViewFragment.java @@ -25,6 +25,8 @@ public class PersonViewFragment extends TaskListFragment { public static final String EXTRA_USER_ID_LOCAL = "user_local_id"; //$NON-NLS-1$ + public static final String EXTRA_HIDE_QUICK_ADD = "hide_quickAdd"; //$NON-NLS-1$ + private static final String LAST_FETCH_KEY = "actfm_last_user_"; //$NON-NLS-1$ protected static final int MENU_REFRESH_ID = MENU_SUPPORT_ID + 1; @@ -54,8 +56,8 @@ public class PersonViewFragment extends TaskListFragment { super.initializeData(); if (extras.containsKey(EXTRA_USER_ID_LOCAL)) { user = userDao.fetch(extras.getLong(EXTRA_USER_ID_LOCAL), User.PROPERTIES); - ((TextView)taskListView.findViewById(android.R.id.empty)).setText(getEmptyDisplayString()); } + ((TextView)taskListView.findViewById(android.R.id.empty)).setText(getEmptyDisplayString()); } @Override @@ -65,6 +67,9 @@ public class PersonViewFragment extends TaskListFragment { if (user != null) quickAddBar.getQuickAddBox().setHint(getString(R.string.TLA_quick_add_hint_assign, user.getDisplayName())); + if (extras.containsKey(EXTRA_HIDE_QUICK_ADD)) + quickAddBar.setVisibility(View.GONE); + } @Override @@ -99,24 +104,26 @@ public class PersonViewFragment extends TaskListFragment { } private void refreshData(final boolean manual) { - ((TextView)taskListView.findViewById(android.R.id.empty)).setText(R.string.DLG_loading); - - syncService.synchronizeList(user, manual, new ProgressBarSyncResultCallback(getActivity(), this, - R.id.progressBar, new Runnable() { - @Override - public void run() { - if (manual) - ContextManager.getContext().sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH)); - else - refresh(); - ((TextView)taskListView.findViewById(android.R.id.empty)).setText(getEmptyDisplayString()); - } - })); + if (user != null) { + ((TextView)taskListView.findViewById(android.R.id.empty)).setText(R.string.DLG_loading); + + syncService.synchronizeList(user, manual, new ProgressBarSyncResultCallback(getActivity(), this, + R.id.progressBar, new Runnable() { + @Override + public void run() { + if (manual) + ContextManager.getContext().sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH)); + else + refresh(); + ((TextView)taskListView.findViewById(android.R.id.empty)).setText(getEmptyDisplayString()); + } + })); + } } private String getEmptyDisplayString() { String userName = user != null ? user.getDisplayName() : null; - return TextUtils.isEmpty(userName) ? getString(R.string.TLA_no_items) : getString(R.string.TLA_no_items_person, userName); + return TextUtils.isEmpty(userName) ? getString(R.string.actfm_my_shared_tasks_empty) : getString(R.string.TLA_no_items_person, userName); } } diff --git a/astrid/res/values/strings-actfm.xml b/astrid/res/values/strings-actfm.xml index 83f0dfbb8..e20f85604 100644 --- a/astrid/res/values/strings-actfm.xml +++ b/astrid/res/values/strings-actfm.xml @@ -45,6 +45,12 @@ Stay Here + + + My Shared Tasks + + + No shared tasks diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index dedaee407..f42948f68 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -154,7 +154,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener int contentView = getContentView(); if (contentView == R.layout.task_list_wrapper_activity) swipeEnabled = true; - setContentView(getContentView()); + setContentView(contentView); ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); @@ -176,6 +176,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener if (extras != null) extras = (Bundle) extras.clone(); + Filter savedFilter = getIntent().getParcelableExtra(TaskListFragment.TOKEN_FILTER); if (Intent.ACTION_SEARCH.equals(getIntent().getAction())) { String query = getIntent().getStringExtra(SearchManager.QUERY).trim(); @@ -185,14 +186,14 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener "%" + //$NON-NLS-1$ query.toUpperCase() + "%")), //$NON-NLS-1$ null); - if (extras == null) - extras = new Bundle(); - extras.putParcelable(TaskListFragment.TOKEN_FILTER, savedFilter); } if (savedFilter == null) savedFilter = getDefaultFilter(); + if (extras == null) + extras = new Bundle(); + extras.putParcelable(TaskListFragment.TOKEN_FILTER, savedFilter); if (swipeIsEnabled()) { FilterListFragment flf = getFilterListFragment();