diff options
4 files changed, 105 insertions, 16 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostData.java b/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostData.java index 8c08680c..ce998cff 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostData.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostData.java @@ -18,6 +18,7 @@ class BestPostData implements Parcelable { private String id; private String fullName; private String subredditName; + private String subredditIconUrl; private String postTime; private String title; private String selfText; @@ -80,6 +81,7 @@ class BestPostData implements Parcelable { id = in.readString(); fullName = in.readString(); subredditName = in.readString(); + subredditIconUrl = in.readString(); postTime = in.readString(); title = in.readString(); selfText = in.readString(); @@ -120,6 +122,14 @@ class BestPostData implements Parcelable { return subredditName; } + public String getSubredditIconUrl() { + return subredditIconUrl; + } + + public void setSubredditIconUrl(String subredditIconUrl) { + this.subredditIconUrl = subredditIconUrl; + } + public String getPostTime() { return postTime; } @@ -214,6 +224,7 @@ class BestPostData implements Parcelable { parcel.writeString(id); parcel.writeString(fullName); parcel.writeString(subredditName); + parcel.writeString(subredditIconUrl); parcel.writeString(postTime); parcel.writeString(title); parcel.writeString(selfText); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostRecyclerViewAdapter.java index 7b70ca08..ed3fd0dd 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostRecyclerViewAdapter.java @@ -4,7 +4,6 @@ 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; @@ -99,8 +98,14 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View int voteType = mBestPostData.get(position).getVoteType(); boolean nsfw = mBestPostData.get(position).getNSFW(); - new LoadSubredditIconAsyncTask(mContext, ((DataViewHolder) holder).subredditImageView, - subredditDao, subredditName).execute(); + if(mBestPostData.get(position).getSubredditIconUrl() == null) { + new LoadSubredditIconAsyncTask(mContext, ((DataViewHolder) holder).subredditIconCircleImageView, + subredditDao, subredditName, mBestPostData.get(position)).execute(); + } else if(!mBestPostData.get(position).getSubredditIconUrl().equals("")) { + glide.load(mBestPostData.get(position).getSubredditIconUrl()).into(((DataViewHolder) holder).subredditIconCircleImageView); + } else { + glide.load(R.drawable.subreddit_default_icon).into(((DataViewHolder) holder).subredditIconCircleImageView); + } ((DataViewHolder) holder).cardView.setOnClickListener(new View.OnClickListener() { @Override @@ -460,7 +465,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View class DataViewHolder extends RecyclerView.ViewHolder { private CardView cardView; - private CircleImageView subredditImageView; + private CircleImageView subredditIconCircleImageView; private TextView subredditNameTextView; private TextView postTimeTextView; private TextView titleTextView; @@ -478,7 +483,7 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View DataViewHolder(CardView itemView) { super(itemView); cardView = itemView.findViewById(R.id.card_view_view_post_detail); - subredditImageView = itemView.findViewById(R.id.subreddit_icon_circle_image_view_best_post_item); + subredditIconCircleImageView = itemView.findViewById(R.id.subreddit_icon_circle_image_view_best_post_item); subredditNameTextView = itemView.findViewById(R.id.subreddit_text_view_best_post_item); postTimeTextView = itemView.findViewById(R.id.post_time_text_view_best_post_item); titleTextView = itemView.findViewById(R.id.title_text_view_best_post_item); @@ -531,16 +536,17 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View } } - private static class LoadSubredditIconAsyncTask extends AsyncTask<Void, Void, Void> { - private Context context; - private CircleImageView iconImageView; + /*private static class LoadSubredditIconAsyncTask extends AsyncTask<Void, Void, Void> { + private final WeakReference<Context> contextWeakReference; + private final WeakReference<CircleImageView> circleImageViewWeakReference; + private SubredditDao subredditDao; private String subredditName; private String iconImageUrl; LoadSubredditIconAsyncTask(Context context, CircleImageView iconImageView, SubredditDao subredditDao, String subredditName) { - this.context = context; - this.iconImageView = iconImageView; + contextWeakReference = new WeakReference<>(context); + circleImageViewWeakReference = new WeakReference<>(iconImageView); this.subredditDao = subredditDao; this.subredditName = subredditName; } @@ -556,11 +562,16 @@ class BestPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.View @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); + Context context = contextWeakReference.get(); + CircleImageView circleImageView = circleImageViewWeakReference.get(); + + if(context != null && circleImageView != null) { + if(iconImageUrl != null) { + Glide.with(context).load(iconImageUrl).into(circleImageView); + } else { + Glide.with(context).load(R.drawable.subreddit_default_icon).into(circleImageView); + } } } - } + }*/ } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/LoadSubredditIconAsyncTask.java b/app/src/main/java/ml/docilealligator/infinityforreddit/LoadSubredditIconAsyncTask.java new file mode 100644 index 00000000..e75343d3 --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/LoadSubredditIconAsyncTask.java @@ -0,0 +1,57 @@ +package ml.docilealligator.infinityforreddit; + +import android.content.Context; +import android.os.AsyncTask; + +import com.bumptech.glide.Glide; + +import java.lang.ref.WeakReference; + +import de.hdodenhof.circleimageview.CircleImageView; + +class LoadSubredditIconAsyncTask extends AsyncTask<Void, Void, Void> { + private final WeakReference<Context> contextWeakReference; + private final WeakReference<CircleImageView> circleImageViewWeakReference; + + private SubredditDao subredditDao; + private String subredditName; + private String iconImageUrl; + private BestPostData bestPostData; + + LoadSubredditIconAsyncTask(Context context, CircleImageView iconImageView, + SubredditDao subredditDao, String subredditName, + BestPostData bestPostData) { + contextWeakReference = new WeakReference<>(context); + circleImageViewWeakReference = new WeakReference<>(iconImageView); + this.subredditDao = subredditDao; + this.subredditName = subredditName; + this.bestPostData = bestPostData; + } + + @Override + protected Void doInBackground(Void... voids) { + if(subredditDao.getSubredditData(subredditName) != null) { + iconImageUrl = subredditDao.getSubredditData(subredditName).getIconUrl(); + } else { + iconImageUrl = ""; + } + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + Context context = contextWeakReference.get(); + CircleImageView circleImageView = circleImageViewWeakReference.get(); + + if(context != null && circleImageView != null) { + if(!iconImageUrl.equals("")) { + Glide.with(context).load(iconImageUrl).into(circleImageView); + } else { + Glide.with(context).load(R.drawable.subreddit_default_icon).into(circleImageView); + } + } + + bestPostData.setSubredditIconUrl(iconImageUrl); + } +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java index f0f3dcf5..c65d5ab8 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java @@ -66,7 +66,7 @@ public class ViewPostDetailActivity extends AppCompatActivity { mCoordinatorLayout = findViewById(R.id.coordinator_layout_view_post_detail); - CircleImageView subredditImageView = findViewById(R.id.subreddit_icon_circle_image_view_view_post_detail); + CircleImageView subredditIconCircleImageView = findViewById(R.id.subreddit_icon_circle_image_view_view_post_detail); TextView postTimeTextView = findViewById(R.id.post_time_text_view_view_post_detail); TextView subredditTextView = findViewById(R.id.subreddit_text_view_view_post_detail); TextView contentTextView = findViewById(R.id.content_text_view_view_post_detail); @@ -86,6 +86,16 @@ public class ViewPostDetailActivity extends AppCompatActivity { mCommentCardView = findViewById(R.id.comment_card_view_view_post_detail); mRecyclerView = findViewById(R.id.recycler_view_view_post_detail); + if(mPostData.getSubredditIconUrl() == null) { + new LoadSubredditIconAsyncTask(this, subredditIconCircleImageView, + SubredditRoomDatabase.getDatabase(this).subredditDao(), mPostData.getSubredditName(), + mPostData).execute(); + } else if(!mPostData.getSubredditIconUrl().equals("")) { + Glide.with(this).load(mPostData.getSubredditIconUrl()).into(subredditIconCircleImageView); + } else { + Glide.with(this).load(R.drawable.subreddit_default_icon).into(subredditIconCircleImageView); + } + mRecyclerView.setNestedScrollingEnabled(false); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); |