package com.kenny.openimgur.classes; import android.content.Intent; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.NonNull; import android.text.TextUtils; import com.google.gson.annotations.SerializedName; import com.kenny.openimgur.api.ApiClient; import com.kenny.openimgur.util.LinkUtils; import java.util.ArrayList; import java.util.List; /** * Created by kcampagna on 7/11/15. */ public class ImgurBaseObject implements Parcelable { protected final String TAG = getClass().getSimpleName(); public static final String VOTE_UP = "up"; public static final String VOTE_DOWN = "down"; @SerializedName("ups") private int mUpVotes; @SerializedName("downs") private int mDownVotes; @SerializedName("id") private String mId; @SerializedName("title") private String mTitle; @SerializedName("description") private String mDescription; @SerializedName("account_url") private String mAccount; @SerializedName("link") private String mLink; @SerializedName("reddit_comments") private String mRedditLink; @SerializedName("vote") private String mVote; @SerializedName("deletehash") private String mDeleteHash; @SerializedName("topic") private String mTopic; @SerializedName("datetime") private long mDate; @SerializedName("favorite") private boolean mIsFavorited; @SerializedName("nsfw") private boolean mIsNSFW; private boolean mIsListed = true; private List<ImgurTag> mTags; public ImgurBaseObject(String id, String title, String link) { mId = id; mTitle = title; mLink = link; } public ImgurBaseObject(String id, String title, String link, String deleteHash) { this(id, title, link); mDeleteHash = deleteHash; } public int getUpVotes() { return mUpVotes; } public int getDownVotes() { return mDownVotes; } public String getId() { return mId; } public String getTitle() { return mTitle; } public String getDescription() { return mDescription; } public String getAccount() { return mAccount; } public String getLink() { return mLink; } public long getDate() { return mDate; } public String getRedditLink() { return mRedditLink; } public boolean isFavorited() { return mIsFavorited; } public String getVote() { return mVote; } public String getDeleteHash() { return mDeleteHash; } public void setIsFavorite(boolean favorite) { mIsFavorited = favorite; } public boolean isNSFW() { return mIsNSFW; } public void setDate(long date) { mDate = date; } public String getTopic() { return mTopic; } public void setVote(String vote) { // If the user had previously voted on the item, we need to update the score if (!TextUtils.isEmpty(mVote)) { if (vote.equals(VOTE_UP) && mVote.equals(VOTE_DOWN)) { mDownVotes--; mUpVotes++; } else if (vote.equals(VOTE_DOWN) && mVote.equals(VOTE_UP)) { mDownVotes++; mUpVotes--; } } else if (vote.equals(VOTE_DOWN)) { mDownVotes++; } else { mUpVotes++; } mVote = vote; } public void setTags(List<ImgurTag> tags) { mTags = tags; } public List<ImgurTag> getTags() { return mTags; } /** * Returns the gallery link * * @return */ public String getGalleryLink() { return ApiClient.IMGUR_GALLERY_URL + getId(); } public void setLink(String link) { mLink = link; } public void setIsListed(boolean isListed) { mIsListed = isListed; } public boolean isListed() { return mIsListed; } /** * Converts an objects link from http to https */ public void toHttps() { if (LinkUtils.isHttpLink(mLink)) { mLink = mLink.replace("http:", "https:"); } if (LinkUtils.isHttpLink(mRedditLink)) { mRedditLink = mRedditLink.replace("http:", "https:"); } } @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(mUpVotes); out.writeInt(mDownVotes); out.writeString(mId); out.writeString(mTitle); out.writeString(mDescription); out.writeString(mAccount); out.writeString(mLink); out.writeString(mRedditLink); out.writeString(mVote); out.writeString(mDeleteHash); out.writeString(mTopic); out.writeInt(mIsFavorited ? 1 : 0); out.writeInt(mIsNSFW ? 1 : 0); out.writeInt(mIsListed ? 1 : 0); out.writeLong(mDate); out.writeTypedList(mTags); } public static final Creator<ImgurBaseObject> CREATOR = new Creator<ImgurBaseObject>() { public ImgurBaseObject createFromParcel(Parcel in) { return new ImgurBaseObject(in); } public ImgurBaseObject[] newArray(int size) { return new ImgurBaseObject[size]; } }; @Override public int describeContents() { return 0; } protected ImgurBaseObject(Parcel in) { mUpVotes = in.readInt(); mDownVotes = in.readInt(); mId = in.readString(); mTitle = in.readString(); mDescription = in.readString(); mAccount = in.readString(); mLink = in.readString(); mRedditLink = in.readString(); mVote = in.readString(); mDeleteHash = in.readString(); mTopic = in.readString(); mIsFavorited = in.readInt() == 1; mIsNSFW = in.readInt() == 1; mIsListed = in.readInt() == 1; mDate = in.readLong(); mTags = new ArrayList<>(); in.readTypedList(mTags, ImgurTag.CREATOR); } @Override public boolean equals(Object object) { if (object == null) { return false; } if (object == this) { return true; } if (!(object instanceof ImgurBaseObject)) { return false; } return ((ImgurBaseObject) object).mId.equals(this.mId); } @Override public int hashCode() { return !TextUtils.isEmpty(mId) ? mId.hashCode() : super.hashCode(); } @Override public String toString() { return "ID :" + mId + "Title :" + mTitle; } /** * Returns an Intent for sharing to application * * @return */ public Intent getShareIntent() { Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setType("text/plain"); String link; if (TextUtils.isEmpty(getRedditLink())) { link = getGalleryLink(); } else { link = String.format("https://reddit.com%s", getRedditLink()); } shareIntent.putExtra(Intent.EXTRA_TEXT, link); shareIntent.putExtra(Intent.EXTRA_SUBJECT, getTitle()); return shareIntent; } /** * Returns a thumbnailed version of an image * * @param id The id of the image * @param link The link of the image * @param size The size key to use for the thumbnail * @return */ public static String getThumbnail(@NonNull String id, @NonNull String link, @NonNull String size) { return link.replace(id, id + size); } }