Show vote unavailable message if the vote buttons of an archived post are clicked.

This commit is contained in:
Alex Ning 2019-08-02 18:06:01 +08:00
parent b42db1fbfe
commit 70e65565ae
7 changed files with 69 additions and 18 deletions

View File

@ -255,6 +255,13 @@ class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVie
((PostDetailViewHolder) holder).mImageView.setVisibility(View.GONE); ((PostDetailViewHolder) holder).mImageView.setVisibility(View.GONE);
} }
if(mPost.isArchived()) {
((PostDetailViewHolder) holder).mUpvoteButton
.setColorFilter(ContextCompat.getColor(mActivity, R.color.voteUnavailableVoteButtonColor), android.graphics.PorterDuff.Mode.SRC_IN);
((PostDetailViewHolder) holder).mDownvoteButton
.setColorFilter(ContextCompat.getColor(mActivity, R.color.voteUnavailableVoteButtonColor), android.graphics.PorterDuff.Mode.SRC_IN);
}
if(mPost.isCrosspost()) { if(mPost.isCrosspost()) {
((PostDetailViewHolder) holder).mCrosspostImageView.setVisibility(View.VISIBLE); ((PostDetailViewHolder) holder).mCrosspostImageView.setVisibility(View.VISIBLE);
} }
@ -704,6 +711,11 @@ class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVie
}); });
mUpvoteButton.setOnClickListener(view -> { mUpvoteButton.setOnClickListener(view -> {
if(mPost.isArchived()) {
Toast.makeText(mActivity, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show();
return;
}
ColorFilter previousUpvoteButtonColorFilter = mUpvoteButton.getColorFilter(); ColorFilter previousUpvoteButtonColorFilter = mUpvoteButton.getColorFilter();
ColorFilter previousDownvoteButtonColorFilter = mDownvoteButton.getColorFilter(); ColorFilter previousDownvoteButtonColorFilter = mDownvoteButton.getColorFilter();
int previousVoteType = mPost.getVoteType(); int previousVoteType = mPost.getVoteType();
@ -758,6 +770,11 @@ class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVie
}); });
mDownvoteButton.setOnClickListener(view -> { mDownvoteButton.setOnClickListener(view -> {
if(mPost.isArchived()) {
Toast.makeText(mActivity, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show();
return;
}
ColorFilter previousUpvoteButtonColorFilter = mUpvoteButton.getColorFilter(); ColorFilter previousUpvoteButtonColorFilter = mUpvoteButton.getColorFilter();
ColorFilter previousDownvoteButtonColorFilter = mDownvoteButton.getColorFilter(); ColorFilter previousDownvoteButtonColorFilter = mDownvoteButton.getColorFilter();
int previousVoteType = mPost.getVoteType(); int previousVoteType = mPost.getVoteType();

View File

@ -71,4 +71,5 @@ public class JSONUtils {
static final String RULES_KEY = "rules"; static final String RULES_KEY = "rules";
static final String SHORT_NAME_KEY = "short_name"; static final String SHORT_NAME_KEY = "short_name";
static final String DESCRIPTION_HTML_KEY = "description_html"; static final String DESCRIPTION_HTML_KEY = "description_html";
static final String ARCHIVED_KEY = "archived";
} }

View File

@ -145,6 +145,7 @@ class ParsePost {
boolean spoiler = data.getBoolean(JSONUtils.SPOILER_KEY); boolean spoiler = data.getBoolean(JSONUtils.SPOILER_KEY);
boolean nsfw = data.getBoolean(JSONUtils.NSFW_KEY); boolean nsfw = data.getBoolean(JSONUtils.NSFW_KEY);
boolean stickied = data.getBoolean(JSONUtils.STICKIED_KEY); boolean stickied = data.getBoolean(JSONUtils.STICKIED_KEY);
boolean archived = data.getBoolean(JSONUtils.ARCHIVED_KEY);
String flair = null; String flair = null;
if(!data.isNull(JSONUtils.LINK_FLAIR_TEXT_KEY)) { if(!data.isNull(JSONUtils.LINK_FLAIR_TEXT_KEY)) {
flair = data.getString(JSONUtils.LINK_FLAIR_TEXT_KEY); flair = data.getString(JSONUtils.LINK_FLAIR_TEXT_KEY);
@ -179,11 +180,11 @@ class ParsePost {
data = data.getJSONArray(JSONUtils.CROSSPOST_PARENT_LIST).getJSONObject(0); data = data.getJSONArray(JSONUtils.CROSSPOST_PARENT_LIST).getJSONObject(0);
return parseData(data, permalink, id, fullName, subredditNamePrefixed, return parseData(data, permalink, id, fullName, subredditNamePrefixed,
author, formattedPostTime, title, previewUrl, previewWidth, previewHeight, author, formattedPostTime, title, previewUrl, previewWidth, previewHeight,
score, voteType, gilded, flair, spoiler, nsfw, stickied, true, i); score, voteType, gilded, flair, spoiler, nsfw, stickied, archived, true, i);
} else { } else {
return parseData(data, permalink, id, fullName, subredditNamePrefixed, return parseData(data, permalink, id, fullName, subredditNamePrefixed,
author, formattedPostTime, title, previewUrl, previewWidth, previewHeight, author, formattedPostTime, title, previewUrl, previewWidth, previewHeight,
score, voteType, gilded, flair, spoiler, nsfw, stickied, false, i); score, voteType, gilded, flair, spoiler, nsfw, stickied, archived, false, i);
} }
} }
@ -191,7 +192,7 @@ class ParsePost {
String subredditNamePrefixed, String author, String formattedPostTime, String subredditNamePrefixed, String author, String formattedPostTime,
String title, String previewUrl, int previewWidth, int previewHeight, String title, String previewUrl, int previewWidth, int previewHeight,
int score, int voteType, int gilded, String flair, boolean spoiler, int score, int voteType, int gilded, String flair, boolean spoiler,
boolean nsfw, boolean stickied, boolean isCrosspost, int i) throws JSONException { boolean nsfw, boolean stickied, boolean archived, boolean isCrosspost, int i) throws JSONException {
Post post; Post post;
boolean isVideo = data.getBoolean(JSONUtils.IS_VIDEO_KEY); boolean isVideo = data.getBoolean(JSONUtils.IS_VIDEO_KEY);
@ -204,7 +205,7 @@ class ParsePost {
int postType = Post.TEXT_TYPE; int postType = Post.TEXT_TYPE;
post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
title, permalink, score, postType, voteType, gilded, flair, spoiler, nsfw, title, permalink, score, postType, voteType, gilded, flair, spoiler, nsfw,
stickied, isCrosspost); stickied, archived, isCrosspost);
if(data.isNull(JSONUtils.SELFTEXT_HTML_KEY)) { if(data.isNull(JSONUtils.SELFTEXT_HTML_KEY)) {
post.setSelfText(""); post.setSelfText("");
} else { } else {
@ -216,7 +217,7 @@ class ParsePost {
int postType = Post.NO_PREVIEW_LINK_TYPE; int postType = Post.NO_PREVIEW_LINK_TYPE;
post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
title, previewUrl, url, permalink, score, postType, title, previewUrl, url, permalink, score, postType,
voteType, gilded, flair, spoiler, nsfw, stickied, isCrosspost); voteType, gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost);
if(data.isNull(JSONUtils.SELFTEXT_HTML_KEY)) { if(data.isNull(JSONUtils.SELFTEXT_HTML_KEY)) {
post.setSelfText(""); post.setSelfText("");
} else { } else {
@ -238,7 +239,7 @@ class ParsePost {
post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
title, previewUrl, permalink, score, postType, voteType, title, previewUrl, permalink, score, postType, voteType,
gilded, flair, spoiler, nsfw, stickied, isCrosspost, true); gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost, true);
post.setPreviewWidth(previewWidth); post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight); post.setPreviewHeight(previewHeight);
@ -255,7 +256,7 @@ class ParsePost {
post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title, post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title,
previewUrl, permalink, score, postType, voteType, previewUrl, permalink, score, postType, voteType,
gilded, flair, spoiler, nsfw, stickied, isCrosspost, false); gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost, false);
post.setPreviewWidth(previewWidth); post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight); post.setPreviewHeight(previewHeight);
post.setVideoUrl(videoUrl); post.setVideoUrl(videoUrl);
@ -270,7 +271,7 @@ class ParsePost {
post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title, post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title,
previewUrl, permalink, score, postType, voteType, previewUrl, permalink, score, postType, voteType,
gilded, flair, spoiler, nsfw, stickied, isCrosspost, true); gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost, true);
post.setPreviewWidth(previewWidth); post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight); post.setPreviewHeight(previewHeight);
post.setVideoUrl(videoUrl); post.setVideoUrl(videoUrl);
@ -283,7 +284,7 @@ class ParsePost {
post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
title, url, url, permalink, score, postType, title, url, url, permalink, score, postType,
voteType, gilded, flair, spoiler, nsfw, stickied, isCrosspost); voteType, gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost);
post.setPreviewWidth(previewWidth); post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight); post.setPreviewHeight(previewHeight);
@ -295,7 +296,7 @@ class ParsePost {
post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
title, permalink, score, postType, voteType, gilded, flair, spoiler, title, permalink, score, postType, voteType, gilded, flair, spoiler,
nsfw, stickied, isCrosspost); nsfw, stickied, archived, isCrosspost);
post.setPreviewWidth(previewWidth); post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight); post.setPreviewHeight(previewHeight);
@ -311,8 +312,8 @@ class ParsePost {
int postType = Post.LINK_TYPE; int postType = Post.LINK_TYPE;
post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
title, previewUrl, url, permalink, score, title, previewUrl, url, permalink, score, postType, voteType, gilded,
postType, voteType, gilded, flair, spoiler, nsfw, stickied, isCrosspost); flair, spoiler, nsfw, stickied, archived, isCrosspost);
if(data.isNull(JSONUtils.SELFTEXT_HTML_KEY)) { if(data.isNull(JSONUtils.SELFTEXT_HTML_KEY)) {
post.setSelfText(""); post.setSelfText("");
} else { } else {
@ -332,7 +333,7 @@ class ParsePost {
post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
title, previewUrl, url, permalink, score, postType, title, previewUrl, url, permalink, score, postType,
voteType, gilded, flair, spoiler, nsfw, stickied, isCrosspost); voteType, gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost);
post.setPreviewWidth(previewWidth); post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight); post.setPreviewHeight(previewHeight);
} else { } else {
@ -342,7 +343,7 @@ class ParsePost {
post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title, post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title,
url, url, permalink, score, postType, voteType, url, url, permalink, score, postType, voteType,
gilded, flair, spoiler, nsfw, stickied, isCrosspost); gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost);
} }
} }
} }

