First pass at reimplementation of UpdateAdapter

pull/14/head
Sam Bosley 13 years ago
parent cc0fcf95ef
commit 8125d79f71

@ -7,11 +7,13 @@ import android.widget.ListView;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.adapter.UpdateAdapter; import com.todoroo.astrid.adapter.UpdateAdapter;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.User;
import com.todoroo.astrid.data.UserActivity; import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.service.StatisticsConstants; import com.todoroo.astrid.service.StatisticsConstants;
@ -53,7 +55,9 @@ public class TaskCommentsFragment extends CommentsFragment {
@Override @Override
protected Cursor getCursor() { protected Cursor getCursor() {
return userActivityDao.query(Query.select(UserActivity.PROPERTIES).where(UserActivity.TARGET_ID.eq(task.getUuid()))); return userActivityDao.query(Query.select(UserActivity.PROPERTIES)
.where(UserActivity.TARGET_ID.eq(task.getUuid()))
.join(Join.left(User.TABLE, UserActivity.USER_UUID.eq(User.UUID))));
} }
@Override @Override
@ -81,7 +85,7 @@ public class TaskCommentsFragment extends CommentsFragment {
protected UserActivity createUpdate() { protected UserActivity createUpdate() {
UserActivity update = new UserActivity(); UserActivity update = new UserActivity();
update.setValue(UserActivity.MESSAGE, addCommentField.getText().toString()); update.setValue(UserActivity.MESSAGE, addCommentField.getText().toString());
update.setValue(UserActivity.ACTION, UpdateAdapter.UPDATE_TASK_COMMENT); update.setValue(UserActivity.ACTION, UserActivity.ACTION_TASK_COMMENT);
update.setValue(UserActivity.USER_UUID, Task.USER_ID_SELF); update.setValue(UserActivity.USER_UUID, Task.USER_ID_SELF);
update.setValue(UserActivity.TARGET_ID, task.getUuid()); update.setValue(UserActivity.TARGET_ID, task.getUuid());
update.setValue(UserActivity.TARGET_NAME, task.getValue(Task.TITLE)); update.setValue(UserActivity.TARGET_NAME, task.getValue(Task.TITLE));

@ -11,8 +11,6 @@ import org.json.JSONObject;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.billing.BillingConstants; import com.todoroo.astrid.billing.BillingConstants;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.StatisticsConstants; import com.todoroo.astrid.service.StatisticsConstants;
import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.service.StatisticsService;
import com.todoroo.astrid.sync.SyncProviderUtilities; import com.todoroo.astrid.sync.SyncProviderUtilities;
@ -102,22 +100,22 @@ public class ActFmPreferenceService extends SyncProviderUtilities {
StatisticsService.reportEvent(StatisticsConstants.ACTFM_SYNC_ERROR, "type", type); //$NON-NLS-1$ StatisticsService.reportEvent(StatisticsConstants.ACTFM_SYNC_ERROR, "type", type); //$NON-NLS-1$
} }
/** // /**
* Return JSON object user, either yourself or the user of the model // * Return JSON object user, either yourself or the user of the model
* @param update // * @param update
* @return // * @return
*/ // */
public static JSONObject userFromModel(RemoteModel model) { // public static JSONObject userFromModel(RemoteModel model) {
if (Task.USER_ID_SELF.equals(model.getValue(RemoteModel.USER_ID_PROPERTY))) { // if (Task.USER_ID_SELF.equals(model.getValue(RemoteModel.USER_ID_PROPERTY))) {
return thisUser(); // return thisUser();
} else { // } else {
try { // try {
return new JSONObject(model.getValue(RemoteModel.USER_JSON_PROPERTY)); // return new JSONObject(model.getValue(RemoteModel.USER_JSON_PROPERTY));
} catch (JSONException e) { // } catch (JSONException e) {
return new JSONObject(); // return new JSONObject();
} // }
} // }
} // }
public synchronized static JSONObject thisUser() { public synchronized static JSONObject thisUser() {
if(user == null) { if(user == null) {

@ -12,8 +12,6 @@ import java.util.Date;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.json.JSONObject;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteException;
@ -45,8 +43,10 @@ import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.ActFmCameraModule; import com.todoroo.astrid.actfm.ActFmCameraModule;
@ -62,6 +62,7 @@ import com.todoroo.astrid.dao.UserActivityDao;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.User;
import com.todoroo.astrid.data.UserActivity; import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.helper.AsyncImageView; import com.todoroo.astrid.helper.AsyncImageView;
import com.todoroo.astrid.helper.ImageDiskCache; import com.todoroo.astrid.helper.ImageDiskCache;
@ -283,14 +284,20 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
} }
TodorooCursor<UserActivity> updates = userActivityDao.query(Query.select(UserActivity.PROPERTIES) TodorooCursor<UserActivity> updates = userActivityDao.query(Query.select(AndroidUtilities.addToArray(UserActivity.PROPERTIES, User.PROPERTIES))
.where(UserActivity.TARGET_ID.eq(task.getUuid())) .where(UserActivity.TARGET_ID.eq(task.getUuid()))
.join(Join.left(User.TABLE, UserActivity.USER_UUID.eq(User.UUID)))
.orderBy(Order.desc(UserActivity.CREATED_AT))); .orderBy(Order.desc(UserActivity.CREATED_AT)));
try { try {
UserActivity update = new UserActivity(); UserActivity update = new UserActivity();
User user = new User();
for(updates.moveToFirst(); !updates.isAfterLast(); updates.moveToNext()) { for(updates.moveToFirst(); !updates.isAfterLast(); updates.moveToNext()) {
update.clear();
user.clear();
update.readFromCursor(updates); update.readFromCursor(updates);
NoteOrUpdate noa = NoteOrUpdate.fromUpdate(update, linkColor); user.readPropertiesFromCursor(updates);
NoteOrUpdate noa = NoteOrUpdate.fromUpdate(update, user, linkColor);
if(noa != null) if(noa != null)
items.add(noa); items.add(noa);
} }
@ -380,7 +387,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
// picture // picture
final AsyncImageView commentPictureView = (AsyncImageView)view.findViewById(R.id.comment_picture); { final AsyncImageView commentPictureView = (AsyncImageView)view.findViewById(R.id.comment_picture); {
// UpdateAdapter.setupImagePopupForCommentView(view, commentPictureView, item.commentPicture, item.title.toString(), fragment, imageCache); UpdateAdapter.setupImagePopupForCommentView(view, commentPictureView, item.commentPicture, item.title.toString(), fragment, imageCache);
} }
} }
@ -421,7 +428,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
} }
private void addComment() { private void addComment() {
addComment(commentField.getText().toString(), UpdateAdapter.UPDATE_TASK_COMMENT, true); addComment(commentField.getText().toString(), UserActivity.ACTION_TASK_COMMENT, true);
} }
@ -512,13 +519,13 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
} }
@SuppressWarnings("nls") @SuppressWarnings("nls")
public static NoteOrUpdate fromUpdate(UserActivity u, String linkColor) { public static NoteOrUpdate fromUpdate(UserActivity u, User user, String linkColor) {
JSONObject user = ActFmPreferenceService.userFromModel(u); // JSONObject user = ActFmPreferenceService.userFromModel(u);
String commentPicture = u.getPictureUrl(UserActivity.PICTURE, RemoteModel.PICTURE_MEDIUM); String commentPicture = u.getPictureUrl(UserActivity.PICTURE, RemoteModel.PICTURE_MEDIUM);
Spanned title = null; //UpdateAdapter.getUpdateComment(null, u, user, linkColor, UpdateAdapter.FROM_TASK_VIEW); Spanned title = UpdateAdapter.getUpdateComment(null, u, user, linkColor, UpdateAdapter.FROM_TASK_VIEW);
return new NoteOrUpdate(user.optString("picture"), return new NoteOrUpdate(user.getPictureUrl(User.PICTURE, RemoteModel.PICTURE_THUMB),
title, title,
commentPicture, commentPicture,
u.getValue(UserActivity.CREATED_AT)); u.getValue(UserActivity.CREATED_AT));
@ -540,7 +547,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
addComment(String.format("%s %s", //$NON-NLS-1$ addComment(String.format("%s %s", //$NON-NLS-1$
getContext().getString(R.string.TEA_timer_comment_started), getContext().getString(R.string.TEA_timer_comment_started),
DateUtilities.getTimeString(getContext(), new Date())), DateUtilities.getTimeString(getContext(), new Date())),
UpdateAdapter.UPDATE_TASK_COMMENT, UserActivity.ACTION_TASK_COMMENT,
false); false);
} }
@ -551,7 +558,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
getContext().getString(R.string.TEA_timer_comment_stopped), getContext().getString(R.string.TEA_timer_comment_stopped),
DateUtilities.getTimeString(getContext(), new Date()), DateUtilities.getTimeString(getContext(), new Date()),
getContext().getString(R.string.TEA_timer_comment_spent), getContext().getString(R.string.TEA_timer_comment_spent),
elapsedTime), UpdateAdapter.UPDATE_TASK_COMMENT, false); elapsedTime), UserActivity.ACTION_TASK_COMMENT, false);
} }
/* /*

@ -11,25 +11,23 @@
<!-- NOTE TO TRANSLATORS: things beginning with $link_ are special tokens we use for string formatting. <!-- NOTE TO TRANSLATORS: things beginning with $link_ are special tokens we use for string formatting.
Please do not translate this part of the string. --> Please do not translate this part of the string. -->
<string name="update_string_friends">%1$s is now friends with %2$s</string> <!-- These are still in use -->
<string name="update_string_default_comment">%1$s commented: %3$s</string>
<string name="update_string_task_comment">%1$s on $link_task: %3$s</string>
<string name="update_string_tag_comment">%1$s on %2$s: %3$s</string>
<!-- <string name="update_string_friends">%1$s is now friends with %2$s</string>
<string name="update_string_request_friendship">%1$s wants to be friends with you</string> <string name="update_string_request_friendship">%1$s wants to be friends with you</string>
<!-- slide 22e -->
<string name="update_string_confirmed_friendship">%1$s has confirmed your friendship request</string> <string name="update_string_confirmed_friendship">%1$s has confirmed your friendship request</string>
<string name="update_string_task_created">%1$s created this task</string> <string name="update_string_task_created">%1$s created this task</string>
<string name="update_string_task_created_global">%1$s created $link_task</string> <string name="update_string_task_created_global">%1$s created $link_task</string>
<!-- slide 24 b and c -->
<string name="update_string_task_created_on_list">%1$s added $link_task to this list</string> <string name="update_string_task_created_on_list">%1$s added $link_task to this list</string>
<!-- slide 22c -->
<string name="update_string_task_completed">%1$s completed $link_task. Huzzah!</string> <string name="update_string_task_completed">%1$s completed $link_task. Huzzah!</string>
<string name="update_string_task_uncompleted">%1$s un-completed $link_task.</string> <string name="update_string_task_uncompleted">%1$s un-completed $link_task.</string>
<string name="update_string_task_tagged">%1$s added $link_task to %4$s</string> <string name="update_string_task_tagged">%1$s added $link_task to %4$s</string>
<string name="update_string_task_tagged_list">%1$s added $link_task to this list</string> <string name="update_string_task_tagged_list">%1$s added $link_task to this list</string>
<!-- slide 22d -->
<string name="update_string_task_assigned">%1$s assigned $link_task to %4$s</string> <string name="update_string_task_assigned">%1$s assigned $link_task to %4$s</string>
<!-- slide 24d -->
<string name="update_string_default_comment">%1$s commented: %3$s</string>
<string name="update_string_task_comment">%1$s Re: $link_task: %3$s</string>
<string name="update_string_tag_comment">%1$s Re: %2$s: %3$s</string>
<string name="update_string_tag_created">%1$s created this list</string> <string name="update_string_tag_created">%1$s created this list</string>
<string name="update_string_tag_created_global">%1$s created the list %2$s</string> <string name="update_string_tag_created_global">%1$s created the list %2$s</string> -->
</resources> </resources>

@ -248,6 +248,12 @@ public class AstridActivity extends FragmentActivity
onTaskListItemClicked(taskId, task.isEditable()); onTaskListItemClicked(taskId, task.isEditable());
} }
public void onTaskListItemClicked(String uuid) {
Task task = taskDao.fetch(uuid, Task.ID, Task.IS_READONLY, Task.IS_PUBLIC, Task.USER_ID);
if (task != null)
onTaskListItemClicked(task.getId(), task.isEditable());
}
@Override @Override
public void onTaskListItemClicked(long taskId, boolean editable) { public void onTaskListItemClicked(long taskId, boolean editable) {
if (editable) { if (editable) {

@ -5,21 +5,42 @@
*/ */
package com.todoroo.astrid.adapter; package com.todoroo.astrid.adapter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor; import android.database.Cursor;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.text.Html;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.CursorAdapter; import android.widget.CursorAdapter;
import android.widget.TextView;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.User;
import com.todoroo.astrid.data.UserActivity; import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.helper.AsyncImageView;
import com.todoroo.astrid.helper.ImageDiskCache; import com.todoroo.astrid.helper.ImageDiskCache;
/** /**
@ -43,17 +64,6 @@ public class UpdateAdapter extends CursorAdapter {
private static final Pattern TARGET_LINK_PATTERN = Pattern.compile("\\" + TARGET_LINK_PREFIX + "(\\w*)"); //$NON-NLS-1$//$NON-NLS-2$ private static final Pattern TARGET_LINK_PATTERN = Pattern.compile("\\" + TARGET_LINK_PREFIX + "(\\w*)"); //$NON-NLS-1$//$NON-NLS-2$
private static final String TASK_LINK_TYPE = "task"; //$NON-NLS-1$ private static final String TASK_LINK_TYPE = "task"; //$NON-NLS-1$
private static final String UPDATE_FRIENDS = "friends"; //$NON-NLS-1$
private static final String UPDATE_REQUEST_FRIENDSHIP = "request_friendship"; //$NON-NLS-1$
private static final String UPDATE_CONFIRMED_FRIENDSHIP = "confirmed_friendship"; //$NON-NLS-1$
private static final String UPDATE_TASK_CREATED = "task_created"; //$NON-NLS-1$
private static final String UPDATE_TASK_COMPLETED = "task_completed"; //$NON-NLS-1$
private static final String UPDATE_TASK_UNCOMPLETED = "task_uncompleted"; //$NON-NLS-1$
private static final String UPDATE_TASK_TAGGED = "task_tagged"; //$NON-NLS-1$
private static final String UPDATE_TASK_ASSIGNED = "task_assigned"; //$NON-NLS-1$
public static final String UPDATE_TASK_COMMENT = "task_comment"; //$NON-NLS-1$
private static final String UPDATE_TAG_COMMENT = "tag_comment"; //$NON-NLS-1$
private static final String UPDATE_TAG_CREATED = "tag_created"; //$NON-NLS-1$
public static final String FROM_TAG_VIEW = "from_tag"; //$NON-NLS-1$ public static final String FROM_TAG_VIEW = "from_tag"; //$NON-NLS-1$
public static final String FROM_TASK_VIEW = "from_task"; //$NON-NLS-1$ public static final String FROM_TASK_VIEW = "from_task"; //$NON-NLS-1$
public static final String FROM_RECENT_ACTIVITY_VIEW = "from_recent_activity"; //$NON-NLS-1$ public static final String FROM_RECENT_ACTIVITY_VIEW = "from_recent_activity"; //$NON-NLS-1$
@ -98,12 +108,17 @@ public class UpdateAdapter extends CursorAdapter {
* =========================================================== view setup * =========================================================== view setup
* ====================================================================== */ * ====================================================================== */
private class ModelHolder {
public UserActivity activity = new UserActivity();
public User user = new User();
}
/** Creates a new view for use in the list view */ /** Creates a new view for use in the list view */
@Override @Override
public View newView(Context context, Cursor cursor, ViewGroup parent) { public View newView(Context context, Cursor cursor, ViewGroup parent) {
ViewGroup view = (ViewGroup)inflater.inflate(resource, parent, false); ViewGroup view = (ViewGroup)inflater.inflate(resource, parent, false);
view.setTag(new UserActivity()); view.setTag(new ModelHolder());
// populate view content // populate view content
bindView(view, context, cursor); bindView(view, context, cursor);
@ -115,43 +130,48 @@ public class UpdateAdapter extends CursorAdapter {
@Override @Override
public void bindView(View view, Context context, Cursor c) { public void bindView(View view, Context context, Cursor c) {
TodorooCursor<UserActivity> cursor = (TodorooCursor<UserActivity>)c; TodorooCursor<UserActivity> cursor = (TodorooCursor<UserActivity>)c;
UserActivity update = ((UserActivity) view.getTag()); ModelHolder mh = ((ModelHolder) view.getTag());
UserActivity update = mh.activity;
update.clear(); update.clear();
update.readFromCursor(cursor); update.readFromCursor(cursor);
setFieldContentsAndVisibility(view, update); User user = mh.user;
user.clear();
user.readPropertiesFromCursor(cursor);
setFieldContentsAndVisibility(view, update, user);
} }
/** Helper method to set the contents and visibility of each field */ /** Helper method to set the contents and visibility of each field */
public synchronized void setFieldContentsAndVisibility(View view, UserActivity update) { public synchronized void setFieldContentsAndVisibility(View view, UserActivity activity, User user) {
// JSONObject user = ActFmPreferenceService.userFromModel(update); // picture
// final AsyncImageView pictureView = (AsyncImageView)view.findViewById(R.id.picture); {
// // picture
// final AsyncImageView pictureView = (AsyncImageView)view.findViewById(R.id.picture); { String pictureUrl = user.getPictureUrl(User.PICTURE, RemoteModel.PICTURE_THUMB);
// String pictureUrl = user.optString("picture"); pictureView.setUrl(pictureUrl);
// pictureView.setUrl(pictureUrl); }
// }
// final AsyncImageView commentPictureView = (AsyncImageView)view.findViewById(R.id.comment_picture); {
// final AsyncImageView commentPictureView = (AsyncImageView)view.findViewById(R.id.comment_picture); { final String updatePicture = activity.getPictureUrl(UserActivity.PICTURE, RemoteModel.PICTURE_THUMB);
// final String updatePicture = update.getPictureUrl(UserActivity.PICTURE, RemoteModel.PICTURE_THUMB); setupImagePopupForCommentView(view, commentPictureView, updatePicture,
// setupImagePopupForCommentView(view, commentPictureView, updatePicture, activity.getValue(UserActivity.MESSAGE), fragment, imageCache);
// update.getValue(UserActivity.MESSAGE), fragment, imageCache); }
// }
// // name
// // name final TextView nameView = (TextView)view.findViewById(R.id.title); {
// final TextView nameView = (TextView)view.findViewById(R.id.title); { nameView.setText(getUpdateComment((AstridActivity)fragment.getActivity(), activity, user, linkColor, fromView));
// nameView.setText(getUpdateComment((AstridActivity)fragment.getActivity(), update, user, linkColor, fromView)); nameView.setMovementMethod(new LinkMovementMethod());
// nameView.setMovementMethod(new LinkMovementMethod()); }
// }
//
// // date
// // date final TextView date = (TextView)view.findViewById(R.id.date); {
// final TextView date = (TextView)view.findViewById(R.id.date); { CharSequence dateString = DateUtils.getRelativeTimeSpanString(activity.getValue(UserActivity.CREATED_AT),
// CharSequence dateString = DateUtils.getRelativeTimeSpanString(update.getValue(UserActivity.CREATED_AT), DateUtilities.now(), DateUtils.MINUTE_IN_MILLIS,
// DateUtilities.now(), DateUtils.MINUTE_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE);
// DateUtils.FORMAT_ABBREV_RELATIVE); date.setText(dateString);
// date.setText(dateString); }
// }
} }
@ -160,207 +180,136 @@ public class UpdateAdapter extends CursorAdapter {
return false; return false;
} }
// public static void setupImagePopupForCommentView(View view, AsyncImageView commentPictureView, final String updatePicture, public static void setupImagePopupForCommentView(View view, AsyncImageView commentPictureView, final String updatePicture,
// final String message, final Fragment fragment, ImageDiskCache imageCache) { final String message, final Fragment fragment, ImageDiskCache imageCache) {
// if (!TextUtils.isEmpty(updatePicture) && !"null".equals(updatePicture)) { //$NON-NLS-1$ if (!TextUtils.isEmpty(updatePicture) && !"null".equals(updatePicture)) { //$NON-NLS-1$
// commentPictureView.setVisibility(View.VISIBLE); commentPictureView.setVisibility(View.VISIBLE);
// commentPictureView.setUrl(updatePicture); commentPictureView.setUrl(updatePicture);
//
// if(imageCache.contains(updatePicture)) { if(imageCache.contains(updatePicture)) {
// try { try {
// commentPictureView.setDefaultImageBitmap(imageCache.get(updatePicture)); commentPictureView.setDefaultImageBitmap(imageCache.get(updatePicture));
// } catch (IOException e) { } catch (IOException e) {
// e.printStackTrace(); e.printStackTrace();
// } }
// } }
// else { else {
// commentPictureView.setUrl(updatePicture); commentPictureView.setUrl(updatePicture);
// } }
//
// view.setOnClickListener(new OnClickListener() { view.setOnClickListener(new OnClickListener() {
// @Override @Override
// public void onClick(View v) { public void onClick(View v) {
// AlertDialog image = new AlertDialog.Builder(fragment.getActivity()).create(); AlertDialog image = new AlertDialog.Builder(fragment.getActivity()).create();
// AsyncImageView imageView = new AsyncImageView(fragment.getActivity()); AsyncImageView imageView = new AsyncImageView(fragment.getActivity());
// imageView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); imageView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
// imageView.setDefaultImageResource(android.R.drawable.ic_menu_gallery); imageView.setDefaultImageResource(android.R.drawable.ic_menu_gallery);
// imageView.setUrl(updatePicture); imageView.setUrl(updatePicture);
// image.setView(imageView); image.setView(imageView);
//
// image.setMessage(message); image.setMessage(message);
// image.setButton(fragment.getString(R.string.DLG_close), new DialogInterface.OnClickListener() { image.setButton(fragment.getString(R.string.DLG_close), new DialogInterface.OnClickListener() {
// @Override @Override
// public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
// return; return;
// } }
// }); });
// image.show(); image.show();
// } }
// }); });
// } else { } else {
// commentPictureView.setVisibility(View.GONE); commentPictureView.setVisibility(View.GONE);
// } }
// } }
//
// public static String linkify (String string, String linkColor) { public static String linkify (String string, String linkColor) {
// return String.format("<font color=%s>%s</font>", linkColor, string); //$NON-NLS-1$ return String.format("<font color=%s>%s</font>", linkColor, string); //$NON-NLS-1$
// } }
//
// @SuppressWarnings("nls") public static Spanned getUpdateComment(final AstridActivity context, UserActivity activity, User user, String linkColor, String fromView) {
// public static Spanned getUpdateComment (final AstridActivity activity, UserActivity update, JSONObject user, String linkColor, String fromView) { String userDisplay = user.getDisplayName();
// if (user == null) if (TextUtils.isEmpty(userDisplay))
// user = ActFmPreferenceService.userFromModel(update); userDisplay = context.getString(R.string.ENA_no_user);
// String targetName = activity.getValue(UserActivity.TARGET_NAME);
// JSONObject otherUser = null; String action = activity.getValue(UserActivity.ACTION);
// try { String message = activity.getValue(UserActivity.MESSAGE);
// otherUser = new JSONObject(update.getValue(UserActivity.OTHER_USER));
// } catch (JSONException e) { int commentResource = 0;
// otherUser = new JSONObject(); if (UserActivity.ACTION_TASK_COMMENT.equals(action)) {
// } if (fromView.equals(FROM_TASK_VIEW) || TextUtils.isEmpty(targetName))
// commentResource = R.string.update_string_default_comment;
// return getUpdateComment(activity, update, update.getValue(UserActivity.ACTION), else
// user.optString("name"), update.getValue(UserActivity.TARGET_NAME), commentResource = R.string.update_string_task_comment;
// update.getValue(UserActivity.MESSAGE), otherUser.optString("name"), } else if (UserActivity.ACTION_TAG_COMMENT.equals(action)) {
// linkColor, fromView); if (fromView.equals(FROM_TAG_VIEW) || TextUtils.isEmpty(targetName))
// } commentResource = R.string.update_string_default_comment;
// else
// public static Spanned getUpdateComment (final AstridActivity activity, UserActivity update, String actionCode, String user, String targetName, commentResource = R.string.update_string_tag_comment;
// String message, String otherUser, String linkColor, String fromView) { }
// if (TextUtils.isEmpty(user)) {
// user = ContextManager.getString(R.string.ENA_no_user); if (commentResource == 0)
// } return Html.fromHtml(String.format("%s %s", userDisplay, message)); //$NON-NLS-1$
//
// String userLink = user; //linkify(user, linkColor); String original = context.getString(commentResource, userDisplay, targetName, message);
// String targetNameLink = targetName; //linkify(targetName, linkColor); int taskLinkIndex = original.indexOf(TARGET_LINK_PREFIX);
// String otherUserLink = otherUser; //linkify(otherUser, linkColor);
// if (taskLinkIndex < 0)
// int commentResource = 0; return Html.fromHtml(original);
// if (actionCode.equals(UPDATE_FRIENDS)) {
// commentResource = R.string.update_string_friends; String[] components = original.split(" "); //$NON-NLS-1$
// } SpannableStringBuilder builder = new SpannableStringBuilder();
// else if (actionCode.equals(UPDATE_REQUEST_FRIENDSHIP)) { StringBuilder htmlStringBuilder = new StringBuilder();
// commentResource = R.string.update_string_request_friendship;
// } for (String comp : components) {
// else if (actionCode.equals(UPDATE_CONFIRMED_FRIENDSHIP)) { Matcher m = TARGET_LINK_PATTERN.matcher(comp);
// commentResource = R.string.update_string_confirmed_friendship; if (m.find()) {
// } builder.append(Html.fromHtml(htmlStringBuilder.toString()));
// else if (actionCode.equals(UPDATE_TASK_CREATED)) { htmlStringBuilder.setLength(0);
// if (fromView.equals(FROM_TAG_VIEW))
// commentResource = R.string.update_string_task_created_on_list; String linkType = m.group(1);
// else if (fromView.equals(FROM_RECENT_ACTIVITY_VIEW)) CharSequence link = getLinkSpan(context, activity, targetName, linkColor, linkType);
// commentResource = R.string.update_string_task_created_global; if (link != null) {
// else builder.append(link);
// commentResource = R.string.update_string_task_created; if (!m.hitEnd()) {
// } builder.append(comp.substring(m.end()));
// else if (actionCode.equals(UPDATE_TASK_COMPLETED)) { }
// commentResource = R.string.update_string_task_completed; builder.append(' ');
// } }
// else if (actionCode.equals(UPDATE_TASK_UNCOMPLETED)) { } else {
// commentResource = R.string.update_string_task_uncompleted; htmlStringBuilder.append(comp);
// } htmlStringBuilder.append(' ');
// else if (actionCode.equals(UPDATE_TASK_TAGGED) && !TextUtils.isEmpty(otherUser)) { }
// if (fromView.equals(FROM_TAG_VIEW)) }
// commentResource = R.string.update_string_task_tagged_list;
// else if (htmlStringBuilder.length() > 0)
// commentResource = R.string.update_string_task_tagged; builder.append(Html.fromHtml(htmlStringBuilder.toString()));
// }
// else if (actionCode.equals(UPDATE_TASK_ASSIGNED) && !TextUtils.isEmpty(otherUser)) { return builder;
// commentResource = R.string.update_string_task_assigned; }
// }
// else if (actionCode.equals(UPDATE_TASK_COMMENT)) { private static CharSequence getLinkSpan(final AstridActivity activity, UserActivity update, String targetName, String linkColor, String linkType) {
// if (fromView.equals(FROM_TASK_VIEW) || TextUtils.isEmpty(targetName)) if (TASK_LINK_TYPE.equals(linkType)) {
// commentResource = R.string.update_string_default_comment; final String taskId = update.getValue(UserActivity.TARGET_ID);
// else if (RemoteModel.isValidUuid(taskId)) {
// commentResource = R.string.update_string_task_comment; SpannableString taskSpan = new SpannableString(targetName);
// } taskSpan.setSpan(new ClickableSpan() {
// else if (actionCode.equals(UPDATE_TAG_COMMENT)) { @Override
// if (fromView.equals(FROM_TAG_VIEW) || TextUtils.isEmpty(targetName)) public void onClick(View widget) {
// commentResource = R.string.update_string_default_comment; if (activity != null) // TODO: This shouldn't happen, but sometimes does
// else activity.onTaskListItemClicked(taskId);
// commentResource = R.string.update_string_tag_comment; }
//
// } @Override
// else if (actionCode.equals(UPDATE_TAG_CREATED)) { public void updateDrawState(TextPaint ds) {
// if (fromView.equals(FROM_RECENT_ACTIVITY_VIEW)) super.updateDrawState(ds);
// commentResource = R.string.update_string_tag_created_global; ds.setUnderlineText(false);
// else }
// commentResource = R.string.update_string_tag_created; }, 0, targetName.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
// } return taskSpan;
// } else {
// if (commentResource == 0) { return Html.fromHtml(linkify(targetName, linkColor));
// return Html.fromHtml(String.format("%s %s", userLink, action)); //$NON-NLS-1$ }
// } }
// return null;
// String original = ContextManager.getString(commentResource, userLink, targetNameLink, message, otherUserLink); }
// int taskLinkIndex = original.indexOf(TARGET_LINK_PREFIX);
//
// if (taskLinkIndex < 0)
// return Html.fromHtml(original);
//
// String[] components = original.split(" "); //$NON-NLS-1$
// SpannableStringBuilder builder = new SpannableStringBuilder();
// StringBuilder htmlStringBuilder = new StringBuilder();
//
// for (String comp : components) {
// Matcher m = TARGET_LINK_PATTERN.matcher(comp);
// if (m.find()) {
// builder.append(Html.fromHtml(htmlStringBuilder.toString()));
// htmlStringBuilder.setLength(0);
//
// String linkType = m.group(1);
// CharSequence link = getLinkSpan(activity, update, actionCode, user,
// targetName, message, otherUser, linkColor, linkType);
// if (link != null) {
// builder.append(link);
// if (!m.hitEnd()) {
// builder.append(comp.substring(m.end()));
// }
// builder.append(' ');
// }
// } else {
// htmlStringBuilder.append(comp);
// htmlStringBuilder.append(' ');
// }
// }
//
// if (htmlStringBuilder.length() > 0)
// builder.append(Html.fromHtml(htmlStringBuilder.toString()));
//
// return builder;
// }
//
// private static CharSequence getLinkSpan(final AstridActivity activity, UserActivity update, String actionCode, String user, String targetName,
// String message, String otherUser, String linkColor, String linkType) {
// if (TASK_LINK_TYPE.equals(linkType)) {
// long taskId = update.getValue(UserActivity.TASK_LOCAL);
// if (taskId <= 0) {
// Task local = PluginServices.getTaskService().fetchByUUID(update.getValue(UserActivity.TASK_UUID), Task.ID);
// if (local != null)
// taskId = local.getId();
// }
//
// final long taskIdToUse = taskId;
//
// if (taskId > 0) {
// SpannableString taskSpan = new SpannableString(targetName);
// taskSpan.setSpan(new ClickableSpan() {
// @Override
// public void onClick(View widget) {
// if (activity != null) // TODO: This shouldn't happen, but sometimes does
// activity.onTaskListItemClicked(taskIdToUse);
// }
//
// @Override
// public void updateDrawState(TextPaint ds) {
// super.updateDrawState(ds);
// ds.setUnderlineText(false);
// }
// }, 0, targetName.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
// return taskSpan;
// } else {
// return Html.fromHtml(linkify(targetName, linkColor));
// }
// }
// return null;
// }
} }

