diff --git a/api/src/com/todoroo/astrid/data/RemoteModel.java b/api/src/com/todoroo/astrid/data/RemoteModel.java index 542d5c2af..2290da095 100644 --- a/api/src/com/todoroo/astrid/data/RemoteModel.java +++ b/api/src/com/todoroo/astrid/data/RemoteModel.java @@ -90,6 +90,11 @@ abstract public class RemoteModel extends AbstractModel { return PictureHelper.getPictureUrl(value, size); } + public Bitmap getPictureBitmap(StringProperty pictureProperty) { + String value = getValue(pictureProperty); + return PictureHelper.getPictureBitmap(value); + } + public static class PictureHelper { public static String getPictureUrl(String value, String size) { @@ -105,6 +110,25 @@ abstract public class RemoteModel extends AbstractModel { } } + @SuppressWarnings("nls") + public static Bitmap getPictureBitmap(String value) { + try { + if (value == null) + return null; + if (value.contains("data")) { + JSONObject pictureJson = new JSONObject(value); + if (pictureJson.has("data")) { + String data = pictureJson.getString("data"); + return AndroidUtilities.decodeBase64Bitmap(data); + } + } + return null; + } catch (JSONException e) { + return null; + } + + } + public static String getPictureUrlFromCursor(TodorooCursor cursor, StringProperty pictureProperty, String size) { String value = cursor.get(pictureProperty); return getPictureUrl(value, size); diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java index c4e5e27bc..a4c3f3dc0 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java @@ -8,6 +8,7 @@ package com.todoroo.astrid.actfm; import android.app.Activity; import android.content.Intent; import android.database.Cursor; +import android.graphics.Bitmap; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; @@ -106,7 +107,14 @@ public class TagCommentsFragment extends CommentsFragment { AsyncImageView imageView = (AsyncImageView) header.findViewById(R.id.tag_picture); imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(getResources(), TagService.getDefaultImageIDForTag(tagName))); - imageView.setUrl(tagData.getPictureUrl(TagData.PICTURE, RemoteModel.PICTURE_MEDIUM)); + String imageUrl = tagData.getPictureUrl(TagData.PICTURE, RemoteModel.PICTURE_MEDIUM); + Bitmap imageBitmap = null; + if (TextUtils.isEmpty(imageUrl)) + imageBitmap = tagData.getPictureBitmap(TagData.PICTURE); + if (imageBitmap != null) + imageView.setImageBitmap(imageBitmap); + else + imageView.setUrl(imageUrl); } @Override diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java index fac28bd37..19bb0e55c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java @@ -5,8 +5,6 @@ */ package com.todoroo.astrid.actfm; -import java.io.IOException; - import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -53,7 +51,6 @@ import com.todoroo.astrid.dao.TagMetadataDao; import com.todoroo.astrid.dao.TagMetadataDao.TagMetadataCriteria; import com.todoroo.astrid.dao.UserDao; import com.todoroo.astrid.data.RemoteModel; -import com.todoroo.astrid.data.SyncFlags; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.TagMetadata; import com.todoroo.astrid.data.User; @@ -407,7 +404,16 @@ public class TagSettingsActivity extends FragmentActivity { setTitle(getString(R.string.tag_settings_title)); } } - picture.setUrl(tagData.getPictureUrl(TagData.PICTURE, RemoteModel.PICTURE_MEDIUM)); + + String imageUrl = tagData.getPictureUrl(TagData.PICTURE, RemoteModel.PICTURE_MEDIUM); + Bitmap imageBitmap = null; + if (TextUtils.isEmpty(imageUrl)) + imageBitmap = tagData.getPictureBitmap(TagData.PICTURE); + + if (imageBitmap != null) + picture.setImageBitmap(imageBitmap); + else + picture.setUrl(imageUrl); if (!isNewTag) { ImageView shortcut = (ImageView) findViewById(R.id.create_shortcut); shortcut.setImageBitmap(FilterListFragment.superImposeListIcon(this, picture.getImageBitmap(), tagData.getValue(TagData.NAME))); @@ -485,26 +491,6 @@ public class TagSettingsActivity extends FragmentActivity { tagMembers.addPerson("", ""); //$NON-NLS-1$ } - private void uploadTagPicture(final Bitmap bitmap) { - new Thread(new Runnable() { - @Override - public void run() { - try { - String url = actFmSyncService.setTagPicture(tagData.getValue(TagData.UUID), bitmap); - if (TextUtils.isEmpty(url)) return; - if (imageCache.contains(tagData.getPictureUrl(TagData.PICTURE, RemoteModel.PICTURE_MEDIUM))) { - imageCache.move(tagData.getValue(TagData.PICTURE), url); - } - tagData.setValue(TagData.PICTURE, url); - tagData.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); - tagDataService.save(tagData); - } catch (IOException e) { - DialogUtilities.okDialog(TagSettingsActivity.this, e.toString(), null); - } - } - }).start(); - } - @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); @@ -521,8 +507,6 @@ public class TagSettingsActivity extends FragmentActivity { public void handleCameraResult(Bitmap bitmap) { picture.setImageBitmap(bitmap); setBitmap = bitmap; - if(!RemoteModel.NO_UUID.equals(tagData.getValue(TagData.UUID))) - uploadTagPicture(bitmap); saveTagPictureLocally(bitmap); } }; diff --git a/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java b/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java index df6d71d37..e0d01e3be 100644 --- a/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java @@ -391,7 +391,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene // 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.commentBitmap, item.title.toString(), fragment, imageCache); } } @@ -466,14 +466,15 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene private final String picture; private final Spanned title; private final String commentPicture; + private final Bitmap commentBitmap; private final long createdAt; - public NoteOrUpdate(String picture, Spanned title, String commentPicture, - long createdAt) { + public NoteOrUpdate(String picture, Spanned title, String commentPicture, Bitmap commentBitmap, long createdAt) { super(); this.picture = picture; this.title = title; this.commentPicture = commentPicture; + this.commentBitmap = commentBitmap; this.createdAt = createdAt; } @@ -486,16 +487,20 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene return new NoteOrUpdate(m.getValue(NoteMetadata.THUMBNAIL), title, m.getValue(NoteMetadata.COMMENT_PICTURE), + null, 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); return new NoteOrUpdate(user.getPictureUrl(User.PICTURE, RemoteModel.PICTURE_THUMB), title, commentPicture, + commentBitmap, u.getValue(UserActivity.CREATED_AT)); } diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java index 7650b3cdb..c35340cea 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java @@ -4,6 +4,7 @@ import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.content.res.Resources; +import android.graphics.Bitmap; import android.support.v4.view.Menu; import android.support.v4.view.MenuItem; import android.text.TextUtils; @@ -92,10 +93,16 @@ public class FeaturedTaskListFragment extends TagViewFragment { // Repurposed this method to set up the description view AsyncImageView imageView = (AsyncImageView) getView().findViewById(R.id.url_image); String imageUrl = tagData.getPictureUrl(TagData.PICTURE, RemoteModel.PICTURE_MEDIUM); - if (!TextUtils.isEmpty(imageUrl)) { + Bitmap bitmap = null; + if (TextUtils.isEmpty(imageUrl)) + bitmap = tagData.getPictureBitmap(TagData.PICTURE); + if (!TextUtils.isEmpty(imageUrl) || bitmap != null) { imageView.setVisibility(View.VISIBLE); imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.default_list_0)); - imageView.setUrl(imageUrl); + if (bitmap != null) + imageView.setImageBitmap(bitmap); + else + imageView.setUrl(imageUrl); } else { imageView.setVisibility(View.GONE); } diff --git a/astrid/src/com/todoroo/astrid/adapter/UpdateAdapter.java b/astrid/src/com/todoroo/astrid/adapter/UpdateAdapter.java index 7fdb6e16f..7c3743e47 100644 --- a/astrid/src/com/todoroo/astrid/adapter/UpdateAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/UpdateAdapter.java @@ -13,6 +13,7 @@ import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.database.Cursor; +import android.graphics.Bitmap; import android.support.v4.app.Fragment; import android.text.Html; import android.text.SpannableString; @@ -153,8 +154,11 @@ public class UpdateAdapter extends CursorAdapter { } final AsyncImageView commentPictureView = (AsyncImageView)view.findViewById(R.id.comment_picture); { - final String updatePicture = activity.getPictureUrl(UserActivity.PICTURE, RemoteModel.PICTURE_THUMB); - setupImagePopupForCommentView(view, commentPictureView, updatePicture, + String updatePicture = activity.getPictureUrl(UserActivity.PICTURE, RemoteModel.PICTURE_THUMB); + Bitmap updateBitmap = null; + if (TextUtils.isEmpty(updatePicture)) + updateBitmap = activity.getPictureBitmap(UserActivity.PICTURE); + setupImagePopupForCommentView(view, commentPictureView, updatePicture, updateBitmap, activity.getValue(UserActivity.MESSAGE), fragment, imageCache); } @@ -180,11 +184,14 @@ public class UpdateAdapter extends CursorAdapter { 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 Bitmap updateBitmap, 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)) || updateBitmap != null) { //$NON-NLS-1$ commentPictureView.setVisibility(View.VISIBLE); - commentPictureView.setUrl(updatePicture); + if (updateBitmap != null) + commentPictureView.setImageBitmap(updateBitmap); + else + commentPictureView.setUrl(updatePicture); if(imageCache.contains(updatePicture)) { try { @@ -204,7 +211,10 @@ public class UpdateAdapter extends CursorAdapter { AsyncImageView imageView = new AsyncImageView(fragment.getActivity()); imageView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); imageView.setDefaultImageResource(android.R.drawable.ic_menu_gallery); - imageView.setUrl(updatePicture); + if (updateBitmap != null) + imageView.setImageBitmap(updateBitmap); + else + imageView.setUrl(updatePicture); image.setView(imageView); image.setMessage(message);