From c43ff1aea6abe14f8318702e2e66e45bdf09da26 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Tue, 29 Jun 2010 15:58:54 -0700 Subject: [PATCH] Made lots of changes in an attempt to clean stuff up --- astrid/.settings/org.eclipse.jdt.core.prefs | 6 +- astrid/.settings/org.eclipse.jdt.ui.prefs | 54 ++++- astrid/AndroidManifest.xml | 27 +++ .../astrid/api/AstridApiConstants.java | 14 +- .../astrid/api/AstridContentProvider.java | 184 ------------------ .../com/todoroo/astrid/api/EditOperation.java | 15 +- .../com/todoroo/astrid/api/Filter.java | 67 ++++--- .../todoroo/astrid/api/FilterCategory.java | 22 ++- .../todoroo/astrid/api/FilterListHeader.java | 35 ++-- .../todoroo/astrid/api/FilterListItem.java | 1 + .../com/todoroo/astrid/api/Plugin.java | 93 +++++++++ .../com/todoroo/astrid/api/TaskDetail.java | 20 +- .../com/todoroo/andlib/data/GenericDao.java | 4 +- .../com/todoroo/andlib/data/Property.java | 2 +- .../com/todoroo/andlib/data/Table.java | 5 +- .../todoroo/andlib/data/sql/OrderType.java | 5 - .../andlib/{data => }/sql/Constants.java | 4 +- .../andlib/{data => }/sql/Criterion.java | 16 +- .../andlib/{data => }/sql/DBObject.java | 6 +- .../andlib/{data => }/sql/EqCriterion.java | 2 +- .../todoroo/andlib/{data => }/sql/Field.java | 16 +- .../com/todoroo/andlib/sql/Functions.java | 15 ++ .../andlib/{data => }/sql/GroupBy.java | 2 +- .../todoroo/andlib/{data => }/sql/Join.java | 20 +- .../andlib/{data => }/sql/JoinType.java | 2 +- .../andlib/{data => }/sql/Operator.java | 4 +- .../todoroo/andlib/{data => }/sql/Order.java | 14 +- .../com/todoroo/andlib/sql/OrderType.java | 5 + .../todoroo/andlib/{data => }/sql/Query.java | 47 +++-- .../com/todoroo/andlib/sql/QueryTemplate.java | 108 ++++++++++ .../sql/Table.java => sql/SqlTable.java} | 10 +- .../andlib/{data => }/sql/UnaryCriterion.java | 4 +- .../andlib/utility/AndroidUtilities.java | 4 - .../todoroo/andlib/utility/DateUtilities.java | 20 +- ...terExposer.java => CoreFilterExposer.java} | 33 ++-- .../todoroo/astrid/filters/CorePlugin.java | 25 +++ .../astrid/filters/ExtendedFilterExposer.java | 61 ++++++ .../astrid/filters/ExtendedPlugin.java | 25 +++ .../todoroo/astrid/tags/FilterExposer.java | 81 ++++++++ .../com/todoroo/astrid/tags/TagService.java | 8 +- .../values/{colors-legacy.xml => colors.xml} | 0 ...filter_strings.xml => strings-filters.xml} | 0 .../{strings.xml => strings-legacy.xml} | 0 astrid/res/values/strings-tags.xml | 24 +++ .../res/values/{styles.xml => styles-3.0.xml} | 0 .../astrid/activity/FilterListActivity.java | 2 +- .../todoroo/astrid/activity/HomeActivity.java | 4 +- .../astrid/activity/TaskListActivity.java | 6 +- .../todoroo/astrid/adapter/TaskAdapter.java | 4 +- .../com/todoroo/astrid/dao/MetadataDao.java | 6 +- .../src/com/todoroo/astrid/dao/TaskDao.java | 12 +- astrid/src/com/todoroo/astrid/model/Task.java | 71 ++++--- .../service/Astrid2To3UpgradeHelper.java | 4 +- .../astrid/service/MetadataService.java | 6 +- .../todoroo/astrid/service/TaskService.java | 2 +- .../todoroo/astrid/dao/MetadataDaoTests.java | 2 +- .../com/todoroo/astrid/dao/TaskDaoTests.java | 6 +- .../com/todoroo/astrid/model/TaskTests.java | 4 +- .../upgrade/Astrid2To3UpgradeTests.java | 6 +- 59 files changed, 816 insertions(+), 429 deletions(-) delete mode 100644 astrid/api-src/com/todoroo/astrid/api/AstridContentProvider.java create mode 100644 astrid/api-src/com/todoroo/astrid/api/Plugin.java delete mode 100644 astrid/common-src/com/todoroo/andlib/data/sql/OrderType.java rename astrid/common-src/com/todoroo/andlib/{data => }/sql/Constants.java (90%) rename astrid/common-src/com/todoroo/andlib/{data => }/sql/Criterion.java (78%) rename astrid/common-src/com/todoroo/andlib/{data => }/sql/DBObject.java (88%) rename astrid/common-src/com/todoroo/andlib/{data => }/sql/EqCriterion.java (76%) rename astrid/common-src/com/todoroo/andlib/{data => }/sql/Field.java (81%) create mode 100644 astrid/common-src/com/todoroo/andlib/sql/Functions.java rename astrid/common-src/com/todoroo/andlib/{data => }/sql/GroupBy.java (85%) rename astrid/common-src/com/todoroo/andlib/{data => }/sql/Join.java (56%) rename astrid/common-src/com/todoroo/andlib/{data => }/sql/JoinType.java (56%) rename astrid/common-src/com/todoroo/andlib/{data => }/sql/Operator.java (92%) rename astrid/common-src/com/todoroo/andlib/{data => }/sql/Order.java (52%) create mode 100644 astrid/common-src/com/todoroo/andlib/sql/OrderType.java rename astrid/common-src/com/todoroo/andlib/{data => }/sql/Query.java (73%) create mode 100644 astrid/common-src/com/todoroo/andlib/sql/QueryTemplate.java rename astrid/common-src/com/todoroo/andlib/{data/sql/Table.java => sql/SqlTable.java} (52%) rename astrid/common-src/com/todoroo/andlib/{data => }/sql/UnaryCriterion.java (93%) rename astrid/plugin-src/com/todoroo/astrid/filters/{FilterExposer.java => CoreFilterExposer.java} (54%) create mode 100644 astrid/plugin-src/com/todoroo/astrid/filters/CorePlugin.java create mode 100644 astrid/plugin-src/com/todoroo/astrid/filters/ExtendedFilterExposer.java create mode 100644 astrid/plugin-src/com/todoroo/astrid/filters/ExtendedPlugin.java create mode 100644 astrid/plugin-src/com/todoroo/astrid/tags/FilterExposer.java rename astrid/res/values/{colors-legacy.xml => colors.xml} (100%) rename astrid/res/values/{filter_strings.xml => strings-filters.xml} (100%) rename astrid/res/values/{strings.xml => strings-legacy.xml} (100%) create mode 100644 astrid/res/values/strings-tags.xml rename astrid/res/values/{styles.xml => styles-3.0.xml} (100%) diff --git a/astrid/.settings/org.eclipse.jdt.core.prefs b/astrid/.settings/org.eclipse.jdt.core.prefs index f5dd01cd3..0f0ea143b 100644 --- a/astrid/.settings/org.eclipse.jdt.core.prefs +++ b/astrid/.settings/org.eclipse.jdt.core.prefs @@ -1,4 +1,4 @@ -#Mon Jan 04 09:25:09 PST 2010 +#Tue Jun 29 14:53:46 PDT 2010 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 @@ -10,6 +10,8 @@ org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning org.eclipse.jdt.core.compiler.problem.deprecation=warning org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled @@ -29,8 +31,10 @@ org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning diff --git a/astrid/.settings/org.eclipse.jdt.ui.prefs b/astrid/.settings/org.eclipse.jdt.ui.prefs index 94bdf85fb..ace644cbc 100644 --- a/astrid/.settings/org.eclipse.jdt.ui.prefs +++ b/astrid/.settings/org.eclipse.jdt.ui.prefs @@ -1,4 +1,4 @@ -#Thu Jul 02 10:50:56 PDT 2009 +#Tue Jun 29 14:53:46 PDT 2010 cleanup.add_default_serial_version_id=true cleanup.add_generated_serial_version_id=false cleanup.add_missing_annotations=true @@ -52,6 +52,58 @@ cleanup.use_this_for_non_static_method_access_only_if_necessary=true cleanup_profile=_Astrid cleanup_settings_version=2 eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true formatter_profile=_Astrid formatter_settings_version=11 org.eclipse.jdt.ui.text.custom_code_templates= +sp_cleanup.add_default_serial_version_id=true +sp_cleanup.add_generated_serial_version_id=false +sp_cleanup.add_missing_annotations=true +sp_cleanup.add_missing_deprecated_annotations=true +sp_cleanup.add_missing_methods=false +sp_cleanup.add_missing_nls_tags=false +sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_serial_version_id=false +sp_cleanup.always_use_blocks=true +sp_cleanup.always_use_parentheses_in_expressions=false +sp_cleanup.always_use_this_for_non_static_field_access=false +sp_cleanup.always_use_this_for_non_static_method_access=false +sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.correct_indentation=false +sp_cleanup.format_source_code=false +sp_cleanup.format_source_code_changes_only=false +sp_cleanup.make_local_variable_final=false +sp_cleanup.make_parameters_final=false +sp_cleanup.make_private_fields_final=true +sp_cleanup.make_type_abstract_if_missing_method=false +sp_cleanup.make_variable_declarations_final=true +sp_cleanup.never_use_blocks=false +sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.on_save_use_additional_actions=true +sp_cleanup.organize_imports=true +sp_cleanup.qualify_static_field_accesses_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_with_declaring_class=false +sp_cleanup.qualify_static_method_accesses_with_declaring_class=false +sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_trailing_whitespaces=true +sp_cleanup.remove_trailing_whitespaces_all=true +sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_casts=false +sp_cleanup.remove_unnecessary_nls_tags=true +sp_cleanup.remove_unused_imports=true +sp_cleanup.remove_unused_local_variables=false +sp_cleanup.remove_unused_private_fields=true +sp_cleanup.remove_unused_private_members=false +sp_cleanup.remove_unused_private_methods=true +sp_cleanup.remove_unused_private_types=true +sp_cleanup.sort_members=false +sp_cleanup.sort_members_all=false +sp_cleanup.use_blocks=false +sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_parentheses_in_expressions=false +sp_cleanup.use_this_for_non_static_field_access=false +sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true +sp_cleanup.use_this_for_non_static_method_access=false +sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index 33a6ab837..f153b4607 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -160,6 +160,33 @@ android:readPermission="com.timsu.astrid.permission.READ_TASKS" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/astrid/api-src/com/todoroo/astrid/api/AstridApiConstants.java b/astrid/api-src/com/todoroo/astrid/api/AstridApiConstants.java index b8b73a6ab..8749368df 100644 --- a/astrid/api-src/com/todoroo/astrid/api/AstridApiConstants.java +++ b/astrid/api-src/com/todoroo/astrid/api/AstridApiConstants.java @@ -39,10 +39,22 @@ public class AstridApiConstants { public static final String EXTRAS_ITEMS = "items"; /** - * Extras name for your plug-in name, used for logging errors to LogCat + * Extras name for plug-in object */ public static final String EXTRAS_PLUGIN = "plugin"; + // --- Plug-ins API + + /** + * Action name for broadcast intent requesting filters + */ + public static final String BROADCAST_REQUEST_PLUGINS = PACKAGE + ".REQUEST_PLUGINS"; + + /** + * Action name for broadcast intent sending filters back to Astrid + */ + public static final String BROADCAST_SEND_PLUGINS = PACKAGE + ".SEND_PLUGINS"; + // --- Filters API /** diff --git a/astrid/api-src/com/todoroo/astrid/api/AstridContentProvider.java b/astrid/api-src/com/todoroo/astrid/api/AstridContentProvider.java deleted file mode 100644 index 61b4bf35f..000000000 --- a/astrid/api-src/com/todoroo/astrid/api/AstridContentProvider.java +++ /dev/null @@ -1,184 +0,0 @@ -/** - * See the file "LICENSE" for the full license governing this code. - */ -package com.todoroo.astrid.api; - -import android.net.Uri; - -/** - * Constants for interfacing with Astrid's Content Providers. - * - * @author Tim Su - */ -@SuppressWarnings("nls") -public class AstridContentProvider { - - /** - * Content Provider - */ - public static final String PROVIDER = "com.todoroo.astrid.provider"; - - // --- methods for generating URI's for accessing Astrid data - - /** - * URI for: - *
    - *
  • Queries on multiple tasks - *
  • Inserting new tasks - *
  • Deleting multiple tasks at a time - *
  • Updating multiple tasks at a time - *
