mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-01-11 18:57:11 +01:00
Display subreddit icons in best posts, eventually. Rename some methods.
This commit is contained in:
parent
b0e2e273a7
commit
e44a172db0
@ -1,7 +1,7 @@
|
||||
package ml.docilealligator.infinityforreddit;
|
||||
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
@ -158,7 +158,6 @@ public class BestPostFragment extends Fragment {
|
||||
};
|
||||
mPaginationSynchronizer.setPaginationRequestQueueSynchronizer(paginationRequestQueueSynchronizer);
|
||||
|
||||
|
||||
return rootView;
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.customtabs.CustomTabsIntent;
|
||||
@ -39,12 +40,13 @@ import de.hdodenhof.circleimageview.CircleImageView;
|
||||
*/
|
||||
|
||||
class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
private ArrayList<BestPostData> bestPostData;
|
||||
private ArrayList<BestPostData> mBestPostData;
|
||||
private Context mContext;
|
||||
private PaginationSynchronizer mPaginationSynchronizer;
|
||||
private RequestQueue mVoteThingRequestQueue;
|
||||
private RequestQueue mAcquireAccessTokenRequestQueue;
|
||||
private RequestManager glide;
|
||||
private SubredditDao subredditDao;
|
||||
private boolean isLoadingMorePostSuccess;
|
||||
private boolean canStartActivity;
|
||||
|
||||
@ -56,13 +58,14 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
RequestQueue voteThingRequestQueue, RequestQueue acquireAccessTokenRequestQueue) {
|
||||
if(context != null) {
|
||||
mContext = context;
|
||||
this.bestPostData = bestPostData;
|
||||
mBestPostData = bestPostData;
|
||||
mPaginationSynchronizer = paginationSynchronizer;
|
||||
mVoteThingRequestQueue = voteThingRequestQueue;
|
||||
mAcquireAccessTokenRequestQueue = acquireAccessTokenRequestQueue;
|
||||
isLoadingMorePostSuccess = true;
|
||||
canStartActivity = true;
|
||||
glide = Glide.with(mContext);
|
||||
subredditDao = SubredditRoomDatabase.getDatabase(mContext).subredditDao();
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,16 +88,19 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
|
||||
if(holder instanceof DataViewHolder) {
|
||||
if(bestPostData.get(position) == null) {
|
||||
if(mBestPostData.get(position) == null) {
|
||||
Log.i("is null", Integer.toString(position));
|
||||
} else {
|
||||
final String id = bestPostData.get(position).getFullName();
|
||||
final String subredditName = bestPostData.get(position).getSubredditName();
|
||||
final String postTime = bestPostData.get(position).getPostTime();
|
||||
final String title = bestPostData.get(position).getTitle();
|
||||
final String permalink = bestPostData.get(position).getPermalink();
|
||||
int voteType = bestPostData.get(position).getVoteType();
|
||||
boolean nsfw = bestPostData.get(position).getNSFW();
|
||||
final String id = mBestPostData.get(position).getFullName();
|
||||
final String subredditName = mBestPostData.get(position).getSubredditName();
|
||||
final String postTime = mBestPostData.get(position).getPostTime();
|
||||
final String title = mBestPostData.get(position).getTitle();
|
||||
final String permalink = mBestPostData.get(position).getPermalink();
|
||||
int voteType = mBestPostData.get(position).getVoteType();
|
||||
boolean nsfw = mBestPostData.get(position).getNSFW();
|
||||
|
||||
new LoadSubredditIconAsyncTask(mContext, ((DataViewHolder) holder).subredditImageView,
|
||||
subredditDao, subredditName).execute();
|
||||
|
||||
((DataViewHolder) holder).cardView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
@ -103,7 +109,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
canStartActivity = false;
|
||||
Intent intent = new Intent(mContext, ViewPostDetailActivity.class);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_TITLE, title);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, bestPostData.get(position));
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, mBestPostData.get(position));
|
||||
mContext.startActivity(intent);
|
||||
}
|
||||
}
|
||||
@ -112,7 +118,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
((DataViewHolder) holder).subredditNameTextView.setText(subredditName);
|
||||
((DataViewHolder) holder).postTimeTextView.setText(postTime);
|
||||
((DataViewHolder) holder).titleTextView.setText(title);
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(bestPostData.get(position).getScore()));
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore()));
|
||||
|
||||
if(nsfw) {
|
||||
((DataViewHolder) holder).nsfwTextView.setVisibility(View.VISIBLE);
|
||||
@ -129,17 +135,17 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
break;
|
||||
}
|
||||
|
||||
if(bestPostData.get(position).getPostType() != BestPostData.TEXT_TYPE && bestPostData.get(position).getPostType() != BestPostData.NO_PREVIEW_LINK_TYPE) {
|
||||
if(mBestPostData.get(position).getPostType() != BestPostData.TEXT_TYPE && mBestPostData.get(position).getPostType() != BestPostData.NO_PREVIEW_LINK_TYPE) {
|
||||
((DataViewHolder) holder).relativeLayout.setVisibility(View.VISIBLE);
|
||||
((DataViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||
((DataViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
switch (bestPostData.get(position).getPostType()) {
|
||||
switch (mBestPostData.get(position).getPostType()) {
|
||||
case BestPostData.IMAGE_TYPE:
|
||||
((DataViewHolder) holder).typeTextView.setText("IMAGE");
|
||||
final String previewImageUrl = bestPostData.get(position).getPreviewUrl();
|
||||
final String imageUrl = bestPostData.get(position).getUrl();
|
||||
final String previewImageUrl = mBestPostData.get(position).getPreviewUrl();
|
||||
final String imageUrl = mBestPostData.get(position).getUrl();
|
||||
glide.load(previewImageUrl).listener(new RequestListener<Drawable>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
|
||||
@ -166,7 +172,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
break;
|
||||
case BestPostData.LINK_TYPE:
|
||||
((DataViewHolder) holder).typeTextView.setText("LINK");
|
||||
String linkPreviewUrl = bestPostData.get(position).getPreviewUrl();
|
||||
String linkPreviewUrl = mBestPostData.get(position).getPreviewUrl();
|
||||
glide.load(linkPreviewUrl).listener(new RequestListener<Drawable>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
|
||||
@ -179,7 +185,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
return false;
|
||||
}
|
||||
}).into(((DataViewHolder) holder).imageView);
|
||||
final String linkUrl = bestPostData.get(position).getUrl();
|
||||
final String linkUrl = mBestPostData.get(position).getUrl();
|
||||
((DataViewHolder) holder).imageView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
@ -194,7 +200,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
break;
|
||||
case BestPostData.GIF_VIDEO_TYPE:
|
||||
((DataViewHolder) holder).typeTextView.setText("GIF");
|
||||
String gifVideoPreviewUrl = bestPostData.get(position).getPreviewUrl();
|
||||
String gifVideoPreviewUrl = mBestPostData.get(position).getPreviewUrl();
|
||||
glide.load(gifVideoPreviewUrl).listener(new RequestListener<Drawable>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
|
||||
@ -208,7 +214,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
}
|
||||
}).into(((DataViewHolder) holder).imageView);
|
||||
|
||||
String gifVideoUrl = bestPostData.get(position).getVideoUrl();
|
||||
String gifVideoUrl = mBestPostData.get(position).getVideoUrl();
|
||||
final Uri gifVideoUri = Uri.parse(gifVideoUrl);
|
||||
|
||||
((DataViewHolder) holder).imageView.setOnClickListener(new View.OnClickListener() {
|
||||
@ -217,10 +223,10 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
Intent intent = new Intent(mContext, ViewVideoActivity.class);
|
||||
intent.setData(gifVideoUri);
|
||||
intent.putExtra(ViewVideoActivity.TITLE_KEY, title);
|
||||
intent.putExtra(ViewVideoActivity.IS_DASH_VIDEO_KEY, bestPostData.get(position).isDashVideo());
|
||||
intent.putExtra(ViewVideoActivity.IS_DOWNLOADABLE_KEY, bestPostData.get(position).isDownloadableGifOrVideo());
|
||||
if(bestPostData.get(position).isDownloadableGifOrVideo()) {
|
||||
intent.putExtra(ViewVideoActivity.DOWNLOAD_URL_KEY, bestPostData.get(position).getGifOrVideoDownloadUrl());
|
||||
intent.putExtra(ViewVideoActivity.IS_DASH_VIDEO_KEY, mBestPostData.get(position).isDashVideo());
|
||||
intent.putExtra(ViewVideoActivity.IS_DOWNLOADABLE_KEY, mBestPostData.get(position).isDownloadableGifOrVideo());
|
||||
if(mBestPostData.get(position).isDownloadableGifOrVideo()) {
|
||||
intent.putExtra(ViewVideoActivity.DOWNLOAD_URL_KEY, mBestPostData.get(position).getGifOrVideoDownloadUrl());
|
||||
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, subredditName);
|
||||
intent.putExtra(ViewVideoActivity.ID_KEY, id);
|
||||
}
|
||||
@ -230,7 +236,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
break;
|
||||
case BestPostData.VIDEO_TYPE:
|
||||
((DataViewHolder) holder).typeTextView.setText("VIDEO");
|
||||
String videoPreviewUrl = bestPostData.get(position).getPreviewUrl();
|
||||
String videoPreviewUrl = mBestPostData.get(position).getPreviewUrl();
|
||||
glide.load(videoPreviewUrl).listener(new RequestListener<Drawable>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
|
||||
@ -244,7 +250,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
}
|
||||
}).into(((DataViewHolder) holder).imageView);
|
||||
|
||||
String videoUrl = bestPostData.get(position).getVideoUrl();
|
||||
String videoUrl = mBestPostData.get(position).getVideoUrl();
|
||||
final Uri videoUri = Uri.parse(videoUrl);
|
||||
|
||||
((DataViewHolder) holder).imageView.setOnClickListener(new View.OnClickListener() {
|
||||
@ -253,10 +259,10 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
Intent intent = new Intent(mContext, ViewVideoActivity.class);
|
||||
intent.setData(videoUri);
|
||||
intent.putExtra(ViewVideoActivity.TITLE_KEY, title);
|
||||
intent.putExtra(ViewVideoActivity.IS_DASH_VIDEO_KEY, bestPostData.get(position).isDashVideo());
|
||||
intent.putExtra(ViewVideoActivity.IS_DOWNLOADABLE_KEY, bestPostData.get(position).isDownloadableGifOrVideo());
|
||||
if(bestPostData.get(position).isDownloadableGifOrVideo()) {
|
||||
intent.putExtra(ViewVideoActivity.DOWNLOAD_URL_KEY, bestPostData.get(position).getGifOrVideoDownloadUrl());
|
||||
intent.putExtra(ViewVideoActivity.IS_DASH_VIDEO_KEY, mBestPostData.get(position).isDashVideo());
|
||||
intent.putExtra(ViewVideoActivity.IS_DOWNLOADABLE_KEY, mBestPostData.get(position).isDownloadableGifOrVideo());
|
||||
if(mBestPostData.get(position).isDownloadableGifOrVideo()) {
|
||||
intent.putExtra(ViewVideoActivity.DOWNLOAD_URL_KEY, mBestPostData.get(position).getGifOrVideoDownloadUrl());
|
||||
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, subredditName);
|
||||
intent.putExtra(ViewVideoActivity.ID_KEY, id);
|
||||
}
|
||||
@ -266,7 +272,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
break;
|
||||
case BestPostData.NO_PREVIEW_LINK_TYPE:
|
||||
((DataViewHolder) holder).typeTextView.setText("LINK");
|
||||
final String noPreviewLinkUrl = bestPostData.get(position).getUrl();
|
||||
final String noPreviewLinkUrl = mBestPostData.get(position).getUrl();
|
||||
((DataViewHolder) holder).noPreviewLinkImageView.setVisibility(View.VISIBLE);
|
||||
((DataViewHolder) holder).noPreviewLinkImageView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
@ -293,19 +299,19 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
if (((DataViewHolder) holder).plusButton.getColorFilter() == null) {
|
||||
((DataViewHolder) holder).plusButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
if(isDownvotedBefore) {
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(bestPostData.get(position).getScore() + 2));
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() + 2));
|
||||
} else {
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(bestPostData.get(position).getScore() + 1));
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() + 1));
|
||||
}
|
||||
|
||||
new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position) {
|
||||
bestPostData.get(position).setVoteType(1);
|
||||
mBestPostData.get(position).setVoteType(1);
|
||||
if(isDownvotedBefore) {
|
||||
bestPostData.get(position).setScore(bestPostData.get(position).getScore() + 2);
|
||||
mBestPostData.get(position).setScore(mBestPostData.get(position).getScore() + 2);
|
||||
} else {
|
||||
bestPostData.get(position).setScore(bestPostData.get(position).getScore() + 1);
|
||||
mBestPostData.get(position).setScore(mBestPostData.get(position).getScore() + 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -313,28 +319,28 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
public void onVoteThingFail(int position) {
|
||||
Toast.makeText(mContext, "Cannot upvote this post", Toast.LENGTH_SHORT).show();
|
||||
((DataViewHolder) holder).plusButton.clearColorFilter();
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(bestPostData.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);
|
||||
}
|
||||
}, id, RedditUtils.DIR_UPVOTE, ((DataViewHolder) holder).getAdapterPosition(), 1);
|
||||
} else {
|
||||
//Upvoted before
|
||||
((DataViewHolder) holder).plusButton.clearColorFilter();
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(bestPostData.get(position).getScore() - 1));
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() - 1));
|
||||
|
||||
new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position) {
|
||||
bestPostData.get(position).setVoteType(0);
|
||||
bestPostData.get(position).setScore(bestPostData.get(position).getScore() - 1);
|
||||
mBestPostData.get(position).setVoteType(0);
|
||||
mBestPostData.get(position).setScore(mBestPostData.get(position).getScore() - 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVoteThingFail(int position) {
|
||||
Toast.makeText(mContext, "Cannot unvote this post", Toast.LENGTH_SHORT).show();
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(bestPostData.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);
|
||||
bestPostData.get(position).setScore(bestPostData.get(position).getScore() + 1);
|
||||
mBestPostData.get(position).setScore(mBestPostData.get(position).getScore() + 1);
|
||||
}
|
||||
}, id, RedditUtils.DIR_UNVOTE, ((DataViewHolder) holder).getAdapterPosition(), 1);
|
||||
}
|
||||
@ -350,19 +356,19 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
if (((DataViewHolder) holder).minusButton.getColorFilter() == null) {
|
||||
((DataViewHolder) holder).minusButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
if (isUpvotedBefore) {
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(bestPostData.get(position).getScore() - 2));
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() - 2));
|
||||
} else {
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(bestPostData.get(position).getScore() - 1));
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() - 1));
|
||||
}
|
||||
|
||||
new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position) {
|
||||
bestPostData.get(position).setVoteType(-1);
|
||||
mBestPostData.get(position).setVoteType(-1);
|
||||
if(isUpvotedBefore) {
|
||||
bestPostData.get(position).setScore(bestPostData.get(position).getScore() - 2);
|
||||
mBestPostData.get(position).setScore(mBestPostData.get(position).getScore() - 2);
|
||||
} else {
|
||||
bestPostData.get(position).setScore(bestPostData.get(position).getScore() - 1);
|
||||
mBestPostData.get(position).setScore(mBestPostData.get(position).getScore() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -370,28 +376,28 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
public void onVoteThingFail(int position) {
|
||||
Toast.makeText(mContext, "Cannot downvote this post", Toast.LENGTH_SHORT).show();
|
||||
((DataViewHolder) holder).minusButton.clearColorFilter();
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(bestPostData.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);
|
||||
}
|
||||
}, id, RedditUtils.DIR_DOWNVOTE, holder.getAdapterPosition(), 1);
|
||||
} else {
|
||||
//Down voted before
|
||||
((DataViewHolder) holder).minusButton.clearColorFilter();
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(bestPostData.get(position).getScore() + 1));
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore() + 1));
|
||||
|
||||
new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position) {
|
||||
bestPostData.get(position).setVoteType(0);
|
||||
bestPostData.get(position).setScore(bestPostData.get(position).getScore());
|
||||
mBestPostData.get(position).setVoteType(0);
|
||||
mBestPostData.get(position).setScore(mBestPostData.get(position).getScore());
|
||||
}
|
||||
|
||||
@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).scoreTextView.setText(Integer.toString(bestPostData.get(position).getScore()));
|
||||
bestPostData.get(position).setScore(bestPostData.get(position).getScore());
|
||||
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mBestPostData.get(position).getScore()));
|
||||
mBestPostData.get(position).setScore(mBestPostData.get(position).getScore());
|
||||
}
|
||||
}, id, RedditUtils.DIR_UNVOTE, holder.getAdapterPosition(), 1);
|
||||
}
|
||||
@ -444,12 +450,12 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return bestPostData.size() + 1;
|
||||
return mBestPostData.size() + 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
return (position >= bestPostData.size() ? VIEW_TYPE_LOADING : VIEW_TYPE_DATA);
|
||||
return (position >= mBestPostData.size() ? VIEW_TYPE_LOADING : VIEW_TYPE_DATA);
|
||||
}
|
||||
|
||||
class DataViewHolder extends RecyclerView.ViewHolder {
|
||||
@ -524,4 +530,37 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class LoadSubredditIconAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||
private Context context;
|
||||
private CircleImageView iconImageView;
|
||||
private SubredditDao subredditDao;
|
||||
private String subredditName;
|
||||
private String iconImageUrl;
|
||||
|
||||
LoadSubredditIconAsyncTask(Context context, CircleImageView iconImageView, SubredditDao subredditDao, String subredditName) {
|
||||
this.context = context;
|
||||
this.iconImageView = iconImageView;
|
||||
this.subredditDao = subredditDao;
|
||||
this.subredditName = subredditName;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
if(subredditDao.getSubredditData(subredditName) != null) {
|
||||
iconImageUrl = subredditDao.getSubredditData(subredditName).getIconUrl();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void aVoid) {
|
||||
super.onPostExecute(aVoid);
|
||||
if(iconImageUrl != null) {
|
||||
Glide.with(context).load(iconImageUrl).into(iconImageView);
|
||||
} else {
|
||||
Glide.with(context).load(R.drawable.subreddit_default_icon).into(iconImageView);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,7 +16,8 @@ import java.util.Map;
|
||||
class FetchSubscribedThing {
|
||||
interface FetchSubscribedSubredditsListener {
|
||||
void onFetchSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
|
||||
ArrayList<SubscribedUserData> subscribedUserData);
|
||||
ArrayList<SubscribedUserData> subscribedUserData,
|
||||
ArrayList<SubredditData> subredditData);
|
||||
void onFetchSubscribedSubredditsFail();
|
||||
}
|
||||
|
||||
@ -25,15 +26,19 @@ class FetchSubscribedThing {
|
||||
private FetchSubscribedSubredditsListener mFetchSubscribedSubredditsListener;
|
||||
private ArrayList<SubscribedSubredditData> mSubscribedSubredditData;
|
||||
private ArrayList<SubscribedUserData> mSubscribedUserData;
|
||||
private ArrayList<SubredditData> mSubredditData;
|
||||
|
||||
private String mLastItem;
|
||||
|
||||
FetchSubscribedThing(Context context, RequestQueue requestQueue, ArrayList<SubscribedSubredditData> subscribedSubredditData,
|
||||
ArrayList<SubscribedUserData> subscribedUserData) {
|
||||
FetchSubscribedThing(Context context, RequestQueue requestQueue,
|
||||
ArrayList<SubscribedSubredditData> subscribedSubredditData,
|
||||
ArrayList<SubscribedUserData> subscribedUserData,
|
||||
ArrayList<SubredditData> subredditData) {
|
||||
this.context = context;
|
||||
this.requestQueue = requestQueue;
|
||||
mSubscribedSubredditData = subscribedSubredditData;
|
||||
mSubscribedUserData = subscribedUserData;
|
||||
mSubredditData = subredditData;
|
||||
}
|
||||
|
||||
void fetchSubscribedSubreddits(FetchSubscribedSubredditsListener fetchUserInfoListener, final int refreshTime) {
|
||||
@ -51,19 +56,20 @@ class FetchSubscribedThing {
|
||||
@Override
|
||||
public void onResponse(String response) {
|
||||
new ParseSubscribedThing().parseSubscribedSubreddits(response, mSubscribedSubredditData,
|
||||
mSubscribedUserData,
|
||||
mSubscribedUserData, mSubredditData,
|
||||
new ParseSubscribedThing.ParseSubscribedSubredditsListener() {
|
||||
|
||||
@Override
|
||||
public void onParseSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
|
||||
ArrayList<SubscribedUserData> subscribedUserData,
|
||||
ArrayList<SubredditData> subredditData,
|
||||
String lastItem) {
|
||||
mSubscribedSubredditData = subscribedSubredditData;
|
||||
mSubscribedUserData = subscribedUserData;
|
||||
mLastItem = lastItem;
|
||||
if(mLastItem.equals("null")) {
|
||||
mFetchSubscribedSubredditsListener.onFetchSubscribedSubredditsSuccess(mSubscribedSubredditData,
|
||||
mSubscribedUserData);
|
||||
mSubscribedUserData, mSubredditData);
|
||||
} else {
|
||||
fetchSubscribedSubreddits(mFetchSubscribedSubredditsListener, refreshTime);
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package ml.docilealligator.infinityforreddit;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.app.FragmentTransaction;
|
||||
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;
|
||||
@ -75,12 +75,12 @@ public class MainActivity extends AppCompatActivity {
|
||||
startActivity(loginIntent);
|
||||
} else {
|
||||
if(savedInstanceState == null) {
|
||||
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
|
||||
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
|
||||
mFragment = new BestPostFragment();
|
||||
fragmentTransaction.replace(R.id.frame_layout_content_main, mFragment).commit();
|
||||
} else {
|
||||
mFragment = getFragmentManager().getFragment(savedInstanceState, "outStateFragment");
|
||||
getFragmentManager().beginTransaction().replace(R.id.frame_layout_content_main, mFragment).commit();
|
||||
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, "outStateFragment");
|
||||
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_content_main, mFragment).commit();
|
||||
}
|
||||
|
||||
Calendar now = Calendar.getInstance();
|
||||
@ -214,17 +214,20 @@ public class MainActivity extends AppCompatActivity {
|
||||
});
|
||||
|
||||
new FetchSubscribedThing(this, Volley.newRequestQueue(this), new ArrayList<SubscribedSubredditData>(),
|
||||
new ArrayList<SubscribedUserData>())
|
||||
new ArrayList<SubscribedUserData>(), new ArrayList<SubredditData>())
|
||||
.fetchSubscribedSubreddits(new FetchSubscribedThing.FetchSubscribedSubredditsListener() {
|
||||
@Override
|
||||
public void onFetchSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
|
||||
ArrayList<SubscribedUserData> subscribedUserData) {
|
||||
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() {
|
||||
@ -255,7 +258,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
protected void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
if(mFragment != null) {
|
||||
getFragmentManager().putFragment(outState, "outStateFragment", mFragment);
|
||||
getSupportFragmentManager().putFragment(outState, "outStateFragment", mFragment);
|
||||
}
|
||||
outState.putString(nameState, mName);
|
||||
outState.putString(profileImageUrlState, mProfileImageUrl);
|
||||
@ -286,32 +289,41 @@ public class MainActivity extends AppCompatActivity {
|
||||
void insertSuccess();
|
||||
}
|
||||
|
||||
private final SubscribedSubredditDao mSubredditDao;
|
||||
private final SubscribedSubredditDao mSubscribedSubredditDao;
|
||||
private final SubscribedUserDao mUserDao;
|
||||
private final SubredditDao mSubredditDao;
|
||||
private List<SubscribedSubredditData> subscribedSubredditData;
|
||||
private List<SubscribedUserData> subscribedUserData;
|
||||
private List<SubredditData> subredditData;
|
||||
private InsertSubscribedThingListener insertSubscribedThingListener;
|
||||
|
||||
InsertSubscribedThingsAsyncTask(SubscribedSubredditRoomDatabase subredditDb,
|
||||
InsertSubscribedThingsAsyncTask(SubscribedSubredditRoomDatabase subscribedSubredditDb,
|
||||
SubscribedUserRoomDatabase userDb,
|
||||
SubredditRoomDatabase subredditDb,
|
||||
List<SubscribedSubredditData> subscribedSubredditData,
|
||||
List<SubscribedUserData> subscribedUserData,
|
||||
List<SubredditData> subredditData,
|
||||
InsertSubscribedThingListener insertSubscribedThingListener) {
|
||||
mSubredditDao = subredditDb.subscribedSubredditDao();
|
||||
mSubscribedSubredditDao = subscribedSubredditDb.subscribedSubredditDao();
|
||||
mUserDao = userDb.subscribedUserDao();
|
||||
mSubredditDao = subredditDb.subredditDao();
|
||||
this.subscribedSubredditData = subscribedSubredditData;
|
||||
this.subscribedUserData = subscribedUserData;
|
||||
this.subredditData = subredditData;
|
||||
this.insertSubscribedThingListener = insertSubscribedThingListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(final Void... params) {
|
||||
for(SubscribedSubredditData s : subscribedSubredditData) {
|
||||
mSubredditDao.insert(s);
|
||||
mSubscribedSubredditDao.insert(s);
|
||||
}
|
||||
for(SubscribedUserData s : subscribedUserData) {
|
||||
mUserDao.insert(s);
|
||||
}
|
||||
for(SubredditData s : subredditData) {
|
||||
mSubredditDao.insert(s);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -43,7 +43,7 @@ class ParseSubredditData {
|
||||
JSONObject data = jsonResponse.getJSONObject(JSONUtils.DATA_KEY);
|
||||
String id = data.getString(JSONUtils.NAME_KEY);
|
||||
String subredditFullName = data.getString(JSONUtils.DISPLAY_NAME_PREFIXED);
|
||||
String description = data.getString(JSONUtils.PUBLIC_DESCRIPTION);
|
||||
String description = data.getString(JSONUtils.PUBLIC_DESCRIPTION).trim();
|
||||
String bannerImageUrl = data.getString(JSONUtils.BANNER_IMG_KEY);
|
||||
String iconImageUrl = data.getString(JSONUtils.ICON_IMG_KEY);
|
||||
int nSubscribers = data.getInt(JSONUtils.SUBSCRIBERS_KEY);
|
||||
|
@ -13,6 +13,7 @@ class ParseSubscribedThing {
|
||||
interface ParseSubscribedSubredditsListener {
|
||||
void onParseSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
|
||||
ArrayList<SubscribedUserData> subscribedUserData,
|
||||
ArrayList<SubredditData> subredditData,
|
||||
String lastItem);
|
||||
void onParseSubscribedSubredditsFail();
|
||||
}
|
||||
@ -21,9 +22,10 @@ class ParseSubscribedThing {
|
||||
|
||||
void parseSubscribedSubreddits(String response, ArrayList<SubscribedSubredditData> subscribedSubredditData,
|
||||
ArrayList<SubscribedUserData> subscribedUserData,
|
||||
ArrayList<SubredditData> subredditData,
|
||||
ParseSubscribedSubredditsListener parseSubscribedSubredditsListener) {
|
||||
mParseSubscribedSubredditsListener = parseSubscribedSubredditsListener;
|
||||
new ParseSubscribedSubredditsAsyncTask(response, subscribedSubredditData, subscribedUserData).execute();
|
||||
new ParseSubscribedSubredditsAsyncTask(response, subscribedSubredditData, subscribedUserData, subredditData).execute();
|
||||
}
|
||||
|
||||
private class ParseSubscribedSubredditsAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||
@ -32,18 +34,23 @@ class ParseSubscribedThing {
|
||||
private String lastItem;
|
||||
private ArrayList<SubscribedSubredditData> subscribedSubredditData;
|
||||
private ArrayList<SubscribedUserData> subscribedUserData;
|
||||
private ArrayList<SubredditData> subredditData;
|
||||
private ArrayList<SubscribedSubredditData> newSubscribedSubredditData;
|
||||
private ArrayList<SubscribedUserData> newSubscribedUserData;
|
||||
private ArrayList<SubredditData> newSubredditData;
|
||||
|
||||
ParseSubscribedSubredditsAsyncTask(String response, ArrayList<SubscribedSubredditData> subscribedSubredditData,
|
||||
ArrayList<SubscribedUserData> subscribedUserData){
|
||||
ArrayList<SubscribedUserData> subscribedUserData,
|
||||
ArrayList<SubredditData> subredditData){
|
||||
try {
|
||||
jsonResponse = new JSONObject(response);
|
||||
parseFailed = false;
|
||||
this.subscribedSubredditData = subscribedSubredditData;
|
||||
this.subscribedUserData = subscribedUserData;
|
||||
this.subredditData = subredditData;
|
||||
newSubscribedSubredditData = new ArrayList<>();
|
||||
newSubscribedUserData = new ArrayList<>();
|
||||
newSubredditData = new ArrayList<>();
|
||||
} catch (JSONException e) {
|
||||
Log.i("user info json error", e.getMessage());
|
||||
mParseSubscribedSubredditsListener.onParseSubscribedSubredditsFail();
|
||||
@ -55,8 +62,10 @@ class ParseSubscribedThing {
|
||||
try {
|
||||
JSONArray children = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY);
|
||||
for(int i = 0; i < children.length(); i++) {
|
||||
String name = children.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.DISPLAY_NAME);
|
||||
String iconUrl = children.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.ICON_IMG_KEY);
|
||||
JSONObject data = children.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
|
||||
String name = data.getString(JSONUtils.DISPLAY_NAME);
|
||||
String bannerUrl = data.getString(JSONUtils.BANNER_IMG_KEY);
|
||||
String iconUrl = data.getString(JSONUtils.ICON_IMG_KEY);
|
||||
String id = children.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.NAME_KEY);
|
||||
if(iconUrl.equals("null")) {
|
||||
iconUrl = "";
|
||||
@ -67,7 +76,11 @@ class ParseSubscribedThing {
|
||||
//It's a user
|
||||
newSubscribedUserData.add(new SubscribedUserData(id, name.substring(2), iconUrl));
|
||||
} else {
|
||||
String subredditFullName = data.getString(JSONUtils.DISPLAY_NAME_PREFIXED);
|
||||
String description = data.getString(JSONUtils.PUBLIC_DESCRIPTION).trim();
|
||||
int nSubscribers = data.getInt(JSONUtils.SUBSCRIBERS_KEY);
|
||||
newSubscribedSubredditData.add(new SubscribedSubredditData(id, name, iconUrl));
|
||||
newSubredditData.add(new SubredditData(id, subredditFullName, iconUrl, bannerUrl, description, nSubscribers));
|
||||
}
|
||||
}
|
||||
lastItem = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.AFTER_KEY);
|
||||
@ -83,8 +96,9 @@ class ParseSubscribedThing {
|
||||
if(!parseFailed) {
|
||||
subscribedSubredditData.addAll(newSubscribedSubredditData);
|
||||
subscribedUserData.addAll(newSubscribedUserData);
|
||||
subredditData.addAll(newSubredditData);
|
||||
mParseSubscribedSubredditsListener.onParseSubscribedSubredditsSuccess(subscribedSubredditData,
|
||||
subscribedUserData, lastItem);
|
||||
subscribedUserData, subredditData, lastItem);
|
||||
} else {
|
||||
mParseSubscribedSubredditsListener.onParseSubscribedSubredditsFail();
|
||||
}
|
||||
|
@ -15,5 +15,8 @@ public interface SubredditDao {
|
||||
void deleteAllSubreddits();
|
||||
|
||||
@Query("SELECT * from subreddits WHERE id = :id")
|
||||
LiveData<SubredditData> getSubreddit(String id);
|
||||
LiveData<SubredditData> getSubredditLiveData(String id);
|
||||
|
||||
@Query("SELECT * from subreddits WHERE name = :namePrefixed")
|
||||
SubredditData getSubredditData(String namePrefixed);
|
||||
}
|
||||
|
@ -6,16 +6,16 @@ import android.os.AsyncTask;
|
||||
|
||||
public class SubredditRepository {
|
||||
private SubredditDao mSubredditDao;
|
||||
private LiveData<SubredditData> mSubredditData;
|
||||
private LiveData<SubredditData> mSubredditLiveData;
|
||||
|
||||
SubredditRepository(Application application, String id) {
|
||||
SubredditRoomDatabase db = SubredditRoomDatabase.getDatabase(application);
|
||||
mSubredditDao = db.subredditDao();
|
||||
mSubredditData = mSubredditDao.getSubreddit(id);
|
||||
mSubredditLiveData = mSubredditDao.getSubredditLiveData(id);
|
||||
}
|
||||
|
||||
LiveData<SubredditData> getSubredditData() {
|
||||
return mSubredditData;
|
||||
LiveData<SubredditData> getSubredditLiveData() {
|
||||
return mSubredditLiveData;
|
||||
}
|
||||
|
||||
public void insert(SubredditData subredditData) {
|
||||
|
@ -9,16 +9,16 @@ import android.support.annotation.NonNull;
|
||||
|
||||
public class SubredditViewModel extends AndroidViewModel {
|
||||
private SubredditRepository mSubredditRepository;
|
||||
private LiveData<SubredditData> mSubredditData;
|
||||
private LiveData<SubredditData> mSubredditLiveData;
|
||||
|
||||
public SubredditViewModel(Application application, String id) {
|
||||
SubredditViewModel(Application application, String id) {
|
||||
super(application);
|
||||
mSubredditRepository = new SubredditRepository(application, id);
|
||||
mSubredditData = mSubredditRepository.getSubredditData();
|
||||
mSubredditLiveData = mSubredditRepository.getSubredditLiveData();
|
||||
}
|
||||
|
||||
public LiveData<SubredditData> getSubredditData() {
|
||||
return mSubredditData;
|
||||
public LiveData<SubredditData> getSubredditLiveData() {
|
||||
return mSubredditLiveData;
|
||||
}
|
||||
|
||||
public void insert(SubredditData subredditData) {
|
||||
|
@ -9,7 +9,6 @@ import android.support.design.widget.AppBarLayout;
|
||||
import android.support.design.widget.CollapsingToolbarLayout;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.Log;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
@ -53,7 +52,6 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
|
||||
scrollRange = appBarLayout.getTotalScrollRange();
|
||||
}
|
||||
if (scrollRange + verticalOffset == 0) {
|
||||
Log.i("asfasdf", "asdfasdf");
|
||||
collapsingToolbarLayout.setTitle(title);
|
||||
isShow = true;
|
||||
} else if(isShow) {
|
||||
@ -73,7 +71,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
|
||||
|
||||
SubredditViewModel.Factory factory = new SubredditViewModel.Factory(getApplication(), id);
|
||||
mSubredditViewModel = ViewModelProviders.of(this, factory).get(SubredditViewModel.class);
|
||||
mSubredditViewModel.getSubredditData().observe(this, new Observer<SubredditData>() {
|
||||
mSubredditViewModel.getSubredditLiveData().observe(this, new Observer<SubredditData>() {
|
||||
@Override
|
||||
public void onChanged(@Nullable SubredditData subredditData) {
|
||||
if(subredditData != null) {
|
||||
|
Loading…
Reference in New Issue
Block a user