View File

@ -40,14 +40,15 @@ class Post implements Parcelable {
private boolean spoiler; private boolean spoiler;
private boolean nsfw; private boolean nsfw;
private boolean stickied; private boolean stickied;
private boolean archived;
private boolean isCrosspost; private boolean isCrosspost;
private boolean isDashVideo; private boolean isDashVideo;
private boolean isDownloadableGifOrVideo; private boolean isDownloadableGifOrVideo;
private Post crosspostParentPost;
Post(String id, String fullName, String subredditNamePrefixed, String author, String postTime, Post(String id, String fullName, String subredditNamePrefixed, String author, String postTime,
String title, String previewUrl, String permalink, int score, int postType, int voteType, String title, String previewUrl, String permalink, int score, int postType, int voteType,
int gilded, String flair, boolean spoiler, boolean nsfw, boolean stickied, boolean isCrosspost, boolean isDashVideo) { int gilded, String flair, boolean spoiler, boolean nsfw, boolean stickied, boolean archived,
boolean isCrosspost, boolean isDashVideo) {
this.id = id; this.id = id;
this.fullName = fullName; this.fullName = fullName;
this.subredditNamePrefixed = subredditNamePrefixed; this.subredditNamePrefixed = subredditNamePrefixed;
@ -65,6 +66,7 @@ class Post implements Parcelable {
this.spoiler = spoiler; this.spoiler = spoiler;
this.nsfw = nsfw; this.nsfw = nsfw;
this.stickied = stickied; this.stickied = stickied;
this.archived = archived;
this.isCrosspost = isCrosspost; this.isCrosspost = isCrosspost;
this.isDashVideo = isDashVideo; this.isDashVideo = isDashVideo;
} }
@ -72,7 +74,7 @@ class Post implements Parcelable {
Post(String id, String fullName, String subredditNamePrefixed, String author, String postTime, Post(String id, String fullName, String subredditNamePrefixed, String author, String postTime,
String title, String previewUrl, String url, String permalink, int score, int postType, String title, String previewUrl, String url, String permalink, int score, int postType,
int voteType, int gilded, String flair, boolean spoiler, boolean nsfw, boolean stickied, int voteType, int gilded, String flair, boolean spoiler, boolean nsfw, boolean stickied,
boolean isCrosspost) { boolean archived, boolean isCrosspost) {
this.id = id; this.id = id;
this.fullName = fullName; this.fullName = fullName;
this.subredditNamePrefixed = subredditNamePrefixed; this.subredditNamePrefixed = subredditNamePrefixed;
@ -91,12 +93,13 @@ class Post implements Parcelable {
this.spoiler = spoiler; this.spoiler = spoiler;
this.nsfw = nsfw; this.nsfw = nsfw;
this.stickied = stickied; this.stickied = stickied;
this.archived = archived;
this.isCrosspost = isCrosspost; this.isCrosspost = isCrosspost;
} }
Post(String id, String fullName, String subredditNamePrefixed, String author, String postTime, Post(String id, String fullName, String subredditNamePrefixed, String author, String postTime,
String title, String permalink, int score, int postType, int voteType, int gilded, String flair, String title, String permalink, int score, int postType, int voteType, int gilded, String flair,
boolean spoiler, boolean nsfw, boolean stickied, boolean isCrosspost) { boolean spoiler, boolean nsfw, boolean stickied, boolean archived, boolean isCrosspost) {
this.id = id; this.id = id;
this.fullName = fullName; this.fullName = fullName;
this.subredditNamePrefixed = subredditNamePrefixed; this.subredditNamePrefixed = subredditNamePrefixed;
@ -113,6 +116,7 @@ class Post implements Parcelable {
this.spoiler = spoiler; this.spoiler = spoiler;
this.nsfw = nsfw; this.nsfw = nsfw;
this.stickied = stickied; this.stickied = stickied;
this.archived = archived;
this.isCrosspost= isCrosspost; this.isCrosspost= isCrosspost;
} }
@ -142,6 +146,7 @@ class Post implements Parcelable {
spoiler = in.readByte() != 0; spoiler = in.readByte() != 0;
nsfw = in.readByte() != 0; nsfw = in.readByte() != 0;
stickied = in.readByte() != 0; stickied = in.readByte() != 0;
archived = in.readByte() != 0;
isCrosspost = in.readByte() != 0; isCrosspost = in.readByte() != 0;
isDashVideo = in.readByte() != 0; isDashVideo = in.readByte() != 0;
isDownloadableGifOrVideo = in.readByte() != 0; isDownloadableGifOrVideo = in.readByte() != 0;
@ -316,6 +321,10 @@ class Post implements Parcelable {
return stickied; return stickied;
} }
boolean isArchived() {
return archived;
}
boolean isCrosspost() { boolean isCrosspost() {
return isCrosspost; return isCrosspost;
} }
@ -347,6 +356,7 @@ class Post implements Parcelable {
parcel.writeByte((byte) (spoiler ? 1 : 0)); parcel.writeByte((byte) (spoiler ? 1 : 0));
parcel.writeByte((byte) (nsfw ? 1 : 0)); parcel.writeByte((byte) (nsfw ? 1 : 0));
parcel.writeByte((byte) (stickied ? 1 : 0)); parcel.writeByte((byte) (stickied ? 1 : 0));
parcel.writeByte((byte) (archived ? 1 : 0));
parcel.writeByte((byte) (isCrosspost ? 1 : 0)); parcel.writeByte((byte) (isCrosspost ? 1 : 0));
parcel.writeByte((byte) (isDashVideo ? 1 : 0)); parcel.writeByte((byte) (isDashVideo ? 1 : 0));
parcel.writeByte((byte) (isDownloadableGifOrVideo ? 1 : 0)); parcel.writeByte((byte) (isDownloadableGifOrVideo ? 1 : 0));

View File

@ -147,6 +147,7 @@ class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView.ViewHo
boolean nsfw = post.isNSFW(); boolean nsfw = post.isNSFW();
boolean spoiler = post.isSpoiler(); boolean spoiler = post.isSpoiler();
String flair = post.getFlair(); String flair = post.getFlair();
boolean isArchived = post.isArchived();
((DataViewHolder) holder).cardView.setOnClickListener(view -> { ((DataViewHolder) holder).cardView.setOnClickListener(view -> {
if(canStartActivity) { if(canStartActivity) {
@ -350,6 +351,13 @@ class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView.ViewHo
glide.load(R.drawable.thumbtack).into(((DataViewHolder) holder).stickiedPostImageView); glide.load(R.drawable.thumbtack).into(((DataViewHolder) holder).stickiedPostImageView);
} }
if(isArchived) {
((DataViewHolder) holder).upvoteButton
.setColorFilter(ContextCompat.getColor(mContext, R.color.voteUnavailableVoteButtonColor), android.graphics.PorterDuff.Mode.SRC_IN);
((DataViewHolder) holder).downvoteButton
.setColorFilter(ContextCompat.getColor(mContext, R.color.voteUnavailableVoteButtonColor), android.graphics.PorterDuff.Mode.SRC_IN);
}
if(post.isCrosspost()) { if(post.isCrosspost()) {
((DataViewHolder) holder).crosspostImageView.setVisibility(View.VISIBLE); ((DataViewHolder) holder).crosspostImageView.setVisibility(View.VISIBLE);
} }
@ -441,6 +449,11 @@ class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView.ViewHo
} }
((DataViewHolder) holder).upvoteButton.setOnClickListener(view -> { ((DataViewHolder) holder).upvoteButton.setOnClickListener(view -> {
if(isArchived) {
Toast.makeText(mContext, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show();
return;
}
ColorFilter previousUpvoteButtonColorFilter = ((DataViewHolder) holder).upvoteButton.getColorFilter(); ColorFilter previousUpvoteButtonColorFilter = ((DataViewHolder) holder).upvoteButton.getColorFilter();
ColorFilter previousDownvoteButtonColorFilter = ((DataViewHolder) holder).downvoteButton.getColorFilter(); ColorFilter previousDownvoteButtonColorFilter = ((DataViewHolder) holder).downvoteButton.getColorFilter();
int previousVoteType = post.getVoteType(); int previousVoteType = post.getVoteType();
@ -495,6 +508,11 @@ class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView.ViewHo
}); });
((DataViewHolder) holder).downvoteButton.setOnClickListener(view -> { ((DataViewHolder) holder).downvoteButton.setOnClickListener(view -> {
if(isArchived) {
Toast.makeText(mContext, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show();
return;
}
ColorFilter previousUpvoteButtonColorFilter = ((DataViewHolder) holder).upvoteButton.getColorFilter(); ColorFilter previousUpvoteButtonColorFilter = ((DataViewHolder) holder).upvoteButton.getColorFilter();
ColorFilter previousDownvoteButtonColorFilter = ((DataViewHolder) holder).downvoteButton.getColorFilter(); ColorFilter previousDownvoteButtonColorFilter = ((DataViewHolder) holder).downvoteButton.getColorFilter();

View File

@ -27,4 +27,6 @@
<color name="roundedBottomSheetPrimaryBackground">#FFFFFF</color> <color name="roundedBottomSheetPrimaryBackground">#FFFFFF</color>
<color name="roundedBottomSheetPrimaryNavigationBarColor">#000000</color> <color name="roundedBottomSheetPrimaryNavigationBarColor">#000000</color>
<color name="voteUnavailableVoteButtonColor">#F0F0F0</color>
</resources> </resources>

View File

@ -149,4 +149,6 @@
<string name="open_link_with">Open link with</string> <string name="open_link_with">Open link with</string>
<string name="no_browser_found">No browser found</string> <string name="no_browser_found">No browser found</string>
<string name="archived_post_vote_unavailable">Archived post. Vote unavailable.</string>
</resources> </resources>