- * If your selection clause contains metadata columns, you need to use - * allItemsWithMetadataUri instead of this one. - */ - public static Uri allItemsUri() { - return Uri.parse("content://" + PROVIDER + "/items"); - } - - /** - * URI for: - *
    - *
  • Querying on tasks with metadata columns in selection - *
  • Deleting multiple tasks with metadata columns in selection - *
  • Updating multiple tasks with metadata columns in selection - *
- * If, for example, you have defined metadata key 'tag' and wish to delete - * all tasks where 'tag' = 'deleteme', you would use this URI. For querying - * or insertion, use allItemsUri. - *

- * For queries, allItemsUri will be more efficient, but will - * not work if your selection clause contains columns not mentioned in your - * projection - * - * @param metadata - * array of metadata columns you wish to select using - * - */ - public static Uri allItemsWithMetadataUri(String[] metadata) { - if(metadata == null || metadata.length == 0) - throw new IllegalArgumentException("You must provide metadata"); - StringBuilder builder = new StringBuilder(); - for(int i = 0; i < metadata.length; i++) - builder.append(escapeUriSubComponent(metadata[i])).append( - SUB_COMPONENT_SEPARATOR); - - return Uri.parse("content://" + PROVIDER + "/itemsWith/" + - escapeUriComponent(builder.toString())); - } - - /** - * URI for: - *

    - *
  • Queries on a single task - *
  • Updating fields for a single task - *
  • Deleting a single task - *
- * - * @param id - * id of task to fetch - */ - public static Uri singleItemUri(long id) { - return Uri.parse("content://" + PROVIDER + "/" + id); - } - - /** - * URI for: - *
    - *
  • Queries on multiple tasks, grouped by column - *
- * @param groupBy - * column name to group by - */ - public static Uri groupByUri(String groupBy) { - groupBy = escapeUriComponent(groupBy); - return Uri.parse("content://" + PROVIDER + "/groupby/" + groupBy); - } - - // --- task built-in columns and constnats - - /** - * A task in Astrid represents a single item in a user's task list - * - * @author Tim Su - */ - public static class AstridTask { - - // --- columns - - /** long: Task id */ - public static final String ID = "_id"; - - /** String: name of Task */ - public static final String TITLE = "title"; - - /** int: Task Urgency setting (see Task.URGENCY_*) */ - public static final String URGENCY = "urgency"; - - /** int: Task Importance setting (see Task.IMPORTANCE_*) */ - public static final String IMPORTANCE = "importance"; - - /** int: unixtime Task is due, 0 if not set */ - public static final String DUE_DATE = "dueDate"; - - /** int: unixtime Task should be hidden until, 0 if not set */ - public static final String HIDDEN_UNTIL = "hiddenUntil"; - - /** int: unixtime Task was created */ - public static final String CREATION_DATE = "creationDate"; - - /** int: unixtime Task was completed, 0 if task not completed */ - public static final String COMPLETION_DATE = "completionDate"; - - /** int: unixtime Task was deleted, 0 if task not deleted */ - public static final String DELETION_DATE = "deletionDate"; - - /** int: unixtime Task was modified */ - public static final String MODIFICATION_DATE = "modificationDate"; - - // --- urgency settings - - public static final int URGENCY_NONE = 0; - public static final int URGENCY_TODAY = 1; - public static final int URGENCY_THIS_WEEK = 2; - public static final int URGENCY_THIS_MONTH = 3; - public static final int URGENCY_WITHIN_THREE_MONTHS = 4; - public static final int URGENCY_WITHIN_SIX_MONTHS = 5; - public static final int URGENCY_WITHIN_A_YEAR = 6; - public static final int URGENCY_SPECIFIC_DAY = 7; - public static final int URGENCY_SPECIFIC_DAY_TIME = 8; - - // --- importance settings - - public static final int IMPORTANCE_DO_OR_DIE = 0; - public static final int IMPORTANCE_MUST_DO = 1; - public static final int IMPORTANCE_SHOULD_DO = 2; - public static final int IMPORTANCE_NONE = 3; - - - } - - // --- internal methods - - /** - * Escapes a string for use in a URI. Used internally to pass extra data - * to the content provider. - * @param component - * @return - */ - private static String escapeUriComponent(String component) { - return component.replace("%", "%o").replace("/", "%s"); - } - - private static final String SUB_COMPONENT_SEPARATOR = "|"; - - /** - * Escapes a string for use as part of a URI string. Used internally to pass extra data - * to the content provider. - * @param component - * @return - */ - private static String escapeUriSubComponent(String component) { - return component.replace("$", "$o").replace(SUB_COMPONENT_SEPARATOR, "$s"); - } - -} diff --git a/astrid/api-src/com/todoroo/astrid/api/EditOperation.java b/astrid/api-src/com/todoroo/astrid/api/EditOperation.java index 779b40689..84af715dd 100644 --- a/astrid/api-src/com/todoroo/astrid/api/EditOperation.java +++ b/astrid/api-src/com/todoroo/astrid/api/EditOperation.java @@ -13,12 +13,12 @@ import android.os.Parcelable; * @author Tim Su * */ -public class EditOperation implements Parcelable { +public final class EditOperation implements Parcelable { /** * Plugin Id */ - public String plugin = null; + public final String plugin; /** * Label @@ -33,13 +33,15 @@ public class EditOperation implements Parcelable { /** * Create an EditOperation object * + * @param plugin + * {@link Plugin} identifier that encompasses object * @param text * label to display * @param intent * intent to invoke. {@link EXTRAS_TASK_ID} will be passed */ - public EditOperation(String text, Intent intent) { - super(); + public EditOperation(String plugin, String text, Intent intent) { + this.plugin = plugin; this.text = text; this.intent = intent; } @@ -57,6 +59,7 @@ public class EditOperation implements Parcelable { * {@inheritDoc} */ public void writeToParcel(Parcel dest, int flags) { + dest.writeString(plugin); dest.writeString(text); dest.writeParcelable(intent, 0); } @@ -69,8 +72,8 @@ public class EditOperation implements Parcelable { * {@inheritDoc} */ public EditOperation createFromParcel(Parcel source) { - return new EditOperation(source.readString(), (Intent)source.readParcelable( - Intent.class.getClassLoader())); + return new EditOperation(source.readString(), source.readString(), + (Intent)source.readParcelable(Intent.class.getClassLoader())); } /** diff --git a/astrid/api-src/com/todoroo/astrid/api/Filter.java b/astrid/api-src/com/todoroo/astrid/api/Filter.java index bd2e45c9e..0ae269f25 100644 --- a/astrid/api-src/com/todoroo/astrid/api/Filter.java +++ b/astrid/api-src/com/todoroo/astrid/api/Filter.java @@ -3,10 +3,11 @@ */ package com.todoroo.astrid.api; +import android.content.ContentValues; import android.os.Parcel; import android.os.Parcelable; -import com.todoroo.astrid.api.AstridContentProvider.AstridTask; +import com.todoroo.andlib.sql.QueryTemplate; /** * A FilterListFilter allows users to display tasks that have @@ -19,7 +20,12 @@ import com.todoroo.astrid.api.AstridContentProvider.AstridTask; * @author Tim Su * */ -public class Filter extends FilterListItem { +public final class Filter extends FilterListItem { + + /** + * Plug-in Identifier + */ + public final String plugin; /** * Expanded title of this filter. This is displayed at the top @@ -31,15 +37,14 @@ public class Filter extends FilterListItem { /** * SQL query for this filter. The query will be appended to the select - * statement after "SELECT fields FROM table %s". Use - * {@link AstridApiConstants.TASK_TABLE} and - * {@link AstridApiConstants.METADATA_TABLE} as table names, - * {@link AstridTask} for field names. + * statement after "SELECT fields FROM table %s". It is + * recommended that you use a {@link QueryTemplate} to construct your + * query. *

* Examples: *

    - *
  • " WHERE completionDate = 0" - *
  • " INNER JOIN " + + *
  • "WHERE completionDate = 0" + *
  • "INNER JOIN " + * Constants.TABLE_METADATA + " ON metadata.task = tasks.id WHERE * metadata.namespace = " + NAMESPACE + " AND metadata.key = 'a' AND * metadata.value = 'b' GROUP BY tasks.id ORDER BY tasks.title" @@ -48,25 +53,18 @@ public class Filter extends FilterListItem { public String sqlQuery; /** - * SQL query to execute on a task when quick-creating a new task while viewing - * this filter. For example, when a user views tasks tagged 'ABC', the + * Values to apply to a task when quick-adding a task from this filter. + * For example, when a user views tasks tagged 'ABC', the * tasks they create should also be tagged 'ABC'. If set to null, no - * query will be executed. In this string, $ID will be replaced with the - * task id. - *

    - * Examples: - *

      - *
    • "INSERT INTO " + Constants.TABLE_METADATA + " (task, - * namespace, key, string) VALUES ($ID, " + ... + ")" - *
    • "UPDATE " + Constants.TABLE_TASK + " SET urgency = 0 - * WHERE _id = $ID" - *
    + * additional values will be stored for a task. */ - public String sqlForNewTasks = null; + public ContentValues valuesForNewTasks = null; /** * Utility constructor for creating a TaskList object * + * @param plugin + * {@link Plugin} identifier that encompasses object * @param listingTitle * Title of this item as displayed on the lists page, e.g. Inbox * @param title @@ -74,22 +72,26 @@ public class Filter extends FilterListItem { * filter, e.g. Inbox (20 tasks) * @param sqlQuery * SQL query for this list (see {@link sqlQuery} for examples). - * @param sqlForNewTasks + * @param valuesForNewTasks * see {@link sqlForNewTasks} */ - public Filter(String listingTitle, - String title, String sqlQuery, String sqlForNewTasks) { + public Filter(String plugin, String listingTitle, + String title, QueryTemplate sqlQuery, ContentValues valuesForNewTasks) { + this.plugin = plugin; this.listingTitle = listingTitle; this.title = title; - this.sqlQuery = sqlQuery; - this.sqlForNewTasks = sqlForNewTasks; + this.sqlQuery = sqlQuery.toString(); + this.valuesForNewTasks = valuesForNewTasks; } /** - * Blank constructor + * Utility constructor + * + * @param plugin + * {@link Plugin} identifier that encompasses object */ - public Filter() { - // + protected Filter(String plugin) { + this.plugin = plugin; } // --- parcelable @@ -106,10 +108,11 @@ public class Filter extends FilterListItem { */ @Override public void writeToParcel(Parcel dest, int flags) { + dest.writeString(plugin); super.writeToParcel(dest, flags); dest.writeString(title); dest.writeString(sqlQuery); - dest.writeString(sqlForNewTasks); + dest.writeParcelable(valuesForNewTasks, 0); } /** @@ -121,11 +124,11 @@ public class Filter extends FilterListItem { * {@inheritDoc} */ public Filter createFromParcel(Parcel source) { - Filter item = new Filter(); + Filter item = new Filter(source.readString()); item.readFromParcel(source); item.title = source.readString(); item.sqlQuery = source.readString(); - item.sqlForNewTasks = source.readString(); + item.valuesForNewTasks = source.readParcelable(ContentValues.class.getClassLoader()); return item; } diff --git a/astrid/api-src/com/todoroo/astrid/api/FilterCategory.java b/astrid/api-src/com/todoroo/astrid/api/FilterCategory.java index a95ffb802..ffaa9cb35 100644 --- a/astrid/api-src/com/todoroo/astrid/api/FilterCategory.java +++ b/astrid/api-src/com/todoroo/astrid/api/FilterCategory.java @@ -15,6 +15,11 @@ import android.os.Parcelable; */ public class FilterCategory extends FilterListItem { + /** + * Plug-in Identifier + */ + public final String plugin; + /** * {@link Filter}s contained by this category */ @@ -23,22 +28,28 @@ public class FilterCategory extends FilterListItem { /** * Constructor for creating a new FilterCategory * + * @param plugin + * {@link Plugin} identifier that encompasses object * @param listingTitle * Title of this item as displayed on the lists page, e.g. Inbox * @param children * filters belonging to this category */ - public FilterCategory(String listingTitle, + public FilterCategory(String plugin, String listingTitle, Filter[] children) { + this.plugin = plugin; this.listingTitle = listingTitle; this.children = children; } /** - * Blank constructor + * Constructor for creating a new FilterCategory + * + * @param plugin + * {@link Plugin} identifier that encompasses object */ - public FilterCategory() { - // + protected FilterCategory(String plugin) { + this.plugin = plugin; } // --- parcelable @@ -55,6 +66,7 @@ public class FilterCategory extends FilterListItem { */ @Override public void writeToParcel(Parcel dest, int flags) { + dest.writeString(plugin); super.writeToParcel(dest, flags); dest.writeParcelableArray(children, 0); } @@ -68,7 +80,7 @@ public class FilterCategory extends FilterListItem { * {@inheritDoc} */ public FilterCategory createFromParcel(Parcel source) { - FilterCategory item = new FilterCategory(); + FilterCategory item = new FilterCategory(source.readString()); item.readFromParcel(source); Parcelable[] parcelableChildren = source.readParcelableArray( diff --git a/astrid/api-src/com/todoroo/astrid/api/FilterListHeader.java b/astrid/api-src/com/todoroo/astrid/api/FilterListHeader.java index b980a49e8..e1d38b87b 100644 --- a/astrid/api-src/com/todoroo/astrid/api/FilterListHeader.java +++ b/astrid/api-src/com/todoroo/astrid/api/FilterListHeader.java @@ -8,44 +8,57 @@ import android.os.Parcelable; /** * Section Header for Filter List - * + * * @author Tim Su * */ public class FilterListHeader extends FilterListItem { + /** + * Plug-in Identifier + */ + public final String plugin; + /** * Constructor for creating a new FilterListHeader - * + * + * @param plugin + * {@link Plugin} identifier that encompasses object * @param listingTitle * @param listingIconResource * @param priority */ - public FilterListHeader(String listingTitle) { + public FilterListHeader(String plugin, String listingTitle) { + this.plugin = plugin; this.listingTitle = listingTitle; } - + /** - * Empty constructor + * Constructor for creating a new FilterListHeader + * + * @param plugin + * {@link Plugin} identifier that encompasses object */ - public FilterListHeader() { - // + protected FilterListHeader(String plugin) { + this.plugin = plugin; } - + // --- parcelable - + public int describeContents() { return 0; } + @Override public void writeToParcel(Parcel dest, int flags) { + dest.writeString(plugin); super.writeToParcel(dest, flags); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public FilterListHeader createFromParcel(Parcel source) { - FilterListHeader item = new FilterListHeader(); + FilterListHeader item = new FilterListHeader(source.readString()); item.readFromParcel(source); return item; } @@ -53,6 +66,6 @@ public class FilterListHeader extends FilterListItem { public FilterListHeader[] newArray(int size) { return new FilterListHeader[size]; } - + }; } diff --git a/astrid/api-src/com/todoroo/astrid/api/FilterListItem.java b/astrid/api-src/com/todoroo/astrid/api/FilterListItem.java index f0eab9ec8..747a22cf3 100644 --- a/astrid/api-src/com/todoroo/astrid/api/FilterListItem.java +++ b/astrid/api-src/com/todoroo/astrid/api/FilterListItem.java @@ -57,6 +57,7 @@ abstract public class FilterListItem implements Parcelable { /** * Utility method to read FilterListItem properties from a parcel. + * * @param source */ public void readFromParcel(Parcel source) { diff --git a/astrid/api-src/com/todoroo/astrid/api/Plugin.java b/astrid/api-src/com/todoroo/astrid/api/Plugin.java new file mode 100644 index 000000000..81f280ff7 --- /dev/null +++ b/astrid/api-src/com/todoroo/astrid/api/Plugin.java @@ -0,0 +1,93 @@ +/** + * See the file "LICENSE" for the full license governing this code. + */ +package com.todoroo.astrid.api; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Represents a plug-in for Astrid. Users can enable or disable plug-ins, + * which affect all other extension points that share the same identifier. + * + * @author Tim Su + * + */ +public class Plugin implements Parcelable { + + /** + * Plug-in Identifier + */ + public String plugin = null; + + /** + * Plug-in Title + */ + public String title = null; + + /** + * Plug-in Author + */ + public String author = null; + + /** + * Plug-in Description + */ + public String description = null; + + /** + * Convenience constructor to generate a plug-in object + * + * @param plugin + * @param title + * @param author + * @param description + */ + public Plugin(String plugin, String title, String author, String description) { + this.plugin = plugin; + this.title = title; + this.author = author; + this.description = description; + } + + // --- parcelable helpers + + + /** + * {@inheritDoc} + */ + public int describeContents() { + return 0; + } + + /** + * {@inheritDoc} + */ + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(plugin); + dest.writeString(title); + dest.writeString(author); + dest.writeString(description); + } + + /** + * Parcelable creator + */ + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + /** + * {@inheritDoc} + */ + public Plugin createFromParcel(Parcel source) { + return new Plugin(source.readString(), source.readString(), + source.readString(), source.readString()); + } + + /** + * {@inheritDoc} + */ + public Plugin[] newArray(int size) { + return new Plugin[size]; + }; + }; + +} diff --git a/astrid/api-src/com/todoroo/astrid/api/TaskDetail.java b/astrid/api-src/com/todoroo/astrid/api/TaskDetail.java index 573a7b35c..2fe01fd66 100644 --- a/astrid/api-src/com/todoroo/astrid/api/TaskDetail.java +++ b/astrid/api-src/com/todoroo/astrid/api/TaskDetail.java @@ -12,7 +12,12 @@ import android.os.Parcelable; * @author Tim Su * */ -public class TaskDetail implements Parcelable { +public final class TaskDetail implements Parcelable { + + /** + * Plug-in Identifier + */ + public final String plugin; /** * Text of detail @@ -27,13 +32,15 @@ public class TaskDetail implements Parcelable { /** * Creates a TaskDetail object * + * @param plugin + * {@link Plugin} identifier that encompasses object * @param text * text to display * @param color * color to use for text. Use 0 for default color */ - public TaskDetail(String text, int color) { - super(); + public TaskDetail(String plugin, String text, int color) { + this.plugin = plugin; this.text = text; this.color = color; } @@ -44,8 +51,8 @@ public class TaskDetail implements Parcelable { * @param text * text to display */ - public TaskDetail(String text) { - this(text, 0); + public TaskDetail(String plugin, String text) { + this(plugin, text, 0); } @@ -63,6 +70,7 @@ public class TaskDetail implements Parcelable { * {@inheritDoc} */ public void writeToParcel(Parcel dest, int flags) { + dest.writeString(plugin); dest.writeString(text); dest.writeInt(color); } @@ -75,7 +83,7 @@ public class TaskDetail implements Parcelable { * {@inheritDoc} */ public TaskDetail createFromParcel(Parcel source) { - return new TaskDetail(source.readString(), source.readInt()); + return new TaskDetail(source.readString(), source.readString(), source.readInt()); } /** diff --git a/astrid/common-src/com/todoroo/andlib/data/GenericDao.java b/astrid/common-src/com/todoroo/andlib/data/GenericDao.java index 7fe7b38f5..ab466dd3b 100644 --- a/astrid/common-src/com/todoroo/andlib/data/GenericDao.java +++ b/astrid/common-src/com/todoroo/andlib/data/GenericDao.java @@ -11,8 +11,8 @@ import java.lang.reflect.InvocationTargetException; import android.content.ContentValues; import android.database.Cursor; -import com.todoroo.andlib.data.sql.Criterion; -import com.todoroo.andlib.data.sql.Query; +import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Query; diff --git a/astrid/common-src/com/todoroo/andlib/data/Property.java b/astrid/common-src/com/todoroo/andlib/data/Property.java index ad51e5353..9a4665bf2 100644 --- a/astrid/common-src/com/todoroo/andlib/data/Property.java +++ b/astrid/common-src/com/todoroo/andlib/data/Property.java @@ -5,7 +5,7 @@ */ package com.todoroo.andlib.data; -import com.todoroo.andlib.data.sql.Field; +import com.todoroo.andlib.sql.Field; /** * Property represents a typed column in a database. diff --git a/astrid/common-src/com/todoroo/andlib/data/Table.java b/astrid/common-src/com/todoroo/andlib/data/Table.java index ae8d59274..3d2cb8880 100644 --- a/astrid/common-src/com/todoroo/andlib/data/Table.java +++ b/astrid/common-src/com/todoroo/andlib/data/Table.java @@ -1,6 +1,7 @@ package com.todoroo.andlib.data; -import com.todoroo.andlib.data.sql.Field; +import com.todoroo.andlib.sql.Field; +import com.todoroo.andlib.sql.SqlTable; /** * Table class. Most fields are final, so methods such as as will @@ -9,7 +10,7 @@ import com.todoroo.andlib.data.sql.Field; * @author Tim Su * */ -public final class Table extends com.todoroo.andlib.data.sql.Table { +public final class Table extends SqlTable { public final String name; public final Class modelClass; diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/OrderType.java b/astrid/common-src/com/todoroo/andlib/data/sql/OrderType.java deleted file mode 100644 index b3b8fa5af..000000000 --- a/astrid/common-src/com/todoroo/andlib/data/sql/OrderType.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.todoroo.andlib.data.sql; - -public enum OrderType { - DESC, ASC -} diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/Constants.java b/astrid/common-src/com/todoroo/andlib/sql/Constants.java similarity index 90% rename from astrid/common-src/com/todoroo/andlib/data/sql/Constants.java rename to astrid/common-src/com/todoroo/andlib/sql/Constants.java index 4596aa34b..4c59f6ead 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/Constants.java +++ b/astrid/common-src/com/todoroo/andlib/sql/Constants.java @@ -1,7 +1,7 @@ -package com.todoroo.andlib.data.sql; +package com.todoroo.andlib.sql; @SuppressWarnings("nls") -public class Constants { +public final class Constants { static final String SELECT = "SELECT"; static final String SPACE = " "; static final String AS = "AS"; diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/Criterion.java b/astrid/common-src/com/todoroo/andlib/sql/Criterion.java similarity index 78% rename from astrid/common-src/com/todoroo/andlib/data/sql/Criterion.java rename to astrid/common-src/com/todoroo/andlib/sql/Criterion.java index bae70f44d..fcd3be158 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/Criterion.java +++ b/astrid/common-src/com/todoroo/andlib/sql/Criterion.java @@ -1,12 +1,12 @@ -package com.todoroo.andlib.data.sql; +package com.todoroo.andlib.sql; -import static com.todoroo.andlib.data.sql.Constants.AND; -import static com.todoroo.andlib.data.sql.Constants.EXISTS; -import static com.todoroo.andlib.data.sql.Constants.LEFT_PARENTHESIS; -import static com.todoroo.andlib.data.sql.Constants.NOT; -import static com.todoroo.andlib.data.sql.Constants.OR; -import static com.todoroo.andlib.data.sql.Constants.RIGHT_PARENTHESIS; -import static com.todoroo.andlib.data.sql.Constants.SPACE; +import static com.todoroo.andlib.sql.Constants.AND; +import static com.todoroo.andlib.sql.Constants.EXISTS; +import static com.todoroo.andlib.sql.Constants.LEFT_PARENTHESIS; +import static com.todoroo.andlib.sql.Constants.NOT; +import static com.todoroo.andlib.sql.Constants.OR; +import static com.todoroo.andlib.sql.Constants.RIGHT_PARENTHESIS; +import static com.todoroo.andlib.sql.Constants.SPACE; public abstract class Criterion { protected final Operator operator; diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/DBObject.java b/astrid/common-src/com/todoroo/andlib/sql/DBObject.java similarity index 88% rename from astrid/common-src/com/todoroo/andlib/data/sql/DBObject.java rename to astrid/common-src/com/todoroo/andlib/sql/DBObject.java index 7837eb77f..7d27d70a6 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/DBObject.java +++ b/astrid/common-src/com/todoroo/andlib/sql/DBObject.java @@ -1,7 +1,7 @@ -package com.todoroo.andlib.data.sql; +package com.todoroo.andlib.sql; -import static com.todoroo.andlib.data.sql.Constants.AS; -import static com.todoroo.andlib.data.sql.Constants.SPACE; +import static com.todoroo.andlib.sql.Constants.AS; +import static com.todoroo.andlib.sql.Constants.SPACE; public abstract class DBObject> implements Cloneable { protected String alias; diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/EqCriterion.java b/astrid/common-src/com/todoroo/andlib/sql/EqCriterion.java similarity index 76% rename from astrid/common-src/com/todoroo/andlib/data/sql/EqCriterion.java rename to astrid/common-src/com/todoroo/andlib/sql/EqCriterion.java index b2ec34cb8..99fc74ad2 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/EqCriterion.java +++ b/astrid/common-src/com/todoroo/andlib/sql/EqCriterion.java @@ -1,4 +1,4 @@ -package com.todoroo.andlib.data.sql; +package com.todoroo.andlib.sql; public class EqCriterion extends UnaryCriterion { EqCriterion(Field field, Object value) { diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/Field.java b/astrid/common-src/com/todoroo/andlib/sql/Field.java similarity index 81% rename from astrid/common-src/com/todoroo/andlib/data/sql/Field.java rename to astrid/common-src/com/todoroo/andlib/sql/Field.java index 9111d9c25..99501e85d 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/Field.java +++ b/astrid/common-src/com/todoroo/andlib/sql/Field.java @@ -1,11 +1,11 @@ -package com.todoroo.andlib.data.sql; - -import static com.todoroo.andlib.data.sql.Constants.AND; -import static com.todoroo.andlib.data.sql.Constants.BETWEEN; -import static com.todoroo.andlib.data.sql.Constants.COMMA; -import static com.todoroo.andlib.data.sql.Constants.LEFT_PARENTHESIS; -import static com.todoroo.andlib.data.sql.Constants.RIGHT_PARENTHESIS; -import static com.todoroo.andlib.data.sql.Constants.SPACE; +package com.todoroo.andlib.sql; + +import static com.todoroo.andlib.sql.Constants.AND; +import static com.todoroo.andlib.sql.Constants.BETWEEN; +import static com.todoroo.andlib.sql.Constants.COMMA; +import static com.todoroo.andlib.sql.Constants.LEFT_PARENTHESIS; +import static com.todoroo.andlib.sql.Constants.RIGHT_PARENTHESIS; +import static com.todoroo.andlib.sql.Constants.SPACE; public class Field extends DBObject { diff --git a/astrid/common-src/com/todoroo/andlib/sql/Functions.java b/astrid/common-src/com/todoroo/andlib/sql/Functions.java new file mode 100644 index 000000000..ac994dad8 --- /dev/null +++ b/astrid/common-src/com/todoroo/andlib/sql/Functions.java @@ -0,0 +1,15 @@ +package com.todoroo.andlib.sql; + +@SuppressWarnings("nls") +public final class Functions { + + public static String caseStatement(Criterion when, Object ifTrue, Object ifFalse) { + return new StringBuilder("CASE WHEN "). + append(when.toString()).append(" THEN ").append(value(ifTrue)). + append(" ELSE ").append(value(ifFalse)).append(" END").toString(); + } + + private static String value(Object value) { + return value.toString(); + } +} diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/GroupBy.java b/astrid/common-src/com/todoroo/andlib/sql/GroupBy.java similarity index 85% rename from astrid/common-src/com/todoroo/andlib/data/sql/GroupBy.java rename to astrid/common-src/com/todoroo/andlib/sql/GroupBy.java index 103128411..c0d1c4290 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/GroupBy.java +++ b/astrid/common-src/com/todoroo/andlib/sql/GroupBy.java @@ -1,4 +1,4 @@ -package com.todoroo.andlib.data.sql; +package com.todoroo.andlib.sql; import java.util.List; import java.util.ArrayList; diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/Join.java b/astrid/common-src/com/todoroo/andlib/sql/Join.java similarity index 56% rename from astrid/common-src/com/todoroo/andlib/data/sql/Join.java rename to astrid/common-src/com/todoroo/andlib/sql/Join.java index f3809dba9..382c1253f 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/Join.java +++ b/astrid/common-src/com/todoroo/andlib/sql/Join.java @@ -1,33 +1,33 @@ -package com.todoroo.andlib.data.sql; +package com.todoroo.andlib.sql; -import static com.todoroo.andlib.data.sql.Constants.JOIN; -import static com.todoroo.andlib.data.sql.Constants.ON; -import static com.todoroo.andlib.data.sql.Constants.SPACE; +import static com.todoroo.andlib.sql.Constants.JOIN; +import static com.todoroo.andlib.sql.Constants.ON; +import static com.todoroo.andlib.sql.Constants.SPACE; public class Join { - private final Table joinTable; + private final SqlTable joinTable; private final JoinType joinType; private final Criterion[] criterions; - private Join(Table table, JoinType joinType, Criterion... criterions) { + private Join(SqlTable table, JoinType joinType, Criterion... criterions) { joinTable = table; this.joinType = joinType; this.criterions = criterions; } - public static Join inner(Table expression, Criterion... criterions) { + public static Join inner(SqlTable expression, Criterion... criterions) { return new Join(expression, JoinType.INNER, criterions); } - public static Join left(Table table, Criterion... criterions) { + public static Join left(SqlTable table, Criterion... criterions) { return new Join(table, JoinType.LEFT, criterions); } - public static Join right(Table table, Criterion... criterions) { + public static Join right(SqlTable table, Criterion... criterions) { return new Join(table, JoinType.RIGHT, criterions); } - public static Join out(Table table, Criterion... criterions) { + public static Join out(SqlTable table, Criterion... criterions) { return new Join(table, JoinType.OUT, criterions); } diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/JoinType.java b/astrid/common-src/com/todoroo/andlib/sql/JoinType.java similarity index 56% rename from astrid/common-src/com/todoroo/andlib/data/sql/JoinType.java rename to astrid/common-src/com/todoroo/andlib/sql/JoinType.java index 86cd8f2d3..c1cb7389b 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/JoinType.java +++ b/astrid/common-src/com/todoroo/andlib/sql/JoinType.java @@ -1,4 +1,4 @@ -package com.todoroo.andlib.data.sql; +package com.todoroo.andlib.sql; public enum JoinType { INNER, LEFT, RIGHT, OUT diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/Operator.java b/astrid/common-src/com/todoroo/andlib/sql/Operator.java similarity index 92% rename from astrid/common-src/com/todoroo/andlib/data/sql/Operator.java rename to astrid/common-src/com/todoroo/andlib/sql/Operator.java index 55981e71a..5f97301c0 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/Operator.java +++ b/astrid/common-src/com/todoroo/andlib/sql/Operator.java @@ -1,6 +1,6 @@ -package com.todoroo.andlib.data.sql; +package com.todoroo.andlib.sql; -import static com.todoroo.andlib.data.sql.Constants.SPACE; +import static com.todoroo.andlib.sql.Constants.SPACE; import java.util.HashMap; import java.util.Map; diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/Order.java b/astrid/common-src/com/todoroo/andlib/sql/Order.java similarity index 52% rename from astrid/common-src/com/todoroo/andlib/data/sql/Order.java rename to astrid/common-src/com/todoroo/andlib/sql/Order.java index 5bff6bf49..fc1049045 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/Order.java +++ b/astrid/common-src/com/todoroo/andlib/sql/Order.java @@ -1,25 +1,25 @@ -package com.todoroo.andlib.data.sql; +package com.todoroo.andlib.sql; -import static com.todoroo.andlib.data.sql.Constants.SPACE; +import static com.todoroo.andlib.sql.Constants.SPACE; public class Order { - private final Field expression; + private final Object expression; private final OrderType orderType; - private Order(Field expression) { + private Order(Object expression) { this(expression, OrderType.ASC); } - private Order(Field expression, OrderType orderType) { + private Order(Object expression, OrderType orderType) { this.expression = expression; this.orderType = orderType; } - public static Order asc(Field expression) { + public static Order asc(Object expression) { return new Order(expression); } - public static Order desc(Field expression) { + public static Order desc(Object expression) { return new Order(expression, OrderType.DESC); } diff --git a/astrid/common-src/com/todoroo/andlib/sql/OrderType.java b/astrid/common-src/com/todoroo/andlib/sql/OrderType.java new file mode 100644 index 000000000..299c670c0 --- /dev/null +++ b/astrid/common-src/com/todoroo/andlib/sql/OrderType.java @@ -0,0 +1,5 @@ +package com.todoroo.andlib.sql; + +public enum OrderType { + DESC, ASC +} diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/Query.java b/astrid/common-src/com/todoroo/andlib/sql/Query.java similarity index 73% rename from astrid/common-src/com/todoroo/andlib/data/sql/Query.java rename to astrid/common-src/com/todoroo/andlib/sql/Query.java index 7a3d4f7e6..91bb608f4 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/Query.java +++ b/astrid/common-src/com/todoroo/andlib/sql/Query.java @@ -1,32 +1,31 @@ -package com.todoroo.andlib.data.sql; - -import static com.todoroo.andlib.data.sql.Constants.ALL; -import static com.todoroo.andlib.data.sql.Constants.COMMA; -import static com.todoroo.andlib.data.sql.Constants.FROM; -import static com.todoroo.andlib.data.sql.Constants.GROUP_BY; -import static com.todoroo.andlib.data.sql.Constants.LEFT_PARENTHESIS; -import static com.todoroo.andlib.data.sql.Constants.ORDER_BY; -import static com.todoroo.andlib.data.sql.Constants.RIGHT_PARENTHESIS; -import static com.todoroo.andlib.data.sql.Constants.SELECT; -import static com.todoroo.andlib.data.sql.Constants.SPACE; -import static com.todoroo.andlib.data.sql.Constants.WHERE; -import static com.todoroo.andlib.data.sql.Table.table; +package com.todoroo.andlib.sql; + +import static com.todoroo.andlib.sql.Constants.ALL; +import static com.todoroo.andlib.sql.Constants.COMMA; +import static com.todoroo.andlib.sql.Constants.FROM; +import static com.todoroo.andlib.sql.Constants.GROUP_BY; +import static com.todoroo.andlib.sql.Constants.LEFT_PARENTHESIS; +import static com.todoroo.andlib.sql.Constants.ORDER_BY; +import static com.todoroo.andlib.sql.Constants.RIGHT_PARENTHESIS; +import static com.todoroo.andlib.sql.Constants.SELECT; +import static com.todoroo.andlib.sql.Constants.SPACE; +import static com.todoroo.andlib.sql.Constants.WHERE; +import static com.todoroo.andlib.sql.SqlTable.table; import static java.util.Arrays.asList; import java.util.ArrayList; -import java.util.List; import com.todoroo.andlib.data.Property; -public class Query { +public final class Query { - private Table table; - private List criterions = new ArrayList(); - private List fields = new ArrayList(); - private List joins = new ArrayList(); - private List groupBies = new ArrayList(); - private List orders = new ArrayList(); - private List havings = new ArrayList(); + private SqlTable table; + private final ArrayList criterions = new ArrayList(); + private final ArrayList fields = new ArrayList(); + private final ArrayList joins = new ArrayList(); + private final ArrayList groupBies = new ArrayList(); + private final ArrayList orders = new ArrayList(); + private final ArrayList havings = new ArrayList(); private Query(Field... fields) { this.fields.addAll(asList(fields)); @@ -36,7 +35,7 @@ public class Query { return new Query(fields); } - public Query from(Table fromTable) { + public Query from(SqlTable fromTable) { this.table = fromTable; return this; } @@ -154,7 +153,7 @@ public class Query { sql.deleteCharAt(sql.length() - 1).append(SPACE); } - public Table as(String alias) { + public SqlTable as(String alias) { return table(LEFT_PARENTHESIS + this.toString() + RIGHT_PARENTHESIS).as(alias); } diff --git a/astrid/common-src/com/todoroo/andlib/sql/QueryTemplate.java b/astrid/common-src/com/todoroo/andlib/sql/QueryTemplate.java new file mode 100644 index 000000000..33bb0376c --- /dev/null +++ b/astrid/common-src/com/todoroo/andlib/sql/QueryTemplate.java @@ -0,0 +1,108 @@ +package com.todoroo.andlib.sql; + +import static com.todoroo.andlib.sql.Constants.COMMA; +import static com.todoroo.andlib.sql.Constants.GROUP_BY; +import static com.todoroo.andlib.sql.Constants.ORDER_BY; +import static com.todoroo.andlib.sql.Constants.SPACE; +import static com.todoroo.andlib.sql.Constants.WHERE; +import static java.util.Arrays.asList; + +import java.util.ArrayList; + +/** + * Query Template returns a bunch of criteria that allows a query to be + * constructed + * + * @author Tim Su + * + */ +public final class QueryTemplate { + + private final ArrayList criterions = new ArrayList(); + private final ArrayList joins = new ArrayList(); + private final ArrayList groupBies = new ArrayList(); + private final ArrayList orders = new ArrayList(); + private final ArrayList havings = new ArrayList(); + + public QueryTemplate join(Join... join) { + joins.addAll(asList(join)); + return this; + } + + public QueryTemplate where(Criterion criterion) { + criterions.add(criterion); + return this; + } + + public QueryTemplate groupBy(Field... groupBy) { + groupBies.addAll(asList(groupBy)); + return this; + } + + public QueryTemplate orderBy(Order... order) { + orders.addAll(asList(order)); + return this; + } + + @Override + public String toString() { + StringBuilder sql = new StringBuilder(); + visitJoinClause(sql); + visitWhereClause(sql); + visitGroupByClause(sql); + visitOrderByClause(sql); + return sql.toString(); + } + + private void visitOrderByClause(StringBuilder sql) { + if (orders.isEmpty()) { + return; + } + sql.append(ORDER_BY); + for (Order order : orders) { + sql.append(SPACE).append(order).append(COMMA); + } + sql.deleteCharAt(sql.length() - 1).append(SPACE); + } + + @SuppressWarnings("nls") + private void visitGroupByClause(StringBuilder sql) { + if (groupBies.isEmpty()) { + return; + } + sql.append(GROUP_BY); + for (Field groupBy : groupBies) { + sql.append(SPACE).append(groupBy).append(COMMA); + } + sql.deleteCharAt(sql.length() - 1).append(SPACE); + if (havings.isEmpty()) { + return; + } + sql.append("HAVING"); + for (Criterion havingCriterion : havings) { + sql.append(SPACE).append(havingCriterion).append(COMMA); + } + sql.deleteCharAt(sql.length() - 1).append(SPACE); + } + + private void visitWhereClause(StringBuilder sql) { + if (criterions.isEmpty()) { + return; + } + sql.append(WHERE); + for (Criterion criterion : criterions) { + sql.append(SPACE).append(criterion).append(SPACE); + } + } + + private void visitJoinClause(StringBuilder sql) { + for (Join join : joins) { + sql.append(join).append(SPACE); + } + } + + public QueryTemplate having(Criterion criterion) { + this.havings.add(criterion); + return this; + } +} diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/Table.java b/astrid/common-src/com/todoroo/andlib/sql/SqlTable.java similarity index 52% rename from astrid/common-src/com/todoroo/andlib/data/sql/Table.java rename to astrid/common-src/com/todoroo/andlib/sql/SqlTable.java index ee04ae0df..07bc2e998 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/Table.java +++ b/astrid/common-src/com/todoroo/andlib/sql/SqlTable.java @@ -1,13 +1,13 @@ -package com.todoroo.andlib.data.sql; +package com.todoroo.andlib.sql; -public class Table extends DBObject { +public class SqlTable extends DBObject { - protected Table(String expression) { + protected SqlTable(String expression) { super(expression); } - public static Table table(String table) { - return new Table(table); + public static SqlTable table(String table) { + return new SqlTable(table); } @SuppressWarnings("nls") diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/UnaryCriterion.java b/astrid/common-src/com/todoroo/andlib/sql/UnaryCriterion.java similarity index 93% rename from astrid/common-src/com/todoroo/andlib/data/sql/UnaryCriterion.java rename to astrid/common-src/com/todoroo/andlib/sql/UnaryCriterion.java index 387c8f36d..e76f90d03 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/UnaryCriterion.java +++ b/astrid/common-src/com/todoroo/andlib/sql/UnaryCriterion.java @@ -1,6 +1,6 @@ -package com.todoroo.andlib.data.sql; +package com.todoroo.andlib.sql; -import static com.todoroo.andlib.data.sql.Constants.SPACE; +import static com.todoroo.andlib.sql.Constants.SPACE; public class UnaryCriterion extends Criterion { protected final Field expression; diff --git a/astrid/common-src/com/todoroo/andlib/utility/AndroidUtilities.java b/astrid/common-src/com/todoroo/andlib/utility/AndroidUtilities.java index c19380b5c..b6b7c8dec 100644 --- a/astrid/common-src/com/todoroo/andlib/utility/AndroidUtilities.java +++ b/astrid/common-src/com/todoroo/andlib/utility/AndroidUtilities.java @@ -7,14 +7,10 @@ import java.net.URL; import java.net.URLConnection; import android.app.Activity; -import android.app.Notification; -import android.app.NotificationManager; -import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.Color; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.NetworkInfo.State; diff --git a/astrid/common-src/com/todoroo/andlib/utility/DateUtilities.java b/astrid/common-src/com/todoroo/andlib/utility/DateUtilities.java index 39685bf13..bf14db575 100644 --- a/astrid/common-src/com/todoroo/andlib/utility/DateUtilities.java +++ b/astrid/common-src/com/todoroo/andlib/utility/DateUtilities.java @@ -54,24 +54,30 @@ public class DateUtilities { * ====================================================================== */ /** Convert unixtime into date */ - public static final Date unixtimeToDate(int seconds) { - if(seconds == 0) + public static final Date unixtimeToDate(long millis) { + if(millis == 0) return null; - return new Date(seconds * 1000L); + return new Date(millis); } /** Convert date into unixtime */ - public static final int dateToUnixtime(Date date) { + public static final long dateToUnixtime(Date date) { if(date == null) return 0; - return (int)(date.getTime() / 1000); + return date.getTime(); } /** Returns unixtime for current time */ - public static final int now() { - return (int) (System.currentTimeMillis() / 1000L); + public static final long now() { + return System.currentTimeMillis(); } + /** Represents a single day */ + public static long ONE_DAY = 3600000L; + + /** Represents a single week */ + public static long WEEK = 7 * 3600000L; + /* ====================================================================== * =========================================================== formatters * ====================================================================== */ diff --git a/astrid/plugin-src/com/todoroo/astrid/filters/FilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/filters/CoreFilterExposer.java similarity index 54% rename from astrid/plugin-src/com/todoroo/astrid/filters/FilterExposer.java rename to astrid/plugin-src/com/todoroo/astrid/filters/CoreFilterExposer.java index 937491f4c..17504eba0 100644 --- a/astrid/plugin-src/com/todoroo/astrid/filters/FilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/filters/CoreFilterExposer.java @@ -9,10 +9,16 @@ import android.content.Intent; import android.content.res.Resources; import com.timsu.astrid.R; +import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Functions; +import com.todoroo.andlib.sql.Order; +import com.todoroo.andlib.sql.QueryTemplate; +import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.activity.FilterListActivity; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterListItem; +import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.model.Task; /** @@ -21,29 +27,26 @@ import com.todoroo.astrid.model.Task; * @author Tim Su * */ -public class FilterExposer extends BroadcastReceiver { - - public static Filter buildInboxFilter(Resources r) { - return new Filter(r.getString(R.string.BFE_Inbox), - r.getString(R.string.BFE_Inbox), - /*String.format("WHERE %s AND %s ORDER BY CASE %s WHEN 0 THEN (%d + 1000 * %s) ELSE (%s + 1000 * %s) END ASC", //$NON-NLS-1$ - TaskSql.isActive(), TaskSql.isVisible(DateUtilities.now()), - Task.DUE_DATE, DateUtilities.now() + 60 * 24 * 3600, Task.IMPORTANCE, - Task.DUE_DATE, Task.IMPORTANCE)*/ "", - null); - } +public final class CoreFilterExposer extends BroadcastReceiver { + @SuppressWarnings("nls") @Override public void onReceive(Context context, Intent intent) { Resources r = context.getResources(); // build filters - Filter inbox = buildInboxFilter(r); + Filter inbox = new Filter(CorePlugin.pluginIdentifier, r.getString(R.string.BFE_Inbox), + r.getString(R.string.BFE_Inbox), + new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), + TaskCriteria.isVisible(DateUtilities.now()))).orderBy( + Order.asc(Functions.caseStatement(Task.DUE_DATE.eq(0), + String.format("(%d + 1000 * %s)", DateUtilities.now(), Task.IMPORTANCE), + String.format("(%s + 1000 * %s)", Task.DUE_DATE, Task.IMPORTANCE)))), + null); - Filter all = new Filter(r.getString(R.string.BFE_All), + Filter all = new Filter(CorePlugin.pluginIdentifier, r.getString(R.string.BFE_All), r.getString(R.string.BFE_All), - String.format("ORDER BY %s DESC", //$NON-NLS-1$ - Task.ID.name), + new QueryTemplate().orderBy(Order.desc(Task.MODIFICATION_DATE)), null); // transmit filter list diff --git a/astrid/plugin-src/com/todoroo/astrid/filters/CorePlugin.java b/astrid/plugin-src/com/todoroo/astrid/filters/CorePlugin.java new file mode 100644 index 000000000..e009f863b --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/filters/CorePlugin.java @@ -0,0 +1,25 @@ +package com.todoroo.astrid.filters; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import com.todoroo.astrid.api.AstridApiConstants; +import com.todoroo.astrid.api.Plugin; + +@SuppressWarnings("nls") +public class CorePlugin extends BroadcastReceiver { + + static final String pluginIdentifier = "core"; + + @Override + public void onReceive(Context context, Intent intent) { + Plugin plugin = new Plugin(pluginIdentifier, "Core Filters", "Todoroo", + "Provides 'Inbox' and 'All Tasks' Filters"); + + Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_PLUGINS); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_PLUGIN, plugin); + context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedFilterExposer.java new file mode 100644 index 000000000..024e605f1 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedFilterExposer.java @@ -0,0 +1,61 @@ +/** + * See the file "LICENSE" for the full license governing this code. + */ +package com.todoroo.astrid.filters; + +import android.content.BroadcastReceiver; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.content.res.Resources; + +import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Order; +import com.todoroo.andlib.sql.QueryTemplate; +import com.todoroo.andlib.utility.DateUtilities; +import com.todoroo.astrid.activity.FilterListActivity; +import com.todoroo.astrid.api.AstridApiConstants; +import com.todoroo.astrid.api.Filter; +import com.todoroo.astrid.api.FilterListItem; +import com.todoroo.astrid.dao.TaskDao.TaskCriteria; +import com.todoroo.astrid.model.Task; + +/** + * Exposes Astrid's built in filters to the {@link FilterListActivity} + * + * @author Tim Su + * + */ +public final class ExtendedFilterExposer extends BroadcastReceiver { + + @SuppressWarnings("nls") + @Override + public void onReceive(Context context, Intent intent) { + Resources r = context.getResources(); + + // build filters + ContentValues hiddenValues = new ContentValues(); + hiddenValues.put(Task.HIDE_UNTIL, DateUtilities.now() + DateUtilities.ONE_DAY); + Filter hidden = new Filter(ExtendedPlugin.pluginIdentifier, "Hidden Tasks", + "Hidden Tasks", + new QueryTemplate().where(Criterion.and(TaskCriteria.isActive(), + Criterion.not(TaskCriteria.isVisible(DateUtilities.now())))). + orderBy(Order.asc(Task.HIDE_UNTIL)), + hiddenValues); + + Filter alphabetical = new Filter(ExtendedPlugin.pluginIdentifier, + "Inbox (sorted by name)", + "Inbox (sorted by name)", + new QueryTemplate().orderBy(Order.asc(Task.TITLE)), + null); + + // transmit filter list + FilterListItem[] list = new FilterListItem[2]; + list[0] = inbox; + list[1] = all; + Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ITEMS, list); + context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedPlugin.java b/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedPlugin.java new file mode 100644 index 000000000..f6b5e6a82 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/filters/ExtendedPlugin.java @@ -0,0 +1,25 @@ +package com.todoroo.astrid.filters; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import com.todoroo.astrid.api.AstridApiConstants; +import com.todoroo.astrid.api.Plugin; + +@SuppressWarnings("nls") +public class ExtendedPlugin extends BroadcastReceiver { + + static final String pluginIdentifier = "extended"; + + @Override + public void onReceive(Context context, Intent intent) { + Plugin plugin = new Plugin(pluginIdentifier, "Extended Filters", "Todoroo", + "Provides extended filters for viewing subsets of your tasks"); + + Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_PLUGINS); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_PLUGIN, plugin); + context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/FilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/tags/FilterExposer.java new file mode 100644 index 000000000..204c33bda --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/tags/FilterExposer.java @@ -0,0 +1,81 @@ +/** + * See the file "LICENSE" for the full license governing this code. + */ +package com.todoroo.astrid.tags; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import com.todoroo.astrid.R; +import com.todoroo.astrid.api.AstridApiConstants; +import com.todoroo.astrid.api.Filter; +import com.todoroo.astrid.api.FilterCategory; +import com.todoroo.astrid.api.FilterListHeader; +import com.todoroo.astrid.api.FilterListItem; +import com.todoroo.astrid.tags.DataService.Tag; + +/** + * Exposes filters based on tags + * + * @author Tim Su + * + */ +public class FilterExposer extends BroadcastReceiver { + + + @SuppressWarnings("nls") + private Filter filterFromTag(Context context, Tag tag, DataService tagService) { + String listTitle = context.getString(R.string.tag_FEx_tag_w_size). + replace("$T", tag.tag).replace("$C", Integer.toString(tag.count)); + String title = context.getString(R.string.tag_FEx_name, tag.tag); + Filter filter = new Filter(listTitle, title, + tagService.getQuery(tag.tag), + tagService.getNewTaskSql(tag.tag)); + +// filters[0].contextMenuLabels = new String[] { +// "Rename Tag", +// "Delete Tag" +// }; +// filters[0].contextMenuIntents = new Intent[] { +// new Intent(), +// new Intent() +// }; + + return filter; + } + + @Override + public void onReceive(Context context, Intent intent) { + DataService tagService = new DataService(context); + Tag[] tagsByAlpha = tagService.getGroupedTags(DataService.GROUPED_TAGS_BY_ALPHA); + + // If user does not have any tags, don't show this section at all + if(tagsByAlpha.length == 0) + return; + + Tag[] tagsBySize = tagService.getGroupedTags(DataService.GROUPED_TAGS_BY_SIZE); + Filter[] filtersByAlpha = new Filter[tagsByAlpha.length]; + for(int i = 0; i < tagsByAlpha.length; i++) + filtersByAlpha[i] = filterFromTag(context, tagsByAlpha[i], tagService); + + Filter[] filtersBySize = new Filter[tagsBySize.length]; + for(int i = 0; i < tagsBySize.length; i++) + filtersBySize[i] = filterFromTag(context, tagsBySize[i], tagService); + + FilterListHeader tagsHeader = new FilterListHeader(context.getString(R.string.tag_FEx_header)); + FilterCategory tagsCategoryBySize = new FilterCategory( + context.getString(R.string.tag_FEx_by_size), filtersBySize); + FilterCategory tagsCategoryByAlpha = new FilterCategory(context.getString(R.string.tag_FEx_alpha), filtersByAlpha); + + // transmit filter list + FilterListItem[] list = new FilterListItem[3]; + list[0] = tagsHeader; + list[1] = tagsCategoryBySize; + list[2] = tagsCategoryByAlpha; + Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ITEMS, list); + context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java index 5ec0969a3..bb8c113fa 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java @@ -7,12 +7,12 @@ import android.content.Context; import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.Property.CountProperty; -import com.todoroo.andlib.data.sql.Criterion; -import com.todoroo.andlib.data.sql.Join; -import com.todoroo.andlib.data.sql.Order; -import com.todoroo.andlib.data.sql.Query; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Join; +import com.todoroo.andlib.sql.Order; +import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.model.Metadata; diff --git a/astrid/res/values/colors-legacy.xml b/astrid/res/values/colors.xml similarity index 100% rename from astrid/res/values/colors-legacy.xml rename to astrid/res/values/colors.xml diff --git a/astrid/res/values/filter_strings.xml b/astrid/res/values/strings-filters.xml similarity index 100% rename from astrid/res/values/filter_strings.xml rename to astrid/res/values/strings-filters.xml diff --git a/astrid/res/values/strings.xml b/astrid/res/values/strings-legacy.xml similarity index 100% rename from astrid/res/values/strings.xml rename to astrid/res/values/strings-legacy.xml diff --git a/astrid/res/values/strings-tags.xml b/astrid/res/values/strings-tags.xml new file mode 100644 index 000000000..cf7ba787b --- /dev/null +++ b/astrid/res/values/strings-tags.xml @@ -0,0 +1,24 @@ + + + + + + + Add Tags + Tags: %s + + Tags: %s + + Tags + By Size + Alphabetical + + + $T ($C) + + Tagged \'%s\' + + Type In a Tag + Edit Tags + + diff --git a/astrid/res/values/styles.xml b/astrid/res/values/styles-3.0.xml similarity index 100% rename from astrid/res/values/styles.xml rename to astrid/res/values/styles-3.0.xml diff --git a/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java b/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java index 62d25ad35..f0e211f0f 100644 --- a/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java @@ -279,7 +279,7 @@ public class FilterListActivity extends ExpandableListActivity { shortcutIntent.setAction(Intent.ACTION_VIEW); shortcutIntent.putExtra(TaskListActivity.TOKEN_SHORTCUT_TITLE, filter.title); shortcutIntent.putExtra(TaskListActivity.TOKEN_SHORTCUT_SQL, filter.sqlQuery); - shortcutIntent.putExtra(TaskListActivity.TOKEN_SHORTCUT_NEW_TASK_SQL, filter.sqlForNewTasks); + shortcutIntent.putExtra(TaskListActivity.TOKEN_SHORTCUT_NEW_TASK_SQL, filter.valuesForNewTasks); menuItem.setIntent(shortcutIntent); } diff --git a/astrid/src/com/todoroo/astrid/activity/HomeActivity.java b/astrid/src/com/todoroo/astrid/activity/HomeActivity.java index 5c0b5b390..299f534e3 100644 --- a/astrid/src/com/todoroo/astrid/activity/HomeActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/HomeActivity.java @@ -24,7 +24,7 @@ import android.os.Bundle; import com.timsu.astrid.utilities.StartupReceiver; import com.todoroo.andlib.service.ExceptionService.TodorooUncaughtExceptionHandler; -import com.todoroo.astrid.filters.FilterExposer; +import com.todoroo.astrid.filters.CoreFilterExposer; /** * HomeActivity is the primary activity for Astrid and determines which activity @@ -74,7 +74,7 @@ public class HomeActivity extends AstridActivity { */ private void performRedirection() { Intent intent = new Intent(this, TaskListActivity.class); - intent.putExtra(TaskListActivity.TOKEN_FILTER, FilterExposer.buildInboxFilter(getResources())); + intent.putExtra(TaskListActivity.TOKEN_FILTER, CoreFilterExposer.buildInboxFilter(getResources())); startActivity(intent); finish(); } diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index 16b446d8d..7f63a0b7e 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -46,7 +46,7 @@ import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.TaskDetail; import com.todoroo.astrid.dao.Database; -import com.todoroo.astrid.filters.FilterExposer; +import com.todoroo.astrid.filters.CoreFilterExposer; import com.todoroo.astrid.model.Task; import com.todoroo.astrid.service.AstridDependencyInjector; import com.todoroo.astrid.service.TaskService; @@ -134,9 +134,9 @@ public class TaskListActivity extends ListActivity implements OnScrollListener { filter = new Filter(); filter.sqlQuery = extras.getString(TOKEN_SHORTCUT_SQL); filter.title = extras.getString(TOKEN_SHORTCUT_TITLE); - filter.sqlForNewTasks = extras.getString(TOKEN_SHORTCUT_NEW_TASK_SQL); + filter.valuesForNewTasks = extras.getString(TOKEN_SHORTCUT_NEW_TASK_SQL); } else { - filter = FilterExposer.buildInboxFilter(getResources()); + filter = CoreFilterExposer.buildInboxFilter(getResources()); } database.openForWriting(); diff --git a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java index e20e6c992..c2c4d81e0 100644 --- a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java @@ -59,7 +59,7 @@ public class TaskAdapter extends CursorAdapter { Task.URGENCY, Task.DUE_DATE, Task.COMPLETION_DATE, - Task.HIDDEN_UNTIL, + Task.HIDE_UNTIL, }; private static int[] IMPORTANCE_COLORS = null; @@ -201,7 +201,7 @@ public class TaskAdapter extends CursorAdapter { // name final TextView nameView = viewHolder.nameView; { String nameValue = task.getValue(Task.TITLE); - int hiddenUntil = task.getValue(Task.HIDDEN_UNTIL); + int hiddenUntil = task.getValue(Task.HIDE_UNTIL); if(hiddenUntil > DateUtilities.now()) nameValue = r.getString(R.string.TAd_hiddenFormat, nameValue); nameView.setText(nameValue); diff --git a/astrid/src/com/todoroo/astrid/dao/MetadataDao.java b/astrid/src/com/todoroo/astrid/dao/MetadataDao.java index d685d2233..339af654c 100644 --- a/astrid/src/com/todoroo/astrid/dao/MetadataDao.java +++ b/astrid/src/com/todoroo/astrid/dao/MetadataDao.java @@ -10,11 +10,11 @@ import android.database.Cursor; import com.todoroo.andlib.data.GenericDao; import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; -import com.todoroo.andlib.data.sql.Criterion; -import com.todoroo.andlib.data.sql.Join; -import com.todoroo.andlib.data.sql.Query; import com.todoroo.andlib.service.Autowired; 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.model.Metadata; import com.todoroo.astrid.model.Task; diff --git a/astrid/src/com/todoroo/astrid/dao/TaskDao.java b/astrid/src/com/todoroo/astrid/dao/TaskDao.java index 527c5dd19..f44dfde87 100644 --- a/astrid/src/com/todoroo/astrid/dao/TaskDao.java +++ b/astrid/src/com/todoroo/astrid/dao/TaskDao.java @@ -11,10 +11,10 @@ import android.content.Intent; import com.todoroo.andlib.data.AbstractModel; import com.todoroo.andlib.data.GenericDao; -import com.todoroo.andlib.data.sql.Criterion; 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.utility.DateUtilities; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; @@ -59,8 +59,8 @@ public class TaskDao extends GenericDao { } /** Return tasks that are not hidden at given unixtime */ - public static Criterion isVisible(int time) { - return Task.HIDDEN_UNTIL.lt(time); + public static Criterion isVisible(long time) { + return Task.HIDE_UNTIL.lt(time); } /** Returns tasks that have a due date */ @@ -69,17 +69,17 @@ public class TaskDao extends GenericDao { } /** Returns tasks that are due before a certain unixtime */ - public static Criterion dueBefore(int time) { + public static Criterion dueBefore(long time) { return Criterion.and(Task.DUE_DATE.gt(0), Task.DUE_DATE.lt(time)); } /** Returns tasks that are due after a certain unixtime */ - public static Criterion dueAfter(int time) { + public static Criterion dueAfter(long time) { return Task.DUE_DATE.gt(time); } /** Returns tasks completed before a given unixtime */ - public static Criterion completedBefore(int time) { + public static Criterion completedBefore(long time) { return Criterion.and(Task.COMPLETION_DATE.gt(0), Task.COMPLETION_DATE.lt(time)); } diff --git a/astrid/src/com/todoroo/astrid/model/Task.java b/astrid/src/com/todoroo/astrid/model/Task.java index 61419a230..8a9e93527 100644 --- a/astrid/src/com/todoroo/astrid/model/Task.java +++ b/astrid/src/com/todoroo/astrid/model/Task.java @@ -18,7 +18,6 @@ import com.todoroo.andlib.data.Property.IntegerProperty; import com.todoroo.andlib.data.Property.LongProperty; import com.todoroo.andlib.data.Property.StringProperty; import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.astrid.api.AstridContentProvider.AstridTask; /** * Data Model which represents a task users need to accomplish. @@ -27,7 +26,7 @@ import com.todoroo.astrid.api.AstridContentProvider.AstridTask; * */ @SuppressWarnings("nls") -public class Task extends AbstractModel { +public final class Task extends AbstractModel { // --- table @@ -37,43 +36,43 @@ public class Task extends AbstractModel { /** ID */ public static final LongProperty ID = new LongProperty( - TABLE, AstridTask.ID); + TABLE, ID_PROPERTY_NAME); /** Name of Task */ public static final StringProperty TITLE = new StringProperty( - TABLE, AstridTask.TITLE); + TABLE, "title"); /** Urgency of Task (see urgency flags) */ public static final IntegerProperty URGENCY = new IntegerProperty( - TABLE, AstridTask.URGENCY); + TABLE, "urgency"); /** Importance of Task (see importance flags) */ public static final IntegerProperty IMPORTANCE = new IntegerProperty( - TABLE, AstridTask.IMPORTANCE); + TABLE, "importance"); /** Unixtime Task is due, 0 if not set */ - public static final IntegerProperty DUE_DATE = new IntegerProperty( - TABLE, AstridTask.DUE_DATE); + public static final LongProperty DUE_DATE = new LongProperty( + TABLE, "dyeDate"); /** Unixtime Task should be hidden until */ - public static final IntegerProperty HIDDEN_UNTIL = new IntegerProperty( - TABLE, AstridTask.HIDDEN_UNTIL); + public static final LongProperty HIDE_UNTIL = new LongProperty( + TABLE, "hideUntil"); /** Unixtime Task was created */ - public static final IntegerProperty CREATION_DATE = new IntegerProperty( - TABLE, AstridTask.CREATION_DATE); + public static final LongProperty CREATION_DATE = new LongProperty( + TABLE, "created"); /** Unixtime Task was last touched */ - public static final IntegerProperty MODIFICATION_DATE = new IntegerProperty( - TABLE, AstridTask.MODIFICATION_DATE); + public static final LongProperty MODIFICATION_DATE = new LongProperty( + TABLE, "modified"); /** Unixtime Task was completed. 0 means active */ - public static final IntegerProperty COMPLETION_DATE = new IntegerProperty( - TABLE, AstridTask.COMPLETION_DATE); + public static final LongProperty COMPLETION_DATE = new LongProperty( + TABLE, "completed"); - /** Unixtime Task was deleted. 0 means active */ - public static final IntegerProperty DELETION_DATE = new IntegerProperty( - TABLE, AstridTask.DELETION_DATE); + /** Unixtime Task was deleted. 0 means not deleted */ + public static final LongProperty DELETION_DATE = new LongProperty( + TABLE, "deleted"); // --- for migration purposes from astrid 2 (eventually we will want to // move these into the metadata table and treat them as plug-ins @@ -117,24 +116,24 @@ public class Task extends AbstractModel { /** List of all properties for this model */ public static final Property[] PROPERTIES = generateProperties(Task.class); - // --- urgency flags + // --- urgency settings - public static final int URGENCY_NONE = AstridTask.URGENCY_NONE; - public static final int URGENCY_TODAY = AstridTask.URGENCY_TODAY; - public static final int URGENCY_THIS_WEEK = AstridTask.URGENCY_THIS_WEEK; - public static final int URGENCY_THIS_MONTH = AstridTask.URGENCY_THIS_MONTH; - public static final int URGENCY_WITHIN_THREE_MONTHS = AstridTask.URGENCY_WITHIN_THREE_MONTHS; - public static final int URGENCY_WITHIN_SIX_MONTHS = AstridTask.URGENCY_WITHIN_SIX_MONTHS; - public static final int URGENCY_WITHIN_A_YEAR = AstridTask.URGENCY_WITHIN_A_YEAR; - public static final int URGENCY_SPECIFIC_DAY = AstridTask.URGENCY_SPECIFIC_DAY; - public static final int URGENCY_SPECIFIC_DAY_TIME = AstridTask.URGENCY_SPECIFIC_DAY_TIME; + public static final int URGENCY_NONE = 0; + public static final int URGENCY_TODAY = 1; + public static final int URGENCY_THIS_WEEK = 2; + public static final int URGENCY_THIS_MONTH = 3; + public static final int URGENCY_WITHIN_THREE_MONTHS = 4; + public static final int URGENCY_WITHIN_SIX_MONTHS = 5; + public static final int URGENCY_WITHIN_A_YEAR = 6; + public static final int URGENCY_SPECIFIC_DAY = 7; + public static final int URGENCY_SPECIFIC_DAY_TIME = 8; - // --- importance flags + // --- importance settings - public static final int IMPORTANCE_DO_OR_DIE = AstridTask.IMPORTANCE_DO_OR_DIE; - public static final int IMPORTANCE_MUST_DO = AstridTask.IMPORTANCE_MUST_DO; - public static final int IMPORTANCE_SHOULD_DO = AstridTask.IMPORTANCE_SHOULD_DO; - public static final int IMPORTANCE_NONE = AstridTask.IMPORTANCE_NONE; + public static final int IMPORTANCE_DO_OR_DIE = 0; + public static final int IMPORTANCE_MUST_DO = 1; + public static final int IMPORTANCE_SHOULD_DO = 2; + public static final int IMPORTANCE_NONE = 3; // --- defaults @@ -144,7 +143,7 @@ public class Task extends AbstractModel { static { defaultValues.put(TITLE.name, ""); defaultValues.put(DUE_DATE.name, 0); - defaultValues.put(HIDDEN_UNTIL.name, 0); + defaultValues.put(HIDE_UNTIL.name, 0); defaultValues.put(COMPLETION_DATE.name, 0); defaultValues.put(DELETION_DATE.name, 0); defaultValues.put(URGENCY.name, URGENCY_NONE); @@ -225,7 +224,7 @@ public class Task extends AbstractModel { /** Checks whether task is hidden. Requires HIDDEN_UNTIL */ public boolean isHidden() { - return getValue(HIDDEN_UNTIL) > DateUtilities.now(); + return getValue(HIDE_UNTIL) > DateUtilities.now(); } /** Checks whether task is done. Requires DUE_DATE */ diff --git a/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java b/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java index 53ea765b2..ddc4f03db 100644 --- a/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java +++ b/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java @@ -105,7 +105,7 @@ public class Astrid2To3UpgradeHelper { propertyMap.put(AbstractTaskModel.TIMER_START, Task.TIMER_START); propertyMap.put(AbstractTaskModel.DEFINITE_DUE_DATE, Task.DUE_DATE); propertyMap.put(AbstractTaskModel.PREFERRED_DUE_DATE, Task.PREFERRED_DUE_DATE); - propertyMap.put(AbstractTaskModel.HIDDEN_UNTIL, Task.HIDDEN_UNTIL); + propertyMap.put(AbstractTaskModel.HIDDEN_UNTIL, Task.HIDE_UNTIL); propertyMap.put(AbstractTaskModel.POSTPONE_COUNT, Task.POSTPONE_COUNT); propertyMap.put(AbstractTaskModel.NOTIFICATIONS, Task.NOTIFICATIONS); propertyMap.put(AbstractTaskModel.NOTIFICATION_FLAGS, Task.NOTIFICATION_FLAGS); @@ -172,7 +172,7 @@ public class Astrid2To3UpgradeHelper { property == Task.CREATION_DATE || property == Task.DELETION_DATE || property == Task.DUE_DATE || - property == Task.HIDDEN_UNTIL || + property == Task.HIDE_UNTIL || property == Task.LAST_NOTIFIED || property == Task.MODIFICATION_DATE || property == Task.PREFERRED_DUE_DATE || diff --git a/astrid/src/com/todoroo/astrid/service/MetadataService.java b/astrid/src/com/todoroo/astrid/service/MetadataService.java index 3e1d6373f..5dd138d1d 100644 --- a/astrid/src/com/todoroo/astrid/service/MetadataService.java +++ b/astrid/src/com/todoroo/astrid/service/MetadataService.java @@ -3,11 +3,11 @@ package com.todoroo.astrid.service; import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.Property.CountProperty; -import com.todoroo.andlib.data.sql.Criterion; -import com.todoroo.andlib.data.sql.Order; -import com.todoroo.andlib.data.sql.Query; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Order; +import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.model.Metadata; diff --git a/astrid/src/com/todoroo/astrid/service/TaskService.java b/astrid/src/com/todoroo/astrid/service/TaskService.java index 253dd660b..4abfb486d 100644 --- a/astrid/src/com/todoroo/astrid/service/TaskService.java +++ b/astrid/src/com/todoroo/astrid/service/TaskService.java @@ -2,9 +2,9 @@ package com.todoroo.astrid.service; import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; -import com.todoroo.andlib.data.sql.Query; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.dao.TaskDao; diff --git a/tests/src/com/todoroo/astrid/dao/MetadataDaoTests.java b/tests/src/com/todoroo/astrid/dao/MetadataDaoTests.java index 44c35fb69..00a9c37a1 100644 --- a/tests/src/com/todoroo/astrid/dao/MetadataDaoTests.java +++ b/tests/src/com/todoroo/astrid/dao/MetadataDaoTests.java @@ -2,8 +2,8 @@ package com.todoroo.astrid.dao; import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; -import com.todoroo.andlib.data.sql.Query; import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.model.Metadata; import com.todoroo.astrid.model.Task; diff --git a/tests/src/com/todoroo/astrid/dao/TaskDaoTests.java b/tests/src/com/todoroo/astrid/dao/TaskDaoTests.java index 4ed60d1f0..5cedb25b7 100644 --- a/tests/src/com/todoroo/astrid/dao/TaskDaoTests.java +++ b/tests/src/com/todoroo/astrid/dao/TaskDaoTests.java @@ -2,9 +2,9 @@ package com.todoroo.astrid.dao; import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; -import com.todoroo.andlib.data.sql.Order; -import com.todoroo.andlib.data.sql.Query; import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.sql.Order; +import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.model.Task; @@ -85,7 +85,7 @@ public class TaskDaoTests extends DatabaseTestCase { // create hidden task task = new Task(); task.setValue(Task.TITLE, "hidden"); - task.setValue(Task.HIDDEN_UNTIL, DateUtilities.now() + 10000); + task.setValue(Task.HIDE_UNTIL, DateUtilities.now() + 10000); assertTrue(taskDao.save(task, false)); // create task with deadlines diff --git a/tests/src/com/todoroo/astrid/model/TaskTests.java b/tests/src/com/todoroo/astrid/model/TaskTests.java index 0686ee4ad..6f21d5d2c 100644 --- a/tests/src/com/todoroo/astrid/model/TaskTests.java +++ b/tests/src/com/todoroo/astrid/model/TaskTests.java @@ -44,7 +44,7 @@ public class TaskTests extends DatabaseTestCase { ContentValues defaults = new Task().getDefaultValues(); assertTrue(defaults.containsKey(Task.TITLE.name)); assertTrue(defaults.containsKey(Task.DUE_DATE.name)); - assertTrue(defaults.containsKey(Task.HIDDEN_UNTIL.name)); + assertTrue(defaults.containsKey(Task.HIDE_UNTIL.name)); assertTrue(defaults.containsKey(Task.COMPLETION_DATE.name)); assertTrue(defaults.containsKey(Task.URGENCY.name)); assertTrue(defaults.containsKey(Task.IMPORTANCE.name)); @@ -68,7 +68,7 @@ public class TaskTests extends DatabaseTestCase { task = new Task(); assertFalse(task.isHidden()); - task.setValue(Task.HIDDEN_UNTIL, DateUtilities.now() + 1000); + task.setValue(Task.HIDE_UNTIL, DateUtilities.now() + 1000); assertTrue(task.isHidden()); task = new Task(); diff --git a/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java b/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java index 68e75d152..d85f9fd69 100644 --- a/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java +++ b/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java @@ -3,8 +3,8 @@ package com.todoroo.astrid.upgrade; import java.util.Date; import com.todoroo.andlib.data.TodorooCursor; -import com.todoroo.andlib.data.sql.Query; import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.alarms.Alarm; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.legacy.data.alerts.AlertController; @@ -100,14 +100,14 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { assertEquals(griffey.getEstimatedSeconds(), task.getValue(Task.ESTIMATED_SECONDS)); assertEquals(griffey.getNotes(), task.getValue(Task.NOTES)); assertEquals((Integer)0, task.getValue(Task.LAST_NOTIFIED)); - assertEquals((Integer)0, task.getValue(Task.HIDDEN_UNTIL)); + assertEquals((Integer)0, task.getValue(Task.HIDE_UNTIL)); tasks.moveToNext(); task = new Task(tasks); assertEquals(guti.getName(), task.getValue(Task.TITLE)); assertDatesEqual(guti.getDefiniteDueDate(), task.getValue(Task.DUE_DATE)); assertDatesEqual(guti.getPreferredDueDate(), task.getValue(Task.PREFERRED_DUE_DATE)); - assertDatesEqual(guti.getHiddenUntil(), task.getValue(Task.HIDDEN_UNTIL)); + assertDatesEqual(guti.getHiddenUntil(), task.getValue(Task.HIDE_UNTIL)); assertEquals((Integer)Task.IMPORTANCE_DO_OR_DIE, task.getValue(Task.IMPORTANCE)); assertEquals(guti.getRepeat().getValue(), task.getRepeatInfo().getValue()); assertEquals(guti.getRepeat().getInterval().ordinal(), task.getRepeatInfo().getInterval().ordinal());