diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index 56bd26d27..626769be1 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -244,6 +244,12 @@ + + + + + + diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksCustomFilterCriteriaExposer.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksCustomFilterCriteriaExposer.java new file mode 100644 index 000000000..29bb639df --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksCustomFilterCriteriaExposer.java @@ -0,0 +1,89 @@ +package com.todoroo.astrid.gtasks; + +import android.content.BroadcastReceiver; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.content.res.Resources; +import android.graphics.drawable.BitmapDrawable; + +import com.timsu.astrid.R; +import com.todoroo.andlib.data.AbstractModel; +import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.service.ContextManager; +import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Join; +import com.todoroo.andlib.sql.Query; +import com.todoroo.astrid.api.AstridApiConstants; +import com.todoroo.astrid.api.CustomFilterCriterion; +import com.todoroo.astrid.api.MultipleSelectCriterion; +import com.todoroo.astrid.dao.TaskDao; +import com.todoroo.astrid.data.Metadata; +import com.todoroo.astrid.data.MetadataApiDao.MetadataCriteria; +import com.todoroo.astrid.data.StoreObject; +import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.service.AstridDependencyInjector; + +public class GtasksCustomFilterCriteriaExposer extends BroadcastReceiver { + @Autowired private GtasksPreferenceService gtasksPreferenceService; + @Autowired private GtasksListService gtasksListService; + + private static final String IDENTIFIER = "gtaskslist"; //$NON-NLS-1$ + + static { + AstridDependencyInjector.initialize(); + } + + @SuppressWarnings("nls") + @Override + public void onReceive(Context context, Intent intent) { + ContextManager.setContext(context); + DependencyInjectionService.getInstance().inject(this); + + // if we aren't logged in, don't expose sync action + if(!gtasksPreferenceService.isLoggedIn()) + return; + + Resources r = context.getResources(); + + + StoreObject[] lists = gtasksListService.getLists(); + + CustomFilterCriterion[] result = new CustomFilterCriterion[1]; + String[] listNames = new String[lists.length]; + String[] listIds = new String[lists.length]; + for (int i = 0; i < lists.length; i++) { + listNames[i] = lists[i].getValue(GtasksList.NAME); + listIds[i] = lists[i].getValue(GtasksList.REMOTE_ID); + } + + ContentValues values = new ContentValues(); + values.putAll(GtasksMetadata.createEmptyMetadata(AbstractModel.NO_ID).getMergedValues()); + values.remove(Metadata.TASK.name); + values.put(GtasksMetadata.LIST_ID.name, "?"); + + CustomFilterCriterion criterion = new MultipleSelectCriterion( + IDENTIFIER, + context.getString(R.string.CFC_gtasks_list_text), + + Query.select(Metadata.TASK).from(Metadata.TABLE).join(Join.inner( + Task.TABLE, Metadata.TASK.eq(Task.ID))).where(Criterion.and( + TaskDao.TaskCriteria.activeAndVisible(), + MetadataCriteria.withKey(GtasksMetadata.METADATA_KEY), + GtasksMetadata.LIST_ID.eq("?"))).toString(), + + values, + listNames, + listIds, + ((BitmapDrawable)r.getDrawable(R.drawable.gtasks_icon)).getBitmap(), + context.getString(R.string.CFC_gtasks_list_name)); + result[0] = criterion; + + // transmit filter list + Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_CUSTOM_FILTER_CRITERIA); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ADDON, GtasksPreferenceService.IDENTIFIER); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, result); + context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + } +} diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksFilterExposer.java index af208cbaf..01837098b 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksFilterExposer.java @@ -26,11 +26,11 @@ import com.todoroo.astrid.api.FilterCategory; import com.todoroo.astrid.api.FilterListHeader; import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.api.FilterWithCustomIntent; +import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.MetadataApiDao.MetadataCriteria; import com.todoroo.astrid.data.StoreObject; import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.data.TaskApiDao.TaskCriteria; import com.todoroo.astrid.service.AstridDependencyInjector; /** @@ -60,8 +60,7 @@ public class GtasksFilterExposer extends BroadcastReceiver { ContextManager.getString(R.string.gtasks_FEx_title, listName), new QueryTemplate().join( Join.left(Metadata.TABLE, Task.ID.eq(Metadata.TASK))).where(Criterion.and( MetadataCriteria.withKey(GtasksMetadata.METADATA_KEY), - TaskCriteria.notDeleted(), - TaskCriteria.isActive(), + TaskCriteria.activeAndVisible(), GtasksMetadata.LIST_ID.eq(list.getValue(GtasksList.REMOTE_ID)))).orderBy( Order.asc(Functions.cast(GtasksMetadata.ORDER, "INTEGER"))), //$NON-NLS-1$ values); diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/sync/GtasksSyncProvider.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/sync/GtasksSyncProvider.java index 8c2d2446f..c02b45136 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/sync/GtasksSyncProvider.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/sync/GtasksSyncProvider.java @@ -31,6 +31,7 @@ import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.Preferences; +import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.StoreObject; @@ -49,21 +50,20 @@ import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.sync.SyncContainer; import com.todoroo.astrid.sync.SyncProvider; import com.todoroo.astrid.utility.Constants; -import com.todoroo.astrid.utility.Flags; import com.todoroo.gtasks.GoogleConnectionManager; import com.todoroo.gtasks.GoogleLoginException; import com.todoroo.gtasks.GoogleTaskService; +import com.todoroo.gtasks.GoogleTaskService.ConvenientTaskCreator; import com.todoroo.gtasks.GoogleTaskTask; import com.todoroo.gtasks.GoogleTaskView; import com.todoroo.gtasks.GoogleTasksException; -import com.todoroo.gtasks.GoogleTaskService.ConvenientTaskCreator; import com.todoroo.gtasks.actions.Actions; import com.todoroo.gtasks.actions.GetTasksAction; import com.todoroo.gtasks.actions.ListAction; import com.todoroo.gtasks.actions.ListActions; -import com.todoroo.gtasks.actions.ListCreationAction; import com.todoroo.gtasks.actions.ListActions.TaskBuilder; import com.todoroo.gtasks.actions.ListActions.TaskModifier; +import com.todoroo.gtasks.actions.ListCreationAction; @SuppressWarnings("nls") public class GtasksSyncProvider extends SyncProvider { @@ -226,7 +226,8 @@ public class GtasksSyncProvider extends SyncProvider { gtasksPreferenceService.recordSuccessfulSync(); StatisticsService.reportEvent("gtasks-sync-finished"); //$NON-NLS-1$ - Flags.set(Flags.REFRESH); + Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH); + ContextManager.getContext().sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); } catch (IllegalStateException e) { // occurs when application was closed } catch (Exception e) { diff --git a/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevCustomFilterCriteriaExposer.java b/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevCustomFilterCriteriaExposer.java index 7656a2a14..cfc065fba 100644 --- a/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevCustomFilterCriteriaExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevCustomFilterCriteriaExposer.java @@ -56,7 +56,7 @@ public class ProducteevCustomFilterCriteriaExposer extends BroadcastReceiver { workspaceNames[i] = dashboards[i].getName(); workspaceIds[i] = String.valueOf(dashboards[i].getId()); } - ContentValues values = new ContentValues(2); + ContentValues values = new ContentValues(); values.put(Metadata.KEY.name, ProducteevTask.METADATA_KEY); values.put(ProducteevTask.DASHBOARD_ID.name, "?"); CustomFilterCriterion criterion = new MultipleSelectCriterion( @@ -68,7 +68,7 @@ public class ProducteevCustomFilterCriteriaExposer extends BroadcastReceiver { TaskDao.TaskCriteria.activeAndVisible(), MetadataDao.MetadataCriteria.withKey(ProducteevTask.METADATA_KEY), ProducteevTask.DASHBOARD_ID.eq("?"))).toString(), - values, // what is this? + values, workspaceNames, workspaceIds, ((BitmapDrawable)r.getDrawable(R.drawable.silk_folder)).getBitmap(), @@ -102,7 +102,7 @@ public class ProducteevCustomFilterCriteriaExposer extends BroadcastReceiver { TaskDao.TaskCriteria.activeAndVisible(), MetadataDao.MetadataCriteria.withKey(ProducteevTask.METADATA_KEY), ProducteevTask.RESPONSIBLE_ID.eq("?"))).toString(), - values, // what is this? + values, userNames, userIds, ((BitmapDrawable)r.getDrawable(R.drawable.silk_user_gray)).getBitmap(), diff --git a/astrid/res/values/strings-gtasks.xml b/astrid/res/values/strings-gtasks.xml index a4271fc21..c163695b4 100644 --- a/astrid/res/values/strings-gtasks.xml +++ b/astrid/res/values/strings-gtasks.xml @@ -19,6 +19,10 @@ Drag the grabber on the left side of a task to rearrange it. Swipe the grabber left or right to change indentation. + + In list: ? + + In list...