mirror of
				https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
				synced 2025-10-31 00:48:09 +01:00 
			
		
		
		
	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:
		
							
								
								
									
										
											BIN
										
									
								
								.idea/caches/build_file_checksums.ser
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.idea/caches/build_file_checksums.ser
									
									
									
										generated
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -132,11 +132,11 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View | ||||
|                 switch (voteType) { | ||||
|                     case 1: | ||||
|                         //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; | ||||
|                     case -1: | ||||
|                         //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; | ||||
|                 } | ||||
|  | ||||
| @@ -295,14 +295,14 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View | ||||
|                         ((DataViewHolder) holder).typeTextView.setText("TEXT"); | ||||
|                 } | ||||
|  | ||||
|                 ((DataViewHolder) holder).plusButton.setOnClickListener(new View.OnClickListener() { | ||||
|                 ((DataViewHolder) holder).upvoteButton.setOnClickListener(new View.OnClickListener() { | ||||
|                     @Override | ||||
|                     public void onClick(View view) { | ||||
|                         final boolean isDownvotedBefore = ((DataViewHolder) holder).minusButton.getColorFilter() != null; | ||||
|                         ((DataViewHolder) holder).minusButton.clearColorFilter(); | ||||
|                         final boolean isDownvotedBefore = ((DataViewHolder) holder).downvoteButton.getColorFilter() != null; | ||||
|                         ((DataViewHolder) holder).downvoteButton.clearColorFilter(); | ||||
|  | ||||
|                         if (((DataViewHolder) holder).plusButton.getColorFilter() == null) { | ||||
|                             ((DataViewHolder) holder).plusButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN); | ||||
|                         if (((DataViewHolder) holder).upvoteButton.getColorFilter() == null) { | ||||
|                             ((DataViewHolder) holder).upvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN); | ||||
|                             if(isDownvotedBefore) { | ||||
|                                 ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() + 2)); | ||||
|                             } else { | ||||
| @@ -323,14 +323,14 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View | ||||
|                                 @Override | ||||
|                                 public void onVoteThingFail(int position) { | ||||
|                                     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).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); | ||||
|                         } else { | ||||
|                             //Upvoted before | ||||
|                             ((DataViewHolder) holder).plusButton.clearColorFilter(); | ||||
|                             ((DataViewHolder) holder).upvoteButton.clearColorFilter(); | ||||
|                             ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() - 1)); | ||||
|  | ||||
|                             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) { | ||||
|                                     Toast.makeText(mContext, "Cannot unvote this post", Toast.LENGTH_SHORT).show(); | ||||
|                                     ((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); | ||||
|                                 } | ||||
|                             }, 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 | ||||
|                     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(); | ||||
|                         if (((DataViewHolder) holder).minusButton.getColorFilter() == null) { | ||||
|                             ((DataViewHolder) holder).minusButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN); | ||||
|                         ((DataViewHolder) holder).upvoteButton.clearColorFilter(); | ||||
|                         if (((DataViewHolder) holder).downvoteButton.getColorFilter() == null) { | ||||
|                             ((DataViewHolder) holder).downvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN); | ||||
|                             if (isUpvotedBefore) { | ||||
|                                 ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() - 2)); | ||||
|                             } else { | ||||
| @@ -380,14 +380,14 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View | ||||
|                                 @Override | ||||
|                                 public void onVoteThingFail(int position) { | ||||
|                                     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).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); | ||||
|                         } else { | ||||
|                             //Down voted before | ||||
|                             ((DataViewHolder) holder).minusButton.clearColorFilter(); | ||||
|                             ((DataViewHolder) holder).downvoteButton.clearColorFilter(); | ||||
|                             ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() + 1)); | ||||
|  | ||||
|                             new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() { | ||||
| @@ -400,7 +400,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View | ||||
|                                 @Override | ||||
|                                 public void onVoteThingFail(int position) { | ||||
|                                     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())); | ||||
|                                     mBestPostData.get(position).setScore(mBestPostData.get(position).getScore()); | ||||
|                                 } | ||||
| @@ -475,9 +475,9 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View | ||||
|         private ProgressBar progressBar; | ||||
|         private ImageView imageView; | ||||
|         private ImageView noPreviewLinkImageView; | ||||
|         private ImageView plusButton; | ||||
|         private ImageView upvoteButton; | ||||
|         private TextView scoreTextView; | ||||
|         private ImageView minusButton; | ||||
|         private ImageView downvoteButton; | ||||
|         private ImageView shareButton; | ||||
|  | ||||
|         DataViewHolder(CardView itemView) { | ||||
| @@ -494,9 +494,9 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View | ||||
|             imageView = itemView.findViewById(R.id.image_view_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); | ||||
|             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); | ||||
|         } | ||||
|     } | ||||
| @@ -523,8 +523,8 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View | ||||
|             ((DataViewHolder) holder).progressBar.setVisibility(View.GONE); | ||||
|             ((DataViewHolder) holder).imageView.setVisibility(View.GONE); | ||||
|             ((DataViewHolder) holder).noPreviewLinkImageView.setVisibility(View.GONE); | ||||
|             ((DataViewHolder) holder).plusButton.clearColorFilter(); | ||||
|             ((DataViewHolder) holder).minusButton.clearColorFilter(); | ||||
|             ((DataViewHolder) holder).upvoteButton.clearColorFilter(); | ||||
|             ((DataViewHolder) holder).downvoteButton.clearColorFilter(); | ||||
|         } else if(holder instanceof LoadingViewHolder) { | ||||
|             if(isLoadingMorePostSuccess) { | ||||
|                 ((LoadingViewHolder) holder).relativeLayout.setVisibility(View.GONE); | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| package ml.docilealligator.infinityforreddit; | ||||
|  | ||||
| class CommentData { | ||||
|     private String id; | ||||
|     private String fullName; | ||||
|     private String author; | ||||
|     private String commentTime; | ||||
|     private String commentContent; | ||||
| @@ -13,10 +13,10 @@ class CommentData { | ||||
|     private boolean hasReply; | ||||
|     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 scoreHidden) { | ||||
|         this.id = id; | ||||
|         this.fullName = fullName; | ||||
|         this.author = author; | ||||
|         this.commentTime = commentTime; | ||||
|         this.commentContent = commentContent; | ||||
| @@ -30,8 +30,8 @@ class CommentData { | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public String getId() { | ||||
|         return id; | ||||
|     public String getFullName() { | ||||
|         return fullName; | ||||
|     } | ||||
|  | ||||
|     public String getAuthor() { | ||||
|   | ||||
| @@ -1,13 +1,16 @@ | ||||
| package ml.docilealligator.infinityforreddit; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.graphics.ColorFilter; | ||||
| import android.support.annotation.NonNull; | ||||
| import android.support.v4.content.ContextCompat; | ||||
| import android.support.v7.widget.RecyclerView; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.widget.ImageView; | ||||
| import android.widget.TextView; | ||||
| import android.widget.Toast; | ||||
|  | ||||
| import com.android.volley.RequestQueue; | ||||
|  | ||||
| @@ -17,12 +20,14 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH | ||||
|     private Context mContext; | ||||
|     private ArrayList<CommentData> mCommentData; | ||||
|     private RequestQueue mVoteThingRequestQueue; | ||||
|     private RequestQueue mAcquireAccessTokenRequestQueue; | ||||
|  | ||||
|     CommentRecyclerViewAdapter(Context context, ArrayList<CommentData> commentData, | ||||
|                                RequestQueue voteThingRequestQueue) { | ||||
|                                RequestQueue voteThingRequestQueue, RequestQueue acquireAccessTokenRequestQueue) { | ||||
|         mContext = context; | ||||
|         mCommentData = commentData; | ||||
|         mVoteThingRequestQueue = voteThingRequestQueue; | ||||
|         mAcquireAccessTokenRequestQueue = acquireAccessTokenRequestQueue; | ||||
|     } | ||||
|  | ||||
|     @NonNull | ||||
| @@ -32,7 +37,7 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH | ||||
|     } | ||||
|  | ||||
|     @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).commentTimeTextView.setText(mCommentData.get(position).getCommentTime()); | ||||
|         ((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() { | ||||
|             @Override | ||||
|             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() { | ||||
|             @Override | ||||
|             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); | ||||
|                 } | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|   | ||||
| @@ -63,4 +63,5 @@ class JSONUtils { | ||||
|     static final String PUBLIC_DESCRIPTION = "public_description"; | ||||
|     static final String ACTIVE_USER_COUNT = "active_user_count"; | ||||
|     static final String DISPLAY_NAME_PREFIXED = "display_name_prefixed"; | ||||
|     static final String LINK_ID = "link_id"; | ||||
| } | ||||
|   | ||||
| @@ -1,7 +1,5 @@ | ||||
| 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.ViewModelProviders; | ||||
| import android.content.Context; | ||||
| @@ -10,6 +8,8 @@ import android.content.SharedPreferences; | ||||
| import android.os.AsyncTask; | ||||
| import android.os.Bundle; | ||||
| 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.widget.DrawerLayout; | ||||
| import android.support.v7.app.ActionBarDrawerToggle; | ||||
| @@ -37,6 +37,8 @@ public class MainActivity extends AppCompatActivity { | ||||
|     private String profileImageUrlState = "PIUS"; | ||||
|     private String bannerImageUrlState = "BIUS"; | ||||
|     private String karmaState = "KS"; | ||||
|     private String fetchUserInfoState = "FUIS"; | ||||
|     private String insertSubscribedSubredditState = "ISSS"; | ||||
|  | ||||
|     private TextView mNameTextView; | ||||
|     private TextView mKarmaTextView; | ||||
| @@ -52,12 +54,13 @@ public class MainActivity extends AppCompatActivity { | ||||
|     private String mKarma; | ||||
|     private boolean mFetchUserInfoSuccess; | ||||
|     private boolean mIsInserting; | ||||
|     private boolean mInsertSuccess; | ||||
|  | ||||
|     private SubscribedSubredditViewModel mSubscribedSubredditViewModel; | ||||
|     private SubscribedUserViewModel mSubscribedUserViewModel; | ||||
|  | ||||
|     @Override | ||||
|     protected void onCreate(Bundle savedInstanceState) { | ||||
|     protected void onCreate(final Bundle savedInstanceState) { | ||||
|         super.onCreate(savedInstanceState); | ||||
|         setContentView(R.layout.activity_main); | ||||
|         Toolbar toolbar = findViewById(R.id.toolbar); | ||||
| @@ -95,11 +98,15 @@ public class MainActivity extends AppCompatActivity { | ||||
|                 new AcquireAccessToken(this).refreshAccessToken(Volley.newRequestQueue(this), | ||||
|                         new AcquireAccessToken.AcquireAccessTokenListener() { | ||||
|                             @Override | ||||
|                             public void onAcquireAccessTokenSuccess() {} | ||||
|                             public void onAcquireAccessTokenSuccess() { | ||||
|                                 loadUserData(savedInstanceState); | ||||
|                             } | ||||
|  | ||||
|                             @Override | ||||
|                             public void onAcquireAccessTokenFail() {} | ||||
|                         }); | ||||
|             } else { | ||||
|                 loadUserData(savedInstanceState); | ||||
|             } | ||||
|  | ||||
|             View header = findViewById(R.id.nav_header_main_activity); | ||||
| @@ -133,7 +140,46 @@ public class MainActivity extends AppCompatActivity { | ||||
|                 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() { | ||||
|                     @Override | ||||
|                     public void onFetchUserInfoSuccess(String response) { | ||||
| @@ -178,69 +224,37 @@ public class MainActivity extends AppCompatActivity { | ||||
|                 }, 1); | ||||
|             } | ||||
|  | ||||
|             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); | ||||
|                         } | ||||
|             if(mInsertSuccess) { | ||||
|                 new FetchSubscribedThing(this, Volley.newRequestQueue(this), new ArrayList<SubscribedSubredditData>(), | ||||
|                         new ArrayList<SubscribedUserData>(), new ArrayList<SubredditData>()) | ||||
|                         .fetchSubscribedSubreddits(new FetchSubscribedThing.FetchSubscribedSubredditsListener() { | ||||
|                             @Override | ||||
|                             public void onFetchSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData, | ||||
|                                                                            ArrayList<SubscribedUserData> subscribedUserData, | ||||
|                                                                            ArrayList<SubredditData> subredditData) { | ||||
|                                 mIsInserting = true; | ||||
|                                 new InsertSubscribedThingsAsyncTask( | ||||
|                                         SubscribedSubredditRoomDatabase.getDatabase(MainActivity.this), | ||||
|                                         SubscribedUserRoomDatabase.getDatabase(MainActivity.this), | ||||
|                                         SubredditRoomDatabase.getDatabase(MainActivity.this), | ||||
|                                         subscribedSubredditData, | ||||
|                                         subscribedUserData, | ||||
|                                         subredditData, | ||||
|                                         new InsertSubscribedThingsAsyncTask.InsertSubscribedThingListener() { | ||||
|                                             @Override | ||||
|                                             public void insertSuccess() { | ||||
|                                                 mIsInserting = false; | ||||
|                                                 mInsertSuccess = true; | ||||
|                                             } | ||||
|                                         }).execute(); | ||||
|                             } | ||||
|  | ||||
|                         subredditadapter.setSubscribedSubreddits(subscribedSubredditData); | ||||
|                     } | ||||
|                 } | ||||
|             }); | ||||
|                             @Override | ||||
|                             public void onFetchSubscribedSubredditsFail() { | ||||
|  | ||||
|             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 ArrayList<SubscribedUserData>(), new ArrayList<SubredditData>()) | ||||
|                     .fetchSubscribedSubreddits(new FetchSubscribedThing.FetchSubscribedSubredditsListener() { | ||||
|                         @Override | ||||
|                         public void onFetchSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData, | ||||
|                                                                        ArrayList<SubscribedUserData> subscribedUserData, | ||||
|                                                                        ArrayList<SubredditData> subredditData) { | ||||
|                             mIsInserting = true; | ||||
|                             new InsertSubscribedThingsAsyncTask( | ||||
|                                     SubscribedSubredditRoomDatabase.getDatabase(MainActivity.this), | ||||
|                                     SubscribedUserRoomDatabase.getDatabase(MainActivity.this), | ||||
|                                     SubredditRoomDatabase.getDatabase(MainActivity.this), | ||||
|                                     subscribedSubredditData, | ||||
|                                     subscribedUserData, | ||||
|                                     subredditData, | ||||
|                                     new InsertSubscribedThingsAsyncTask.InsertSubscribedThingListener() { | ||||
|                                         @Override | ||||
|                                         public void insertSuccess() { | ||||
|                                             mIsInserting = false; | ||||
|                                         } | ||||
|                                     }).execute(); | ||||
|                         } | ||||
|  | ||||
|                         @Override | ||||
|                         public void onFetchSubscribedSubredditsFail() { | ||||
|  | ||||
|                         } | ||||
|                     }, 1); | ||||
|                             } | ||||
|                         }, 1); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -264,6 +278,8 @@ public class MainActivity extends AppCompatActivity { | ||||
|         outState.putString(profileImageUrlState, mProfileImageUrl); | ||||
|         outState.putString(bannerImageUrlState, mBannerImageUrl); | ||||
|         outState.putString(karmaState, mKarma); | ||||
|         outState.putBoolean(fetchUserInfoState, mFetchUserInfoSuccess); | ||||
|         outState.putBoolean(insertSubscribedSubredditState, mInsertSuccess); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -273,6 +289,8 @@ public class MainActivity extends AppCompatActivity { | ||||
|         mProfileImageUrl = savedInstanceState.getString(profileImageUrlState); | ||||
|         mBannerImageUrl = savedInstanceState.getString(bannerImageUrlState); | ||||
|         mKarma = savedInstanceState.getString(karmaState); | ||||
|         mFetchUserInfoSuccess = savedInstanceState.getBoolean(fetchUserInfoState); | ||||
|         mInsertSuccess = savedInstanceState.getBoolean(insertSubscribedSubredditState); | ||||
|         mNameTextView.setText(mName); | ||||
|         mKarmaTextView.setText(mKarma); | ||||
|         if(!mProfileImageUrl.equals("")) { | ||||
|   | ||||
| @@ -69,7 +69,7 @@ class ParseComment { | ||||
|  | ||||
|                 for (int i = 0; i < actualCommentLength; i++) { | ||||
|                     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); | ||||
|                     boolean isSubmitter = data.getBoolean(JSONUtils.IS_SUBMITTER_KEY); | ||||
|                     String commentContent = data.getString(JSONUtils.BODY_KEY); | ||||
| @@ -87,7 +87,7 @@ class ParseComment { | ||||
|                     boolean collapsed = data.getBoolean(JSONUtils.COLLAPSED_KEY); | ||||
|                     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) { | ||||
|                 parseFailed = true; | ||||
|   | ||||
| @@ -53,6 +53,7 @@ public class ViewPostDetailActivity extends AppCompatActivity { | ||||
|     private ImageView mNoCommentImageView; | ||||
|  | ||||
|     private RequestQueue mVoteThingQueue; | ||||
|     private RequestQueue mAcquireAccessTokenRequestQueue; | ||||
|     private RequestQueue mCommentQueue; | ||||
|  | ||||
|     @Override | ||||
| @@ -107,6 +108,7 @@ public class ViewPostDetailActivity extends AppCompatActivity { | ||||
|         mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); | ||||
|         mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); | ||||
|         mVoteThingQueue = Volley.newRequestQueue(this); | ||||
|         mAcquireAccessTokenRequestQueue = Volley.newRequestQueue(this); | ||||
|         mCommentQueue = Volley.newRequestQueue(this); | ||||
|  | ||||
|         subredditTextView.setText(mPostData.getSubredditName()); | ||||
| @@ -296,7 +298,8 @@ public class ViewPostDetailActivity extends AppCompatActivity { | ||||
|                         mCommentProgressbar.setVisibility(View.GONE); | ||||
|                         mMoreCommentCount = moreCommentCount; | ||||
|                         if(commentData.size() > 0) { | ||||
|                             CommentRecyclerViewAdapter adapter = new CommentRecyclerViewAdapter(ViewPostDetailActivity.this, commentData, mVoteThingQueue); | ||||
|                             CommentRecyclerViewAdapter adapter = new CommentRecyclerViewAdapter( | ||||
|                                     ViewPostDetailActivity.this, commentData, mVoteThingQueue, mAcquireAccessTokenRequestQueue); | ||||
|                             mRecyclerView.setAdapter(adapter); | ||||
|                             mCommentCardView.setVisibility(View.VISIBLE); | ||||
|                         } else { | ||||
|   | ||||
| @@ -68,7 +68,8 @@ | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:text="@string/following" | ||||
|                         android:layout_margin="16dp"/> | ||||
|                         android:layout_margin="16dp" | ||||
|                         android:visibility="gone"/> | ||||
|  | ||||
|                     <android.support.v7.widget.RecyclerView | ||||
|                         android:id="@+id/subscribed_user_recycler_view_main_activity" | ||||
| @@ -80,7 +81,8 @@ | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:text="@string/subscriptions" | ||||
|                         android:layout_margin="16dp"/> | ||||
|                         android:layout_margin="16dp" | ||||
|                         android:visibility="gone"/> | ||||
|  | ||||
|                     <android.support.v7.widget.RecyclerView | ||||
|                         android:id="@+id/subscribed_subreddit_recycler_view_main_activity" | ||||
|   | ||||
| @@ -7,7 +7,7 @@ buildscript { | ||||
|         jcenter() | ||||
|     } | ||||
|     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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user