From 44bd887dfb14016846d9fa8380c5851c92960139 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Thu, 7 Feb 2013 15:13:42 -0800 Subject: [PATCH] Use the same kind of union query for EditNoteActivity that we do for TaskCommentsFragment --- .../astrid/actfm/TaskCommentsFragment.java | 34 ++--------- .../astrid/notes/EditNoteActivity.java | 58 +++++++++++++------ .../todoroo/astrid/adapter/UpdateAdapter.java | 4 +- .../todoroo/astrid/service/TaskService.java | 34 +++++++++++ 4 files changed, 80 insertions(+), 50 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java index acad74749..628dd4b33 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java @@ -2,28 +2,18 @@ package com.todoroo.astrid.actfm; import android.content.Intent; import android.database.Cursor; -import android.text.TextUtils; import android.view.ViewGroup; import android.widget.ListView; import com.timsu.astrid.R; -import com.todoroo.andlib.data.Property; import com.todoroo.andlib.service.Autowired; -import com.todoroo.andlib.sql.Criterion; -import com.todoroo.andlib.sql.Field; -import com.todoroo.andlib.sql.Join; -import com.todoroo.andlib.sql.Order; -import com.todoroo.andlib.sql.Query; -import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.astrid.actfm.sync.messages.NameMaps; import com.todoroo.astrid.adapter.UpdateAdapter; import com.todoroo.astrid.dao.TaskDao; -import com.todoroo.astrid.data.History; import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.data.User; import com.todoroo.astrid.data.UserActivity; import com.todoroo.astrid.service.StatisticsConstants; +import com.todoroo.astrid.service.TaskService; public class TaskCommentsFragment extends CommentsFragment { @@ -34,6 +24,9 @@ public class TaskCommentsFragment extends CommentsFragment { private Task task; + @Autowired + private TaskService taskService; + public TaskCommentsFragment() { super(); } @@ -63,24 +56,7 @@ public class TaskCommentsFragment extends CommentsFragment { @Override protected Cursor getCursor() { - Query taskQuery = queryForTask(task, UpdateAdapter.USER_TABLE_ALIAS, UpdateAdapter.USER_ACTIVITY_PROPERTIES, UpdateAdapter.USER_PROPERTIES); - - Query historyQuery = Query.select(AndroidUtilities.addToArray(UpdateAdapter.HISTORY_PROPERTIES, UpdateAdapter.USER_PROPERTIES)).from(History.TABLE) - .where(Criterion.and(History.TABLE_ID.eq(NameMaps.TABLE_ID_TASKS), History.TARGET_ID.eq(task.getUuid()))) - .from(History.TABLE) - .join(Join.left(User.TABLE.as(UpdateAdapter.USER_TABLE_ALIAS), History.USER_UUID.eq(Field.field(UpdateAdapter.USER_TABLE_ALIAS + "." + User.UUID.name)))); //$NON-NLS-1$; - - Query resultQuery = taskQuery.union(historyQuery).orderBy(Order.desc("1")); //$NON-NLS-1$ - - return userActivityDao.query(resultQuery); - } - - private static Query queryForTask(Task task, String userTableAlias, Property[] activityProperties, Property[] userProperties) { - Query result = Query.select(AndroidUtilities.addToArray(activityProperties, userProperties)) - .where(Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TASK_COMMENT), UserActivity.TARGET_ID.eq(task.getUuid()))); - if (!TextUtils.isEmpty(userTableAlias)) - result = result.join(Join.left(User.TABLE.as(userTableAlias), UserActivity.USER_UUID.eq(Field.field(userTableAlias + "." + User.UUID.name)))); //$NON-NLS-1$ - return result; + return taskService.getActivityAndHistoryForTask(task); } @Override diff --git a/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java b/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java index 3151878fc..dc1856a2c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java @@ -21,6 +21,7 @@ import android.graphics.Color; import android.support.v4.app.Fragment; import android.text.Editable; import android.text.Html; +import android.text.SpannableString; import android.text.Spanned; import android.text.TextUtils; import android.text.TextWatcher; @@ -43,11 +44,7 @@ import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.DependencyInjectionService; -import com.todoroo.andlib.sql.Field; -import com.todoroo.andlib.sql.Join; -import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Query; -import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.actfm.ActFmCameraModule; import com.todoroo.astrid.actfm.ActFmCameraModule.CameraResultCallback; @@ -56,12 +53,14 @@ import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; import com.todoroo.astrid.actfm.sync.ActFmSyncService; import com.todoroo.astrid.actfm.sync.ActFmSyncThread; import com.todoroo.astrid.actfm.sync.messages.BriefMe; +import com.todoroo.astrid.actfm.sync.messages.NameMaps; import com.todoroo.astrid.activity.AstridActivity; import com.todoroo.astrid.activity.TaskEditFragment; import com.todoroo.astrid.adapter.UpdateAdapter; import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.dao.UserActivityDao; +import com.todoroo.astrid.data.History; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.Task; @@ -73,6 +72,7 @@ import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.StartupService; import com.todoroo.astrid.service.StatisticsConstants; import com.todoroo.astrid.service.StatisticsService; +import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.timers.TimerActionControlSet.TimerActionListener; import com.todoroo.astrid.utility.ResourceDrawableCache; @@ -86,6 +86,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene @Autowired ActFmPreferenceService actFmPreferenceService; @Autowired MetadataService metadataService; @Autowired UserActivityDao userActivityDao; + @Autowired TaskService taskService; private final ArrayList items = new ArrayList(); private EditText commentField; @@ -284,20 +285,25 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene } - TodorooCursor updates = userActivityDao.query(Query.select(AndroidUtilities.addToArray(UserActivity.PROPERTIES, UpdateAdapter.USER_PROPERTIES)) - .where(UserActivity.TARGET_ID.eq(task.getUuid())) - .join(Join.left(User.TABLE.as(UpdateAdapter.USER_TABLE_ALIAS), UserActivity.USER_UUID.eq(Field.field(UpdateAdapter.USER_TABLE_ALIAS + "." + User.UUID.name)))) //$NON-NLS-1$ - .orderBy(Order.desc(UserActivity.CREATED_AT))); + TodorooCursor updates = taskService.getActivityAndHistoryForTask(task); try { UserActivity update = new UserActivity(); + History history = new History(); User user = new User(); for(updates.moveToFirst(); !updates.isAfterLast(); updates.moveToNext()) { update.clear(); user.clear(); - update.readFromCursor(updates); + String type = updates.getString(UpdateAdapter.TYPE_PROPERTY_INDEX); + NoteOrUpdate noa; + if (NameMaps.TABLE_ID_USER_ACTIVITY.equals(type)) { + UpdateAdapter.readUserActivityProperties(updates, update); + noa = NoteOrUpdate.fromUpdateOrHistory(activity, update, null, user, linkColor); + } else { + UpdateAdapter.readHistoryProperties(updates, history); + noa = NoteOrUpdate.fromUpdateOrHistory(activity, null, history, user, linkColor); + } UpdateAdapter.readUserProperties(updates, user); - NoteOrUpdate noa = NoteOrUpdate.fromUpdate(activity, update, user, linkColor); if(noa != null) items.add(noa); } @@ -487,20 +493,34 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene m.getValue(Metadata.CREATION_DATE)); } - public static NoteOrUpdate fromUpdate(AstridActivity context, UserActivity u, User user, String linkColor) { - String commentPicture = u.getPictureUrl(UserActivity.PICTURE, RemoteModel.PICTURE_MEDIUM); - Bitmap commentBitmap = null; - if (TextUtils.isEmpty(commentPicture)) - commentBitmap = u.getPictureBitmap(UserActivity.PICTURE); - Spanned title = UpdateAdapter.getUpdateComment(context, u, user, linkColor, UpdateAdapter.FROM_TASK_VIEW); + public static NoteOrUpdate fromUpdateOrHistory(AstridActivity context, UserActivity u, History history, User user, String linkColor) { String userImage = ""; //$NON-NLS-1$ - if (user.containsNonNullValue(UpdateAdapter.USER_PICTURE)) - userImage = user.getPictureUrl(UpdateAdapter.USER_PICTURE, RemoteModel.PICTURE_THUMB); + String commentPicture = ""; //$NON-NLS-1$ + Spanned title; + Bitmap commentBitmap = null; + long createdAt = 0; + + if (u != null) { + commentPicture = u.getPictureUrl(UserActivity.PICTURE, RemoteModel.PICTURE_MEDIUM); + if (TextUtils.isEmpty(commentPicture)) + commentBitmap = u.getPictureBitmap(UserActivity.PICTURE); + title = UpdateAdapter.getUpdateComment(context, u, user, linkColor, UpdateAdapter.FROM_TASK_VIEW); + userImage = ""; //$NON-NLS-1$ + if (user.containsNonNullValue(UpdateAdapter.USER_PICTURE)) + userImage = user.getPictureUrl(UpdateAdapter.USER_PICTURE, RemoteModel.PICTURE_THUMB); + createdAt = u.getValue(UserActivity.CREATED_AT); + } else { + if (user.containsNonNullValue(UpdateAdapter.USER_PICTURE)) + userImage = user.getPictureUrl(UpdateAdapter.USER_PICTURE, RemoteModel.PICTURE_THUMB); + title = new SpannableString(UpdateAdapter.getHistoryComment(context, history, user, linkColor, UpdateAdapter.FROM_TASK_VIEW)); + createdAt = history.getValue(History.CREATED_AT); + } + return new NoteOrUpdate(userImage, title, commentPicture, commentBitmap, - u.getValue(UserActivity.CREATED_AT)); + createdAt); } } diff --git a/astrid/src/com/todoroo/astrid/adapter/UpdateAdapter.java b/astrid/src/com/todoroo/astrid/adapter/UpdateAdapter.java index a254adc7f..77b5eee9a 100644 --- a/astrid/src/com/todoroo/astrid/adapter/UpdateAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/UpdateAdapter.java @@ -214,7 +214,7 @@ public class UpdateAdapter extends CursorAdapter { setFieldContentsAndVisibility(view, update, user, history, type); } - private static void readUserActivityProperties(TodorooCursor unionCursor, UserActivity activity) { + public static void readUserActivityProperties(TodorooCursor unionCursor, UserActivity activity) { activity.setValue(UserActivity.CREATED_AT, unionCursor.getLong(0)); activity.setValue(UserActivity.UUID, unionCursor.getString(1)); activity.setValue(UserActivity.ACTION, unionCursor.getString(2)); @@ -224,7 +224,7 @@ public class UpdateAdapter extends CursorAdapter { activity.setValue(UserActivity.PICTURE, unionCursor.getString(6)); } - private static void readHistoryProperties(TodorooCursor unionCursor, History history) { + public static void readHistoryProperties(TodorooCursor unionCursor, History history) { history.setValue(History.CREATED_AT, unionCursor.getLong(0)); history.setValue(History.USER_UUID, unionCursor.getString(1)); history.setValue(History.COLUMN, unionCursor.getString(2)); diff --git a/astrid/src/com/todoroo/astrid/service/TaskService.java b/astrid/src/com/todoroo/astrid/service/TaskService.java index 404a1f313..6e0595917 100644 --- a/astrid/src/com/todoroo/astrid/service/TaskService.java +++ b/astrid/src/com/todoroo/astrid/service/TaskService.java @@ -12,18 +12,24 @@ import java.util.Map.Entry; import org.weloveastrid.rmilk.data.MilkTaskFields; import android.content.ContentValues; +import android.text.TextUtils; import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Field; import com.todoroo.andlib.sql.Functions; +import com.todoroo.andlib.sql.Join; +import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; +import com.todoroo.astrid.actfm.sync.messages.NameMaps; +import com.todoroo.astrid.adapter.UpdateAdapter; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.core.PluginServices; @@ -31,10 +37,14 @@ import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; +import com.todoroo.astrid.dao.UserActivityDao; +import com.todoroo.astrid.data.History; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.SyncFlags; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.data.User; +import com.todoroo.astrid.data.UserActivity; import com.todoroo.astrid.gcal.GCalHelper; import com.todoroo.astrid.gtasks.GtasksMetadata; import com.todoroo.astrid.opencrx.OpencrxCoreUtils; @@ -74,6 +84,9 @@ public class TaskService { @Autowired private MetadataDao metadataDao; + @Autowired + private UserActivityDao userActivityDao; + public TaskService() { DependencyInjectionService.getInstance().inject(this); } @@ -565,4 +578,25 @@ public class TaskService { return task; } + public TodorooCursor getActivityAndHistoryForTask(Task task) { + Query taskQuery = queryForTask(task, UpdateAdapter.USER_TABLE_ALIAS, UpdateAdapter.USER_ACTIVITY_PROPERTIES, UpdateAdapter.USER_PROPERTIES); + + Query historyQuery = Query.select(AndroidUtilities.addToArray(UpdateAdapter.HISTORY_PROPERTIES, UpdateAdapter.USER_PROPERTIES)).from(History.TABLE) + .where(Criterion.and(History.TABLE_ID.eq(NameMaps.TABLE_ID_TASKS), History.TARGET_ID.eq(task.getUuid()))) + .from(History.TABLE) + .join(Join.left(User.TABLE.as(UpdateAdapter.USER_TABLE_ALIAS), History.USER_UUID.eq(Field.field(UpdateAdapter.USER_TABLE_ALIAS + "." + User.UUID.name)))); //$NON-NLS-1$; + + Query resultQuery = taskQuery.union(historyQuery).orderBy(Order.desc("1")); //$NON-NLS-1$ + + return userActivityDao.query(resultQuery); + } + + private static Query queryForTask(Task task, String userTableAlias, Property[] activityProperties, Property[] userProperties) { + Query result = Query.select(AndroidUtilities.addToArray(activityProperties, userProperties)) + .where(Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TASK_COMMENT), UserActivity.TARGET_ID.eq(task.getUuid()))); + if (!TextUtils.isEmpty(userTableAlias)) + result = result.join(Join.left(User.TABLE.as(userTableAlias), UserActivity.USER_UUID.eq(Field.field(userTableAlias + "." + User.UUID.name)))); //$NON-NLS-1$ + return result; + } + }