Remove UpdateAdapter

pull/189/head
Alex Baker 12 years ago
parent 680142fdcd
commit d700a61555

@ -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 <tim@todoroo.com>
*
*/
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<UserActivity> cursor = (TodorooCursor<UserActivity>)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<UserActivity> 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);
}
}

@ -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<UserActivity> 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) {

@ -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);
}
}

@ -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<UserActivity> 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)));
}
}

Loading…
Cancel
Save