Load user info after the new access token is retrieved if the old access token expired. Feature added: vote comment

This commit is contained in:
Alex Ning 2018-08-18 09:22:31 +08:00
parent 3c1423a127
commit cca0313990
10 changed files with 234 additions and 105 deletions

Binary file not shown.

View File

@ -132,11 +132,11 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
switch (voteType) { switch (voteType) {
case 1: case 1:
//Upvote //Upvote
((DataViewHolder) holder).plusButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN); ((DataViewHolder) holder).upvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN);
break; break;
case -1: case -1:
//Downvote //Downvote
((DataViewHolder) holder).minusButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN); ((DataViewHolder) holder).downvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN);
break; break;
} }
@ -295,14 +295,14 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
((DataViewHolder) holder).typeTextView.setText("TEXT"); ((DataViewHolder) holder).typeTextView.setText("TEXT");
} }
((DataViewHolder) holder).plusButton.setOnClickListener(new View.OnClickListener() { ((DataViewHolder) holder).upvoteButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
final boolean isDownvotedBefore = ((DataViewHolder) holder).minusButton.getColorFilter() != null; final boolean isDownvotedBefore = ((DataViewHolder) holder).downvoteButton.getColorFilter() != null;
((DataViewHolder) holder).minusButton.clearColorFilter(); ((DataViewHolder) holder).downvoteButton.clearColorFilter();
if (((DataViewHolder) holder).plusButton.getColorFilter() == null) { if (((DataViewHolder) holder).upvoteButton.getColorFilter() == null) {
((DataViewHolder) holder).plusButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN); ((DataViewHolder) holder).upvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN);
if(isDownvotedBefore) { if(isDownvotedBefore) {
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() + 2)); ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() + 2));
} else { } else {
@ -323,14 +323,14 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
@Override @Override
public void onVoteThingFail(int position) { public void onVoteThingFail(int position) {
Toast.makeText(mContext, "Cannot upvote this post", Toast.LENGTH_SHORT).show(); Toast.makeText(mContext, "Cannot upvote this post", Toast.LENGTH_SHORT).show();
((DataViewHolder) holder).plusButton.clearColorFilter(); ((DataViewHolder) holder).upvoteButton.clearColorFilter();
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore())); ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore()));
((DataViewHolder) holder).minusButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN); ((DataViewHolder) holder).downvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN);
} }
}, id, RedditUtils.DIR_UPVOTE, ((DataViewHolder) holder).getAdapterPosition(), 1); }, id, RedditUtils.DIR_UPVOTE, ((DataViewHolder) holder).getAdapterPosition(), 1);
} else { } else {
//Upvoted before //Upvoted before
((DataViewHolder) holder).plusButton.clearColorFilter(); ((DataViewHolder) holder).upvoteButton.clearColorFilter();
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() - 1)); ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() - 1));
new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() { new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
@ -344,7 +344,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
public void onVoteThingFail(int position) { public void onVoteThingFail(int position) {
Toast.makeText(mContext, "Cannot unvote this post", Toast.LENGTH_SHORT).show(); Toast.makeText(mContext, "Cannot unvote this post", Toast.LENGTH_SHORT).show();
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() + 1)); ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() + 1));
((DataViewHolder) holder).plusButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN); ((DataViewHolder) holder).upvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN);
mBestPostData.get(position).setScore(mBestPostData.get(position).getScore() + 1); mBestPostData.get(position).setScore(mBestPostData.get(position).getScore() + 1);
} }
}, id, RedditUtils.DIR_UNVOTE, ((DataViewHolder) holder).getAdapterPosition(), 1); }, id, RedditUtils.DIR_UNVOTE, ((DataViewHolder) holder).getAdapterPosition(), 1);
@ -352,14 +352,14 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
} }
}); });
((DataViewHolder) holder).minusButton.setOnClickListener(new View.OnClickListener() { ((DataViewHolder) holder).downvoteButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
final boolean isUpvotedBefore = ((DataViewHolder) holder).plusButton.getColorFilter() != null; final boolean isUpvotedBefore = ((DataViewHolder) holder).upvoteButton.getColorFilter() != null;
((DataViewHolder) holder).plusButton.clearColorFilter(); ((DataViewHolder) holder).upvoteButton.clearColorFilter();
if (((DataViewHolder) holder).minusButton.getColorFilter() == null) { if (((DataViewHolder) holder).downvoteButton.getColorFilter() == null) {
((DataViewHolder) holder).minusButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN); ((DataViewHolder) holder).downvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN);
if (isUpvotedBefore) { if (isUpvotedBefore) {
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() - 2)); ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() - 2));
} else { } else {
@ -380,14 +380,14 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
@Override @Override
public void onVoteThingFail(int position) { public void onVoteThingFail(int position) {
Toast.makeText(mContext, "Cannot downvote this post", Toast.LENGTH_SHORT).show(); Toast.makeText(mContext, "Cannot downvote this post", Toast.LENGTH_SHORT).show();
((DataViewHolder) holder).minusButton.clearColorFilter(); ((DataViewHolder) holder).downvoteButton.clearColorFilter();
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore())); ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore()));
((DataViewHolder) holder).plusButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN); ((DataViewHolder) holder).upvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN);
} }
}, id, RedditUtils.DIR_DOWNVOTE, holder.getAdapterPosition(), 1); }, id, RedditUtils.DIR_DOWNVOTE, holder.getAdapterPosition(), 1);
} else { } else {
//Down voted before //Down voted before
((DataViewHolder) holder).minusButton.clearColorFilter(); ((DataViewHolder) holder).downvoteButton.clearColorFilter();
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() + 1)); ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() + 1));
new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() { new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
@ -400,7 +400,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
@Override @Override
public void onVoteThingFail(int position) { public void onVoteThingFail(int position) {
Toast.makeText(mContext, "Cannot unvote this post", Toast.LENGTH_SHORT).show(); Toast.makeText(mContext, "Cannot unvote this post", Toast.LENGTH_SHORT).show();
((DataViewHolder) holder).minusButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN); ((DataViewHolder) holder).downvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN);
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore())); ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore()));
mBestPostData.get(position).setScore(mBestPostData.get(position).getScore()); mBestPostData.get(position).setScore(mBestPostData.get(position).getScore());
} }
@ -475,9 +475,9 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
private ProgressBar progressBar; private ProgressBar progressBar;
private ImageView imageView; private ImageView imageView;
private ImageView noPreviewLinkImageView; private ImageView noPreviewLinkImageView;
private ImageView plusButton; private ImageView upvoteButton;
private TextView scoreTextView; private TextView scoreTextView;
private ImageView minusButton; private ImageView downvoteButton;
private ImageView shareButton; private ImageView shareButton;
DataViewHolder(CardView itemView) { DataViewHolder(CardView itemView) {
@ -494,9 +494,9 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
imageView = itemView.findViewById(R.id.image_view_best_post_item); imageView = itemView.findViewById(R.id.image_view_best_post_item);
noPreviewLinkImageView = itemView.findViewById(R.id.image_view_no_preview_link_best_post_item); noPreviewLinkImageView = itemView.findViewById(R.id.image_view_no_preview_link_best_post_item);
plusButton = itemView.findViewById(R.id.plus_button_item_best_post); upvoteButton = itemView.findViewById(R.id.plus_button_item_best_post);
scoreTextView = itemView.findViewById(R.id.score_text_view_item_best_post); scoreTextView = itemView.findViewById(R.id.score_text_view_item_best_post);
minusButton = itemView.findViewById(R.id.minus_button_item_best_post); downvoteButton = itemView.findViewById(R.id.minus_button_item_best_post);
shareButton = itemView.findViewById(R.id.share_button_item_best_post); shareButton = itemView.findViewById(R.id.share_button_item_best_post);
} }
} }
@ -523,8 +523,8 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
((DataViewHolder) holder).progressBar.setVisibility(View.GONE); ((DataViewHolder) holder).progressBar.setVisibility(View.GONE);
((DataViewHolder) holder).imageView.setVisibility(View.GONE); ((DataViewHolder) holder).imageView.setVisibility(View.GONE);
((DataViewHolder) holder).noPreviewLinkImageView.setVisibility(View.GONE); ((DataViewHolder) holder).noPreviewLinkImageView.setVisibility(View.GONE);
((DataViewHolder) holder).plusButton.clearColorFilter(); ((DataViewHolder) holder).upvoteButton.clearColorFilter();
((DataViewHolder) holder).minusButton.clearColorFilter(); ((DataViewHolder) holder).downvoteButton.clearColorFilter();
} else if(holder instanceof LoadingViewHolder) { } else if(holder instanceof LoadingViewHolder) {
if(isLoadingMorePostSuccess) { if(isLoadingMorePostSuccess) {
((LoadingViewHolder) holder).relativeLayout.setVisibility(View.GONE); ((LoadingViewHolder) holder).relativeLayout.setVisibility(View.GONE);

View File

@ -1,7 +1,7 @@
package ml.docilealligator.infinityforreddit; package ml.docilealligator.infinityforreddit;
class CommentData { class CommentData {
private String id; private String fullName;
private String author; private String author;
private String commentTime; private String commentTime;
private String commentContent; private String commentContent;
@ -13,10 +13,10 @@ class CommentData {
private boolean hasReply; private boolean hasReply;
private boolean scoreHidden; private boolean scoreHidden;
CommentData(String id, String author, String commentTime, String commentContent, int score, CommentData(String fullName, String author, String commentTime, String commentContent, int score,
boolean isSubmitter, String permalink, int depth, boolean collapsed, boolean hasReply, boolean isSubmitter, String permalink, int depth, boolean collapsed, boolean hasReply,
boolean scoreHidden) { boolean scoreHidden) {
this.id = id; this.fullName = fullName;
this.author = author; this.author = author;
this.commentTime = commentTime; this.commentTime = commentTime;
this.commentContent = commentContent; this.commentContent = commentContent;
@ -30,8 +30,8 @@ class CommentData {
} }
public String getId() { public String getFullName() {
return id; return fullName;
} }
public String getAuthor() { public String getAuthor() {

View File

@ -1,13 +1,16 @@
package ml.docilealligator.infinityforreddit; package ml.docilealligator.infinityforreddit;
import android.content.Context; import android.content.Context;
import android.graphics.ColorFilter;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.RequestQueue; import com.android.volley.RequestQueue;
@ -17,12 +20,14 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
private Context mContext; private Context mContext;
private ArrayList<CommentData> mCommentData; private ArrayList<CommentData> mCommentData;
private RequestQueue mVoteThingRequestQueue; private RequestQueue mVoteThingRequestQueue;
private RequestQueue mAcquireAccessTokenRequestQueue;
CommentRecyclerViewAdapter(Context context, ArrayList<CommentData> commentData, CommentRecyclerViewAdapter(Context context, ArrayList<CommentData> commentData,
RequestQueue voteThingRequestQueue) { RequestQueue voteThingRequestQueue, RequestQueue acquireAccessTokenRequestQueue) {
mContext = context; mContext = context;
mCommentData = commentData; mCommentData = commentData;
mVoteThingRequestQueue = voteThingRequestQueue; mVoteThingRequestQueue = voteThingRequestQueue;
mAcquireAccessTokenRequestQueue = acquireAccessTokenRequestQueue;
} }
@NonNull @NonNull
@ -32,7 +37,7 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
} }
@Override @Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
((CommentViewHolder) holder).authorTextView.setText(mCommentData.get(position).getAuthor()); ((CommentViewHolder) holder).authorTextView.setText(mCommentData.get(position).getAuthor());
((CommentViewHolder) holder).commentTimeTextView.setText(mCommentData.get(position).getCommentTime()); ((CommentViewHolder) holder).commentTimeTextView.setText(mCommentData.get(position).getCommentTime());
((CommentViewHolder) holder).commentTextView.setText(mCommentData.get(position).getCommentContent()); ((CommentViewHolder) holder).commentTextView.setText(mCommentData.get(position).getCommentContent());
@ -40,13 +45,113 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
((CommentViewHolder) holder).upvoteButton.setOnClickListener(new View.OnClickListener() { ((CommentViewHolder) holder).upvoteButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
final boolean isDownvotedBefore = ((CommentViewHolder) holder).downvoteButton.getColorFilter() != null;
final ColorFilter minusButtonColorFilter = ((CommentViewHolder) holder).downvoteButton.getColorFilter();
((CommentViewHolder) holder).downvoteButton.clearColorFilter();
if (((CommentViewHolder) holder).upvoteButton.getColorFilter() == null) {
((CommentViewHolder) holder).upvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN);
if(isDownvotedBefore) {
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore() + 2));
} else {
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore() + 1));
}
new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess(int position) {
if(isDownvotedBefore) {
mCommentData.get(position).setScore(mCommentData.get(position).getScore() + 2);
} else {
mCommentData.get(position).setScore(mCommentData.get(position).getScore() + 1);
}
}
@Override
public void onVoteThingFail(int position) {
Toast.makeText(mContext, "Cannot upvote this comment", Toast.LENGTH_SHORT).show();
((CommentViewHolder) holder).upvoteButton.clearColorFilter();
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore()));
((CommentViewHolder) holder).downvoteButton.setColorFilter(minusButtonColorFilter);
}
}, mCommentData.get(position).getFullName(), RedditUtils.DIR_UPVOTE, ((CommentViewHolder) holder).getAdapterPosition(), 1);
} else {
//Upvoted before
((CommentViewHolder) holder).upvoteButton.clearColorFilter();
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore() - 1));
new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess(int position) {
mCommentData.get(position).setScore(mCommentData.get(position).getScore() - 1);
}
@Override
public void onVoteThingFail(int position) {
Toast.makeText(mContext, "Cannot unvote this comment", Toast.LENGTH_SHORT).show();
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore() + 1));
((CommentViewHolder) holder).upvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN);
mCommentData.get(position).setScore(mCommentData.get(position).getScore() + 1);
}
}, mCommentData.get(position).getFullName(), RedditUtils.DIR_UNVOTE, ((CommentViewHolder) holder).getAdapterPosition(), 1);
}
} }
}); });
((CommentViewHolder) holder).downvoteButton.setOnClickListener(new View.OnClickListener() { ((CommentViewHolder) holder).downvoteButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
final boolean isUpvotedBefore = ((CommentViewHolder) holder).upvoteButton.getColorFilter() != null;
final ColorFilter upvoteButtonColorFilter = ((CommentViewHolder) holder).upvoteButton.getColorFilter();
((CommentViewHolder) holder).upvoteButton.clearColorFilter();
if (((CommentViewHolder) holder).downvoteButton.getColorFilter() == null) {
((CommentViewHolder) holder).downvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN);
if (isUpvotedBefore) {
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore() - 2));
} else {
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore() - 1));
}
new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess(int position) {
if(isUpvotedBefore) {
mCommentData.get(position).setScore(mCommentData.get(position).getScore() - 2);
} else {
mCommentData.get(position).setScore(mCommentData.get(position).getScore() - 1);
}
}
@Override
public void onVoteThingFail(int position) {
Toast.makeText(mContext, "Cannot downvote this comment", Toast.LENGTH_SHORT).show();
((CommentViewHolder) holder).downvoteButton.clearColorFilter();
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore()));
((CommentViewHolder) holder).upvoteButton.setColorFilter(upvoteButtonColorFilter);
}
}, mCommentData.get(position).getFullName(), RedditUtils.DIR_DOWNVOTE, holder.getAdapterPosition(), 1);
} else {
//Down voted before
((CommentViewHolder) holder).downvoteButton.clearColorFilter();
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore() + 1));
new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess(int position) {
mCommentData.get(position).setScore(mCommentData.get(position).getScore());
}
@Override
public void onVoteThingFail(int position) {
Toast.makeText(mContext, "Cannot unvote this comment", Toast.LENGTH_SHORT).show();
((CommentViewHolder) holder).downvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN);
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore()));
mCommentData.get(position).setScore(mCommentData.get(position).getScore());
}
}, mCommentData.get(position).getFullName(), RedditUtils.DIR_UNVOTE, holder.getAdapterPosition(), 1);
}
} }
}); });
} }

