//Add WordPress image fields to ImageSpan object package org.wordpress.android.util.helpers; 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 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); this.mImageSource = src; mMediaFile = new MediaFile(); } public WPImageSpan(Context context, int resId, Uri src) { super(context, resId); this.mImageSource = 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 < getStartPosition() ? getStartPosition() : mEndPosition; } public MediaFile getMediaFile() { return mMediaFile; } public void setMediaFile(MediaFile mMediaFile) { this.mMediaFile = mMediaFile; } public void setImageSource(Uri mImageSource) { this.mImageSource = mImageSource; } public Uri getImageSource() { return mImageSource; } public boolean isNetworkImageLoaded() { return mNetworkImageLoaded; } 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<WPImageSpan> CREATOR = new Parcelable.Creator<WPImageSpan>() { 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()); } }