diff --git a/astrid/src/main/java/com/todoroo/astrid/adapter/UpdateAdapter.java b/astrid/src/main/java/com/todoroo/astrid/adapter/UpdateAdapter.java deleted file mode 100644 index c3f32ba7a..000000000 --- a/astrid/src/main/java/com/todoroo/astrid/adapter/UpdateAdapter.java +++ /dev/null @@ -1,203 +0,0 @@ -/** - * Copyright (c) 2012 Todoroo Inc - * - * See the file "LICENSE" for the full license governing this code. - */ -package com.todoroo.astrid.adapter; - -import android.content.Context; -import android.content.Intent; -import android.database.Cursor; -import android.net.Uri; -import android.support.v4.app.Fragment; -import android.text.Html; -import android.text.Spanned; -import android.text.format.DateUtils; -import android.text.method.LinkMovementMethod; -import android.util.TypedValue; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.widget.CursorAdapter; -import android.widget.ImageView; -import android.widget.TextView; - -import com.todoroo.andlib.data.Property; -import com.todoroo.andlib.data.Property.StringProperty; -import com.todoroo.andlib.data.TodorooCursor; -import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.astrid.actfm.sync.messages.NameMaps; -import com.todoroo.astrid.data.UserActivity; - -import org.tasks.R; - -import static org.tasks.files.FileHelper.getPathFromUri; -import static org.tasks.files.ImageHelper.sampleBitmap; - -/** - * Adapter for displaying a user's activity - * - * @author Tim Su - * - */ -public class UpdateAdapter extends CursorAdapter { - - // --- instance variables - - protected final Fragment fragment; - private final int resource; - private final LayoutInflater inflater; - - public static final StringProperty ACTIVITY_TYPE_PROPERTY = new StringProperty(null, "'" + NameMaps.TABLE_ID_USER_ACTIVITY + "' as type"); //$NON-NLS-1$//$NON-NLS-2$ - - public static final Property[] USER_ACTIVITY_PROPERTIES = { - UserActivity.CREATED_AT, - UserActivity.UUID, - UserActivity.ACTION, - UserActivity.MESSAGE, - UserActivity.TARGET_ID, - UserActivity.TARGET_NAME, - UserActivity.PICTURE, - UserActivity.USER_UUID, - UserActivity.ID, - ACTIVITY_TYPE_PROPERTY, - }; - - public static final int TYPE_PROPERTY_INDEX = USER_ACTIVITY_PROPERTIES.length - 1; - - private final int color; - - /** - * Constructor - * - * @param resource - * layout resource to inflate - * @param c - * database cursor - */ - public UpdateAdapter(Fragment fragment, int resource, - Cursor c) { - super(fragment.getActivity(), c, false); - - inflater = (LayoutInflater) fragment.getActivity().getSystemService( - Context.LAYOUT_INFLATER_SERVICE); - - this.resource = resource; - this.fragment = fragment; - - TypedValue tv = new TypedValue(); - fragment.getActivity().getTheme().resolveAttribute(R.attr.asTextColor, tv, false); - color = tv.data; - - fragment.getActivity().getTheme().resolveAttribute(R.attr.asDueDateColor, tv, false); - } - - /* ====================================================================== - * =========================================================== view setup - * ====================================================================== */ - - private class ModelHolder { - public UserActivity activity = new UserActivity(); - } - - /** Creates a new view for use in the list view */ - @Override - public View newView(Context context, Cursor cursor, ViewGroup parent) { - ViewGroup view = (ViewGroup)inflater.inflate(resource, parent, false); - - view.setTag(new ModelHolder()); - - // populate view content - bindView(view, context, cursor); - - return view; - } - - /** Populates a view with content */ - @Override - public void bindView(View view, Context context, Cursor c) { - TodorooCursor cursor = (TodorooCursor)c; - ModelHolder mh = ((ModelHolder) view.getTag()); - - String type = cursor.getString(TYPE_PROPERTY_INDEX); - - UserActivity update = mh.activity; - update.clear(); - - readUserActivityProperties(cursor, update); - - setFieldContentsAndVisibility(view, update, type); - } - - public static void readUserActivityProperties(TodorooCursor unionCursor, UserActivity activity) { - activity.setCreatedAt(unionCursor.getLong(0)); - activity.setUUID(unionCursor.getString(1)); - activity.setAction(unionCursor.getString(2)); - activity.setMessage(unionCursor.getString(3)); - activity.setTargetId(unionCursor.getString(4)); - activity.setTargetName(unionCursor.getString(5)); - activity.setPicture(unionCursor.getString(6)); - activity.setUserUUID(unionCursor.getString(7)); - } - - /** Helper method to set the contents and visibility of each field */ - public synchronized void setFieldContentsAndVisibility(View view, UserActivity activity, String type) { - // picture - if (NameMaps.TABLE_ID_USER_ACTIVITY.equals(type)) { - setupUserActivityRow(view, activity); - } - } - - private void setupUserActivityRow(View view, UserActivity activity) { - final ImageView commentPictureView = (ImageView)view.findViewById(R.id.comment_picture); { - Uri updateBitmap = activity.getPictureUri(); - setupImagePopupForCommentView(view, commentPictureView, updateBitmap, fragment); - } - - // name - final TextView nameView = (TextView)view.findViewById(R.id.title); { - nameView.setText(getUpdateComment(activity)); - nameView.setMovementMethod(new LinkMovementMethod()); - nameView.setTextColor(color); - } - - // date - final TextView date = (TextView)view.findViewById(R.id.date); { - CharSequence dateString = DateUtils.getRelativeTimeSpanString(activity.getCreatedAt(), - DateUtilities.now(), DateUtils.MINUTE_IN_MILLIS, - DateUtils.FORMAT_ABBREV_RELATIVE); - date.setText(dateString); - } - } - - @Override - public boolean isEnabled(int position) { - return false; - } - - public static void setupImagePopupForCommentView(View view, ImageView commentPictureView, final Uri updateBitmap, - final Fragment fragment) { - if (updateBitmap != null) { //$NON-NLS-1$ - commentPictureView.setVisibility(View.VISIBLE); - String path = getPathFromUri(fragment.getActivity(), updateBitmap); - commentPictureView.setImageBitmap(sampleBitmap(path, commentPictureView.getLayoutParams().width, commentPictureView.getLayoutParams().height)); - - view.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - fragment.startActivity(new Intent(Intent.ACTION_VIEW) {{ - setDataAndType(updateBitmap, "image/jpg"); - }}); - } - }); - } else { - commentPictureView.setVisibility(View.GONE); - } - } - - public static Spanned getUpdateComment(UserActivity activity) { - String message = activity.getMessage(); - return Html.fromHtml(message); - } -} diff --git a/astrid/src/main/java/com/todoroo/astrid/notes/EditNoteActivity.java b/astrid/src/main/java/com/todoroo/astrid/notes/EditNoteActivity.java index be1dd190b..ed55a1f40 100644 --- a/astrid/src/main/java/com/todoroo/astrid/notes/EditNoteActivity.java +++ b/astrid/src/main/java/com/todoroo/astrid/notes/EditNoteActivity.java @@ -40,7 +40,6 @@ import com.todoroo.astrid.actfm.ActFmCameraModule.ClearImageCallback; 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.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.dao.UserActivityDao; import com.todoroo.astrid.data.Metadata; @@ -68,6 +67,8 @@ import static org.tasks.files.ImageHelper.sampleBitmap; public class EditNoteActivity extends LinearLayout implements TimerActionListener { + private static final int TYPE_PROPERTY_INDEX = TaskService.USER_ACTIVITY_PROPERTIES.length - 1; + private Task task; private final Preferences preferences; @@ -280,10 +281,10 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene for(updates.moveToFirst(); !updates.isAfterLast(); updates.moveToNext()) { update.clear(); - String type = updates.getString(UpdateAdapter.TYPE_PROPERTY_INDEX); + String type = updates.getString(TYPE_PROPERTY_INDEX); NoteOrUpdate noa = null; if (NameMaps.TABLE_ID_USER_ACTIVITY.equals(type)) { - UpdateAdapter.readUserActivityProperties(updates, update); + readUserActivityProperties(updates, update); noa = NoteOrUpdate.fromUpdate(update); } if(noa != null) { @@ -333,6 +334,16 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene } } + private static void readUserActivityProperties(TodorooCursor unionCursor, UserActivity activity) { + activity.setCreatedAt(unionCursor.getLong(0)); + activity.setUUID(unionCursor.getString(1)); + activity.setAction(unionCursor.getString(2)); + activity.setMessage(unionCursor.getString(3)); + activity.setTargetId(unionCursor.getString(4)); + activity.setTargetName(unionCursor.getString(5)); + activity.setPicture(unionCursor.getString(6)); + activity.setUserUUID(unionCursor.getString(7)); + } public View getUpdateNotes(NoteOrUpdate note, ViewGroup parent) { View convertView = ((Activity)getContext()).getLayoutInflater().inflate( @@ -360,7 +371,27 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene // picture final ImageView commentPictureView = (ImageView)view.findViewById(R.id.comment_picture); - UpdateAdapter.setupImagePopupForCommentView(view, commentPictureView, item.commentBitmap, fragment); + setupImagePopupForCommentView(view, commentPictureView, item.commentBitmap, fragment); + } + + private static void setupImagePopupForCommentView(View view, ImageView commentPictureView, final Uri updateBitmap, + final Fragment fragment) { + if (updateBitmap != null) { //$NON-NLS-1$ + commentPictureView.setVisibility(View.VISIBLE); + String path = getPathFromUri(fragment.getActivity(), updateBitmap); + commentPictureView.setImageBitmap(sampleBitmap(path, commentPictureView.getLayoutParams().width, commentPictureView.getLayoutParams().height)); + + view.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + fragment.startActivity(new Intent(Intent.ACTION_VIEW) {{ + setDataAndType(updateBitmap, "image/*"); + }}); + } + }); + } else { + commentPictureView.setVisibility(View.GONE); + } } private void addComment() { @@ -438,7 +469,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene } Uri commentBitmap = u.getPictureUri(); - Spanned title = UpdateAdapter.getUpdateComment(u); + Spanned title = getUpdateComment(u); long createdAt = u.getCreatedAt(); return new NoteOrUpdate( @@ -447,6 +478,10 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene createdAt); } + private static Spanned getUpdateComment(UserActivity activity) { + String message = activity.getMessage(); + return Html.fromHtml(message); + } } public void addListener(UpdatesChangedListener listener) { diff --git a/astrid/src/main/java/com/todoroo/astrid/service/TagDataService.java b/astrid/src/main/java/com/todoroo/astrid/service/TagDataService.java index 1a49a6e39..a133df8e7 100644 --- a/astrid/src/main/java/com/todoroo/astrid/service/TagDataService.java +++ b/astrid/src/main/java/com/todoroo/astrid/service/TagDataService.java @@ -5,22 +5,11 @@ */ package com.todoroo.astrid.service; -import android.database.Cursor; - import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; -import com.todoroo.andlib.sql.Criterion; -import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Query; -import com.todoroo.andlib.utility.AndroidUtilities; -import com.todoroo.astrid.adapter.UpdateAdapter; -import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.dao.TagDataDao; -import com.todoroo.astrid.dao.UserActivityDao; -import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.TagData; -import com.todoroo.astrid.data.UserActivity; -import com.todoroo.astrid.tags.TaskToTagMetadata; import javax.inject.Inject; import javax.inject.Singleton; @@ -35,12 +24,10 @@ import javax.inject.Singleton; public class TagDataService { private final TagDataDao tagDataDao; - private final UserActivityDao userActivityDao; @Inject - public TagDataService(TagDataDao tagDataDao, UserActivityDao userActivityDao) { + public TagDataService(TagDataDao tagDataDao) { this.tagDataDao = tagDataDao; - this.userActivityDao = userActivityDao; } // --- service layer @@ -82,28 +69,4 @@ public class TagDataService { cursor.close(); } } - - private static Query queryForTagData(TagData tagData, Property[] activityProperties) { - Criterion criteria; - if (tagData == null) { - criteria = UserActivity.DELETED_AT.eq(0); - } else { - criteria = Criterion.and(UserActivity.DELETED_AT.eq(0), Criterion.or( - Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TAG_COMMENT), UserActivity.TARGET_ID.eq(tagData.getUuid())), - Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TASK_COMMENT), - UserActivity.TARGET_ID.in(Query.select(TaskToTagMetadata.TASK_UUID) - .from(Metadata.TABLE).where(Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY), TaskToTagMetadata.TAG_UUID.eq(tagData.getUuid()))))))); - } - - return Query.select(AndroidUtilities.addToArray(Property.class, activityProperties)).where(criteria); - } - - public Cursor getActivityForTagData(TagData tagData) { - Query activityQuery = queryForTagData(tagData, UpdateAdapter.USER_ACTIVITY_PROPERTIES) - .from(UserActivity.TABLE); - - Query resultQuery = activityQuery.orderBy(Order.desc("1")); //$NON-NLS-1$ - - return userActivityDao.query(resultQuery); - } } diff --git a/astrid/src/main/java/com/todoroo/astrid/service/TaskService.java b/astrid/src/main/java/com/todoroo/astrid/service/TaskService.java index 92163f4c5..1b52e7f12 100644 --- a/astrid/src/main/java/com/todoroo/astrid/service/TaskService.java +++ b/astrid/src/main/java/com/todoroo/astrid/service/TaskService.java @@ -16,7 +16,7 @@ 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.adapter.UpdateAdapter; +import com.todoroo.astrid.actfm.sync.messages.NameMaps; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.dao.TaskDao; @@ -53,6 +53,21 @@ import javax.inject.Singleton; @Singleton public class TaskService { + private static final Property.StringProperty ACTIVITY_TYPE_PROPERTY = new Property.StringProperty(null, "'" + NameMaps.TABLE_ID_USER_ACTIVITY + "' as type"); //$NON-NLS-1$//$NON-NLS-2$ + + public static final Property[] USER_ACTIVITY_PROPERTIES = { + UserActivity.CREATED_AT, + UserActivity.UUID, + UserActivity.ACTION, + UserActivity.MESSAGE, + UserActivity.TARGET_ID, + UserActivity.TARGET_NAME, + UserActivity.PICTURE, + UserActivity.USER_UUID, + UserActivity.ID, + ACTIVITY_TYPE_PROPERTY, + }; + private static final Logger log = LoggerFactory.getLogger(TaskService.class); public static final String TRANS_QUICK_ADD_MARKUP = "markup"; //$NON-NLS-1$ @@ -366,7 +381,7 @@ public class TaskService { } public TodorooCursor getActivityForTask(Task task) { - Query taskQuery = queryForTask(task, UpdateAdapter.USER_ACTIVITY_PROPERTIES); + Query taskQuery = queryForTask(task, USER_ACTIVITY_PROPERTIES); Query resultQuery = taskQuery.orderBy(Order.desc("1")); //$NON-NLS-1$ @@ -377,5 +392,4 @@ public class TaskService { return Query.select(AndroidUtilities.addToArray(Property.class, activityProperties)) .where(Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TASK_COMMENT), UserActivity.TARGET_ID.eq(task.getUuid()), UserActivity.DELETED_AT.eq(0))); } - }