@ -11,8 +11,10 @@ import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Functions;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TagDataDao;
@ -21,6 +23,7 @@ import com.todoroo.astrid.dao.UserActivityDao;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.User;
import com.todoroo.astrid.data.UserActivity; import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.tags.TaskToTagMetadata; import com.todoroo.astrid.tags.TaskToTagMetadata;
@ -144,11 +147,12 @@ public class TagDataService {
} }
private static Query queryForTagData(TagData tagData) { private static Query queryForTagData(TagData tagData) {
return Query.select(UserActivity.PROPERTIES).where(Criterion.or( return Query.select(AndroidUtilities.addToArray(UserActivity.PROPERTIES, User.PROPERTIES)).where(Criterion.or(
Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TAG_COMMENT), UserActivity.TARGET_ID.eq(tagData.getUuid())), Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TAG_COMMENT), UserActivity.TARGET_ID.eq(tagData.getUuid())),
Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TASK_COMMENT), Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TASK_COMMENT),
UserActivity.TARGET_ID.in(Query.select(TaskToTagMetadata.TASK_UUID) 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()))))))); .from(Metadata.TABLE).where(Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY), TaskToTagMetadata.TAG_UUID.eq(tagData.getUuid())))))))
.join(Join.left(User.TABLE, UserActivity.USER_UUID.eq(User.UUID)));
} }
public TodorooCursor<UserActivity> getUpdatesWithExtraCriteria(TagData tagData, Criterion criterion) { public TodorooCursor<UserActivity> getUpdatesWithExtraCriteria(TagData tagData, Criterion criterion) {

Loading…
Cancel
Save