Try and decode bitmap from JSON when url not present for tag images and comment images

pull/14/head
Sam Bosley 13 years ago
parent 16a411bdfa
commit 0cefd012cc

@ -90,6 +90,11 @@ abstract public class RemoteModel extends AbstractModel {
return PictureHelper.getPictureUrl(value, size); return PictureHelper.getPictureUrl(value, size);
} }
public Bitmap getPictureBitmap(StringProperty pictureProperty) {
String value = getValue(pictureProperty);
return PictureHelper.getPictureBitmap(value);
}
public static class PictureHelper { public static class PictureHelper {
public static String getPictureUrl(String value, String size) { 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) { public static String getPictureUrlFromCursor(TodorooCursor<?> cursor, StringProperty pictureProperty, String size) {
String value = cursor.get(pictureProperty); String value = cursor.get(pictureProperty);
return getPictureUrl(value, size); return getPictureUrl(value, size);

@ -8,6 +8,7 @@ package com.todoroo.astrid.actfm;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.graphics.Bitmap;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -106,7 +107,14 @@ public class TagCommentsFragment extends CommentsFragment {
AsyncImageView imageView = (AsyncImageView) header.findViewById(R.id.tag_picture); AsyncImageView imageView = (AsyncImageView) header.findViewById(R.id.tag_picture);
imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(getResources(), TagService.getDefaultImageIDForTag(tagName))); 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 @Override

@ -5,8 +5,6 @@
*/ */
package com.todoroo.astrid.actfm; package com.todoroo.astrid.actfm;
import java.io.IOException;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; 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.TagMetadataDao.TagMetadataCriteria;
import com.todoroo.astrid.dao.UserDao; import com.todoroo.astrid.dao.UserDao;
import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.TagMetadata; import com.todoroo.astrid.data.TagMetadata;
import com.todoroo.astrid.data.User; import com.todoroo.astrid.data.User;
@ -407,7 +404,16 @@ public class TagSettingsActivity extends FragmentActivity {
setTitle(getString(R.string.tag_settings_title)); 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) { if (!isNewTag) {
ImageView shortcut = (ImageView) findViewById(R.id.create_shortcut); ImageView shortcut = (ImageView) findViewById(R.id.create_shortcut);
shortcut.setImageBitmap(FilterListFragment.superImposeListIcon(this, picture.getImageBitmap(), tagData.getValue(TagData.NAME))); 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$ 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 @Override
protected void onSaveInstanceState(Bundle outState) { protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
@ -521,8 +507,6 @@ public class TagSettingsActivity extends FragmentActivity {
public void handleCameraResult(Bitmap bitmap) { public void handleCameraResult(Bitmap bitmap) {
picture.setImageBitmap(bitmap); picture.setImageBitmap(bitmap);
setBitmap = bitmap; setBitmap = bitmap;
if(!RemoteModel.NO_UUID.equals(tagData.getValue(TagData.UUID)))
uploadTagPicture(bitmap);
saveTagPictureLocally(bitmap); saveTagPictureLocally(bitmap);
} }
}; };

@ -391,7 +391,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.commentBitmap, item.title.toString(), fragment, imageCache);
} }
} }
@ -466,14 +466,15 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
private final String picture; private final String picture;
private final Spanned title; private final Spanned title;
private final String commentPicture; private final String commentPicture;
private final Bitmap commentBitmap;
private final long createdAt; private final long createdAt;
public NoteOrUpdate(String picture, Spanned title, String commentPicture, public NoteOrUpdate(String picture, Spanned title, String commentPicture, Bitmap commentBitmap, long createdAt) {
long createdAt) {
super(); super();
this.picture = picture; this.picture = picture;
this.title = title; this.title = title;
this.commentPicture = commentPicture; this.commentPicture = commentPicture;
this.commentBitmap = commentBitmap;
this.createdAt = createdAt; this.createdAt = createdAt;
} }
@ -486,16 +487,20 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
return new NoteOrUpdate(m.getValue(NoteMetadata.THUMBNAIL), return new NoteOrUpdate(m.getValue(NoteMetadata.THUMBNAIL),
title, title,
m.getValue(NoteMetadata.COMMENT_PICTURE), m.getValue(NoteMetadata.COMMENT_PICTURE),
null,
m.getValue(Metadata.CREATION_DATE)); m.getValue(Metadata.CREATION_DATE));
} }
public static NoteOrUpdate fromUpdate(AstridActivity context, UserActivity u, User user, String linkColor) { public static NoteOrUpdate fromUpdate(AstridActivity context, UserActivity u, User user, String linkColor) {
String commentPicture = u.getPictureUrl(UserActivity.PICTURE, RemoteModel.PICTURE_MEDIUM); 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); Spanned title = UpdateAdapter.getUpdateComment(context, u, user, linkColor, UpdateAdapter.FROM_TASK_VIEW);
return new NoteOrUpdate(user.getPictureUrl(User.PICTURE, RemoteModel.PICTURE_THUMB), return new NoteOrUpdate(user.getPictureUrl(User.PICTURE, RemoteModel.PICTURE_THUMB),
title, title,
commentPicture, commentPicture,
commentBitmap,
u.getValue(UserActivity.CREATED_AT)); u.getValue(UserActivity.CREATED_AT));
} }

@ -4,6 +4,7 @@ import android.app.Activity;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap;
import android.support.v4.view.Menu; import android.support.v4.view.Menu;
import android.support.v4.view.MenuItem; import android.support.v4.view.MenuItem;
import android.text.TextUtils; import android.text.TextUtils;
@ -92,10 +93,16 @@ public class FeaturedTaskListFragment extends TagViewFragment {
// Repurposed this method to set up the description view // Repurposed this method to set up the description view
AsyncImageView imageView = (AsyncImageView) getView().findViewById(R.id.url_image); AsyncImageView imageView = (AsyncImageView) getView().findViewById(R.id.url_image);
String imageUrl = tagData.getPictureUrl(TagData.PICTURE, RemoteModel.PICTURE_MEDIUM); 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.setVisibility(View.VISIBLE);
imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.default_list_0)); imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.default_list_0));
imageView.setUrl(imageUrl); if (bitmap != null)
imageView.setImageBitmap(bitmap);
else
imageView.setUrl(imageUrl);
} else { } else {
imageView.setVisibility(View.GONE); imageView.setVisibility(View.GONE);
} }

@ -13,6 +13,7 @@ import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.database.Cursor; import android.database.Cursor;
import android.graphics.Bitmap;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.text.Html; import android.text.Html;
import android.text.SpannableString; import android.text.SpannableString;
@ -153,8 +154,11 @@ public class UpdateAdapter extends CursorAdapter {
} }
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); String updatePicture = activity.getPictureUrl(UserActivity.PICTURE, RemoteModel.PICTURE_THUMB);
setupImagePopupForCommentView(view, commentPictureView, updatePicture, Bitmap updateBitmap = null;
if (TextUtils.isEmpty(updatePicture))
updateBitmap = activity.getPictureBitmap(UserActivity.PICTURE);
setupImagePopupForCommentView(view, commentPictureView, updatePicture, updateBitmap,
activity.getValue(UserActivity.MESSAGE), fragment, imageCache); activity.getValue(UserActivity.MESSAGE), fragment, imageCache);
} }
@ -180,11 +184,14 @@ 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 Bitmap updateBitmap,
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)) || updateBitmap != null) { //$NON-NLS-1$
commentPictureView.setVisibility(View.VISIBLE); commentPictureView.setVisibility(View.VISIBLE);
commentPictureView.setUrl(updatePicture); if (updateBitmap != null)
commentPictureView.setImageBitmap(updateBitmap);
else
commentPictureView.setUrl(updatePicture);
if(imageCache.contains(updatePicture)) { if(imageCache.contains(updatePicture)) {
try { try {
@ -204,7 +211,10 @@ public class UpdateAdapter extends CursorAdapter {
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); if (updateBitmap != null)
imageView.setImageBitmap(updateBitmap);
else
imageView.setUrl(updatePicture);
image.setView(imageView); image.setView(imageView);
image.setMessage(message); image.setMessage(message);

Loading…
Cancel
Save