View File

@ -63,4 +63,5 @@ class JSONUtils {
static final String PUBLIC_DESCRIPTION = "public_description"; static final String PUBLIC_DESCRIPTION = "public_description";
static final String ACTIVE_USER_COUNT = "active_user_count"; static final String ACTIVE_USER_COUNT = "active_user_count";
static final String DISPLAY_NAME_PREFIXED = "display_name_prefixed"; static final String DISPLAY_NAME_PREFIXED = "display_name_prefixed";
static final String LINK_ID = "link_id";
} }

View File

@ -1,7 +1,5 @@
package ml.docilealligator.infinityforreddit; package ml.docilealligator.infinityforreddit;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.arch.lifecycle.Observer; import android.arch.lifecycle.Observer;
import android.arch.lifecycle.ViewModelProviders; import android.arch.lifecycle.ViewModelProviders;
import android.content.Context; import android.content.Context;
@ -10,6 +8,8 @@ import android.content.SharedPreferences;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.GravityCompat; import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.ActionBarDrawerToggle;
@ -37,6 +37,8 @@ public class MainActivity extends AppCompatActivity {
private String profileImageUrlState = "PIUS"; private String profileImageUrlState = "PIUS";
private String bannerImageUrlState = "BIUS"; private String bannerImageUrlState = "BIUS";
private String karmaState = "KS"; private String karmaState = "KS";
private String fetchUserInfoState = "FUIS";
private String insertSubscribedSubredditState = "ISSS";
private TextView mNameTextView; private TextView mNameTextView;
private TextView mKarmaTextView; private TextView mKarmaTextView;
@ -52,12 +54,13 @@ public class MainActivity extends AppCompatActivity {
private String mKarma; private String mKarma;
private boolean mFetchUserInfoSuccess; private boolean mFetchUserInfoSuccess;
private boolean mIsInserting; private boolean mIsInserting;
private boolean mInsertSuccess;
private SubscribedSubredditViewModel mSubscribedSubredditViewModel; private SubscribedSubredditViewModel mSubscribedSubredditViewModel;
private SubscribedUserViewModel mSubscribedUserViewModel; private SubscribedUserViewModel mSubscribedUserViewModel;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar); Toolbar toolbar = findViewById(R.id.toolbar);
@ -95,11 +98,15 @@ public class MainActivity extends AppCompatActivity {
new AcquireAccessToken(this).refreshAccessToken(Volley.newRequestQueue(this), new AcquireAccessToken(this).refreshAccessToken(Volley.newRequestQueue(this),
new AcquireAccessToken.AcquireAccessTokenListener() { new AcquireAccessToken.AcquireAccessTokenListener() {
@Override @Override
public void onAcquireAccessTokenSuccess() {} public void onAcquireAccessTokenSuccess() {
loadUserData(savedInstanceState);
}
@Override @Override
public void onAcquireAccessTokenFail() {} public void onAcquireAccessTokenFail() {}
}); });
} else {
loadUserData(savedInstanceState);
} }
View header = findViewById(R.id.nav_header_main_activity); View header = findViewById(R.id.nav_header_main_activity);
@ -133,7 +140,46 @@ public class MainActivity extends AppCompatActivity {
glide.load(mBannerImageUrl).into(mBannerImageView); glide.load(mBannerImageUrl).into(mBannerImageView);
} }
if(savedInstanceState == null && !mFetchUserInfoSuccess) { final SubscribedSubredditRecyclerViewAdapter subredditadapter = new SubscribedSubredditRecyclerViewAdapter(this);
subscribedSubredditRecyclerView.setAdapter(subredditadapter);
mSubscribedSubredditViewModel = ViewModelProviders.of(this).get(SubscribedSubredditViewModel.class);
mSubscribedSubredditViewModel.getAllSubscribedSubreddits().observe(this, new Observer<List<SubscribedSubredditData>>() {
@Override
public void onChanged(@Nullable final List<SubscribedSubredditData> subscribedSubredditData) {
if(!mIsInserting) {
if(subscribedSubredditData == null || subscribedSubredditData.size() == 0) {
subscriptionsLabelTextView.setVisibility(View.GONE);
} else {
subscriptionsLabelTextView.setVisibility(View.VISIBLE);
}
subredditadapter.setSubscribedSubreddits(subscribedSubredditData);
}
}
});
final SubscribedUserRecyclerViewAdapter userAdapter = new SubscribedUserRecyclerViewAdapter(this);
subscribedUserRecyclerView.setAdapter(userAdapter);
mSubscribedUserViewModel = ViewModelProviders.of(this).get(SubscribedUserViewModel.class);
mSubscribedUserViewModel.getAllSubscribedUsers().observe(this, new Observer<List<SubscribedUserData>>() {
@Override
public void onChanged(@Nullable final List<SubscribedUserData> subscribedUserData) {
if(!mIsInserting) {
if(subscribedUserData == null || subscribedUserData.size() == 0) {
followingLabelTextView.setVisibility(View.GONE);
} else {
followingLabelTextView.setVisibility(View.VISIBLE);
}
userAdapter.setSubscribedUsers(subscribedUserData);
}
}
});
}
}
private void loadUserData(Bundle savedInstanceState) {
if(savedInstanceState == null) {
if(!mFetchUserInfoSuccess) {
new FetchUserInfo(this, Volley.newRequestQueue(this)).queryUserInfo(new FetchUserInfo.FetchUserInfoListener() { new FetchUserInfo(this, Volley.newRequestQueue(this)).queryUserInfo(new FetchUserInfo.FetchUserInfoListener() {
@Override @Override
public void onFetchUserInfoSuccess(String response) { public void onFetchUserInfoSuccess(String response) {
@ -178,41 +224,7 @@ public class MainActivity extends AppCompatActivity {
}, 1); }, 1);
} }
final SubscribedSubredditRecyclerViewAdapter subredditadapter = new SubscribedSubredditRecyclerViewAdapter(this); if(mInsertSuccess) {
subscribedSubredditRecyclerView.setAdapter(subredditadapter);
mSubscribedSubredditViewModel = ViewModelProviders.of(this).get(SubscribedSubredditViewModel.class);
mSubscribedSubredditViewModel.getAllSubscribedSubreddits().observe(this, new Observer<List<SubscribedSubredditData>>() {
@Override
public void onChanged(@Nullable final List<SubscribedSubredditData> subscribedSubredditData) {
if(!mIsInserting) {
if(subscribedSubredditData == null || subscribedSubredditData.size() == 0) {
subscriptionsLabelTextView.setVisibility(View.GONE);
} else {
subscriptionsLabelTextView.setVisibility(View.VISIBLE);
}
subredditadapter.setSubscribedSubreddits(subscribedSubredditData);
}
}
});
final SubscribedUserRecyclerViewAdapter userAdapter = new SubscribedUserRecyclerViewAdapter(this);
subscribedUserRecyclerView.setAdapter(userAdapter);
mSubscribedUserViewModel = ViewModelProviders.of(this).get(SubscribedUserViewModel.class);
mSubscribedUserViewModel.getAllSubscribedUsers().observe(this, new Observer<List<SubscribedUserData>>() {
@Override
public void onChanged(@Nullable final List<SubscribedUserData> subscribedUserData) {
if(!mIsInserting) {
if(subscribedUserData == null || subscribedUserData.size() == 0) {
followingLabelTextView.setVisibility(View.GONE);
} else {
followingLabelTextView.setVisibility(View.VISIBLE);
}
userAdapter.setSubscribedUsers(subscribedUserData);
}
}
});
new FetchSubscribedThing(this, Volley.newRequestQueue(this), new ArrayList<SubscribedSubredditData>(), new FetchSubscribedThing(this, Volley.newRequestQueue(this), new ArrayList<SubscribedSubredditData>(),
new ArrayList<SubscribedUserData>(), new ArrayList<SubredditData>()) new ArrayList<SubscribedUserData>(), new ArrayList<SubredditData>())
.fetchSubscribedSubreddits(new FetchSubscribedThing.FetchSubscribedSubredditsListener() { .fetchSubscribedSubreddits(new FetchSubscribedThing.FetchSubscribedSubredditsListener() {
@ -232,6 +244,7 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
public void insertSuccess() { public void insertSuccess() {
mIsInserting = false; mIsInserting = false;
mInsertSuccess = true;
} }
}).execute(); }).execute();
} }
@ -243,6 +256,7 @@ public class MainActivity extends AppCompatActivity {
}, 1); }, 1);
} }
} }
}
@Override @Override
public void onBackPressed() { public void onBackPressed() {
@ -264,6 +278,8 @@ public class MainActivity extends AppCompatActivity {
outState.putString(profileImageUrlState, mProfileImageUrl); outState.putString(profileImageUrlState, mProfileImageUrl);
outState.putString(bannerImageUrlState, mBannerImageUrl); outState.putString(bannerImageUrlState, mBannerImageUrl);
outState.putString(karmaState, mKarma); outState.putString(karmaState, mKarma);
outState.putBoolean(fetchUserInfoState, mFetchUserInfoSuccess);
outState.putBoolean(insertSubscribedSubredditState, mInsertSuccess);
} }
@Override @Override
@ -273,6 +289,8 @@ public class MainActivity extends AppCompatActivity {
mProfileImageUrl = savedInstanceState.getString(profileImageUrlState); mProfileImageUrl = savedInstanceState.getString(profileImageUrlState);
mBannerImageUrl = savedInstanceState.getString(bannerImageUrlState); mBannerImageUrl = savedInstanceState.getString(bannerImageUrlState);
mKarma = savedInstanceState.getString(karmaState); mKarma = savedInstanceState.getString(karmaState);
mFetchUserInfoSuccess = savedInstanceState.getBoolean(fetchUserInfoState);
mInsertSuccess = savedInstanceState.getBoolean(insertSubscribedSubredditState);
mNameTextView.setText(mName); mNameTextView.setText(mName);
mKarmaTextView.setText(mKarma); mKarmaTextView.setText(mKarma);
if(!mProfileImageUrl.equals("")) { if(!mProfileImageUrl.equals("")) {

View File

@ -69,7 +69,7 @@ class ParseComment {
for (int i = 0; i < actualCommentLength; i++) { for (int i = 0; i < actualCommentLength; i++) {
JSONObject data = allComments.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY); JSONObject data = allComments.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
String id = data.getString(JSONUtils.ID_KEY); String fullName = data.getString(JSONUtils.LINK_ID);
String author = data.getString(JSONUtils.AUTHOR_KEY); String author = data.getString(JSONUtils.AUTHOR_KEY);
boolean isSubmitter = data.getBoolean(JSONUtils.IS_SUBMITTER_KEY); boolean isSubmitter = data.getBoolean(JSONUtils.IS_SUBMITTER_KEY);
String commentContent = data.getString(JSONUtils.BODY_KEY); String commentContent = data.getString(JSONUtils.BODY_KEY);
@ -87,7 +87,7 @@ class ParseComment {
boolean collapsed = data.getBoolean(JSONUtils.COLLAPSED_KEY); boolean collapsed = data.getBoolean(JSONUtils.COLLAPSED_KEY);
boolean hasReply = !(data.get(JSONUtils.REPLIES_KEY) instanceof String); boolean hasReply = !(data.get(JSONUtils.REPLIES_KEY) instanceof String);
newcommentData.add(new CommentData(id, author, formattedSubmitTime, commentContent, score, isSubmitter, permalink, depth, collapsed, hasReply, scoreHidden)); newcommentData.add(new CommentData(fullName, author, formattedSubmitTime, commentContent, score, isSubmitter, permalink, depth, collapsed, hasReply, scoreHidden));
} }
} catch (JSONException e) { } catch (JSONException e) {
parseFailed = true; parseFailed = true;

View File

@ -53,6 +53,7 @@ public class ViewPostDetailActivity extends AppCompatActivity {
private ImageView mNoCommentImageView; private ImageView mNoCommentImageView;
private RequestQueue mVoteThingQueue; private RequestQueue mVoteThingQueue;
private RequestQueue mAcquireAccessTokenRequestQueue;
private RequestQueue mCommentQueue; private RequestQueue mCommentQueue;
@Override @Override
@ -107,6 +108,7 @@ public class ViewPostDetailActivity extends AppCompatActivity {
mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
mVoteThingQueue = Volley.newRequestQueue(this); mVoteThingQueue = Volley.newRequestQueue(this);
mAcquireAccessTokenRequestQueue = Volley.newRequestQueue(this);
mCommentQueue = Volley.newRequestQueue(this); mCommentQueue = Volley.newRequestQueue(this);
subredditTextView.setText(mPostData.getSubredditName()); subredditTextView.setText(mPostData.getSubredditName());
@ -296,7 +298,8 @@ public class ViewPostDetailActivity extends AppCompatActivity {
mCommentProgressbar.setVisibility(View.GONE); mCommentProgressbar.setVisibility(View.GONE);
mMoreCommentCount = moreCommentCount; mMoreCommentCount = moreCommentCount;
if(commentData.size() > 0) { if(commentData.size() > 0) {
CommentRecyclerViewAdapter adapter = new CommentRecyclerViewAdapter(ViewPostDetailActivity.this, commentData, mVoteThingQueue); CommentRecyclerViewAdapter adapter = new CommentRecyclerViewAdapter(
ViewPostDetailActivity.this, commentData, mVoteThingQueue, mAcquireAccessTokenRequestQueue);
mRecyclerView.setAdapter(adapter); mRecyclerView.setAdapter(adapter);
mCommentCardView.setVisibility(View.VISIBLE); mCommentCardView.setVisibility(View.VISIBLE);
} else { } else {

View File

@ -68,7 +68,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/following" android:text="@string/following"
android:layout_margin="16dp"/> android:layout_margin="16dp"
android:visibility="gone"/>
<android.support.v7.widget.RecyclerView <android.support.v7.widget.RecyclerView
android:id="@+id/subscribed_user_recycler_view_main_activity" android:id="@+id/subscribed_user_recycler_view_main_activity"
@ -80,7 +81,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/subscriptions" android:text="@string/subscriptions"
android:layout_margin="16dp"/> android:layout_margin="16dp"
android:visibility="gone"/>
<android.support.v7.widget.RecyclerView <android.support.v7.widget.RecyclerView
android:id="@+id/subscribed_subreddit_recycler_view_main_activity" android:id="@+id/subscribed_subreddit_recycler_view_main_activity"

View File

@ -7,7 +7,7 @@ buildscript {
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.1.3' classpath 'com.android.tools.build:gradle:3.1.4'
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong