From 8786feddfa2853ecab397ba7070ee75addc369b4 Mon Sep 17 00:00:00 2001 From: Tony Rankin Date: Mon, 27 Apr 2015 23:11:30 -0700 Subject: [PATCH 1/2] Returning to the post editor won't crash if Activity was destroyed. Still an issue of re-loading existing media into the post upon return from the picker. --- .../android/util/helpers/WPImageSpan.java | 92 ++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/WordPressUtils/src/main/java/org/wordpress/android/util/helpers/WPImageSpan.java b/WordPressUtils/src/main/java/org/wordpress/android/util/helpers/WPImageSpan.java index bd974b96f2d1..17b13971ca03 100644 --- a/WordPressUtils/src/main/java/org/wordpress/android/util/helpers/WPImageSpan.java +++ b/WordPressUtils/src/main/java/org/wordpress/android/util/helpers/WPImageSpan.java @@ -5,12 +5,19 @@ import android.content.Context; import android.graphics.Bitmap; import android.net.Uri; +import android.os.Parcel; +import android.os.Parcelable; import android.text.style.ImageSpan; -public class WPImageSpan extends ImageSpan { +public class WPImageSpan extends ImageSpan implements Parcelable { protected Uri mImageSource = null; protected boolean mNetworkImageLoaded = false; protected MediaFile mMediaFile; + protected int mStartPosition, mEndPosition; + + protected WPImageSpan() { + super((Bitmap) null); + } public WPImageSpan(Context context, Bitmap b, Uri src) { super(context, b); @@ -24,6 +31,19 @@ public WPImageSpan(Context context, int resId, Uri src) { mMediaFile = new MediaFile(); } + public void setPosition(int start, int end) { + mStartPosition = start; + mEndPosition = end; + } + + public int getStartPosition() { + return mStartPosition >= 0 ? mStartPosition : 0; + } + + public int getEndPosition() { + return mEndPosition < mStartPosition ? mStartPosition : mEndPosition; + } + public MediaFile getMediaFile() { return mMediaFile; } @@ -47,4 +67,74 @@ public boolean isNetworkImageLoaded() { public void setNetworkImageLoaded(boolean networkImageLoaded) { this.mNetworkImageLoaded = networkImageLoaded; } + + protected void setupFromParcel(Parcel in) { + MediaFile mediaFile = new MediaFile(); + + boolean[] booleans = new boolean[2]; + in.readBooleanArray(booleans); + setNetworkImageLoaded(booleans[0]); + mediaFile.setVideo(booleans[1]); + + setImageSource(Uri.parse(in.readString())); + mediaFile.setMediaId(in.readString()); + mediaFile.setBlogId(in.readString()); + mediaFile.setPostID(in.readLong()); + mediaFile.setCaption(in.readString()); + mediaFile.setDescription(in.readString()); + mediaFile.setTitle(in.readString()); + mediaFile.setMimeType(in.readString()); + mediaFile.setFileName(in.readString()); + mediaFile.setThumbnailURL(in.readString()); + mediaFile.setVideoPressShortCode(in.readString()); + mediaFile.setFileURL(in.readString()); + mediaFile.setFilePath(in.readString()); + mediaFile.setDateCreatedGMT(in.readLong()); + mediaFile.setWidth(in.readInt()); + mediaFile.setHeight(in.readInt()); + setPosition(in.readInt(), in.readInt()); + + setMediaFile(mediaFile); + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public WPImageSpan createFromParcel(Parcel in) { + WPImageSpan imageSpan = new WPImageSpan(); + imageSpan.setupFromParcel(in); + return imageSpan; + } + + public WPImageSpan[] newArray(int size) { + return new WPImageSpan[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel parcel, int i) { + parcel.writeBooleanArray(new boolean[] {mNetworkImageLoaded, mMediaFile.isVideo()}); + parcel.writeString(mImageSource.toString()); + parcel.writeString(mMediaFile.getMediaId()); + parcel.writeString(mMediaFile.getBlogId()); + parcel.writeLong(mMediaFile.getPostID()); + parcel.writeString(mMediaFile.getCaption()); + parcel.writeString(mMediaFile.getDescription()); + parcel.writeString(mMediaFile.getTitle()); + parcel.writeString(mMediaFile.getMimeType()); + parcel.writeString(mMediaFile.getFileName()); + parcel.writeString(mMediaFile.getThumbnailURL()); + parcel.writeString(mMediaFile.getVideoPressShortCode()); + parcel.writeString(mMediaFile.getFileURL()); + parcel.writeString(mMediaFile.getFilePath()); + parcel.writeLong(mMediaFile.getDateCreatedGMT()); + parcel.writeInt(mMediaFile.getWidth()); + parcel.writeInt(mMediaFile.getHeight()); + parcel.writeInt(getStartPosition()); + parcel.writeInt(getEndPosition()); + } } From 4ace866c6b42775f8a11496104d21be48f5e440e Mon Sep 17 00:00:00 2001 From: Tony Rankin Date: Tue, 28 Apr 2015 17:01:39 -0700 Subject: [PATCH 2/2] Removing potential race condition with WP image loading threads. --- .../java/org/wordpress/android/util/helpers/WPImageSpan.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPressUtils/src/main/java/org/wordpress/android/util/helpers/WPImageSpan.java b/WordPressUtils/src/main/java/org/wordpress/android/util/helpers/WPImageSpan.java index 17b13971ca03..fa0a0b4aa98b 100644 --- a/WordPressUtils/src/main/java/org/wordpress/android/util/helpers/WPImageSpan.java +++ b/WordPressUtils/src/main/java/org/wordpress/android/util/helpers/WPImageSpan.java @@ -41,7 +41,7 @@ public int getStartPosition() { } public int getEndPosition() { - return mEndPosition < mStartPosition ? mStartPosition : mEndPosition; + return mEndPosition < getStartPosition() ? getStartPosition() : mEndPosition; } public MediaFile getMediaFile() {