mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-10-05 21:39:50 +02:00
Change the layout of post. Add an error view when loading the preview image fails.
This commit is contained in:
@@ -9,7 +9,6 @@ import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.customtabs.CustomTabsIntent;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.widget.CardView;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -74,8 +73,8 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
if(viewType == VIEW_TYPE_DATA) {
|
||||
CardView cardView = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post, parent, false);
|
||||
return new DataViewHolder(cardView);
|
||||
LinearLayout linearLayout = (LinearLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post, parent, false);
|
||||
return new DataViewHolder(linearLayout);
|
||||
} else {
|
||||
LinearLayout linearLayout = (LinearLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_progress_bar, parent, false);
|
||||
return new LoadingViewHolder(linearLayout);
|
||||
@@ -122,7 +121,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
||||
glide.load(R.drawable.subreddit_default_icon).into(((DataViewHolder) holder).subredditIconCircleImageView);
|
||||
}
|
||||
|
||||
((DataViewHolder) holder).cardView.setOnClickListener(new View.OnClickListener() {
|
||||
((DataViewHolder) holder).linearLayout.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if(canStartActivity) {
|
||||
@@ -199,27 +198,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
||||
((DataViewHolder) holder).relativeLayout.setVisibility(View.VISIBLE);
|
||||
((DataViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||
((DataViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
||||
|
||||
String previewUrl = mPostData.get(position).getPreviewUrl();
|
||||
RequestBuilder imageRequestBuilder = glide.load(previewUrl).listener(new RequestListener<Drawable>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
|
||||
((DataViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if(mPostData.get(position).isNSFW()) {
|
||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(25, 3)))
|
||||
.into(((DataViewHolder) holder).imageView);
|
||||
} else {
|
||||
imageRequestBuilder.into(((DataViewHolder) holder).imageView);
|
||||
}
|
||||
loadImage(holder, mPostData.get(holder.getAdapterPosition()));
|
||||
}
|
||||
|
||||
if(mPostData.get(position).isStickied()) {
|
||||
@@ -482,6 +461,38 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
||||
}
|
||||
}
|
||||
|
||||
private void loadImage(final RecyclerView.ViewHolder holder, final PostData postData) {
|
||||
RequestBuilder imageRequestBuilder = glide.load(postData.getPreviewUrl()).listener(new RequestListener<Drawable>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
|
||||
((DataViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||
((DataViewHolder) holder).errorLinearLayout.setVisibility(View.VISIBLE);
|
||||
((DataViewHolder)holder).errorLinearLayout.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
((DataViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||
((DataViewHolder) holder).errorLinearLayout.setVisibility(View.GONE);
|
||||
loadImage(holder, postData);
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
|
||||
((DataViewHolder) holder).errorLinearLayout.setVisibility(View.GONE);
|
||||
((DataViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if(postData.isNSFW()) {
|
||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(25, 3)))
|
||||
.into(((DataViewHolder) holder).imageView);
|
||||
} else {
|
||||
imageRequestBuilder.into(((DataViewHolder) holder).imageView);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if(mPostData == null || mPostData.isEmpty()) {
|
||||
@@ -496,7 +507,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
||||
}
|
||||
|
||||
class DataViewHolder extends RecyclerView.ViewHolder {
|
||||
private CardView cardView;
|
||||
private LinearLayout linearLayout;
|
||||
private CircleImageView subredditIconCircleImageView;
|
||||
private TextView subredditNameTextView;
|
||||
private ImageView stickiedPostImageView;
|
||||
@@ -509,15 +520,16 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
||||
private RelativeLayout relativeLayout;
|
||||
private ProgressBar progressBar;
|
||||
private ImageView imageView;
|
||||
private LinearLayout errorLinearLayout;
|
||||
private ImageView noPreviewLinkImageView;
|
||||
private ImageView upvoteButton;
|
||||
private TextView scoreTextView;
|
||||
private ImageView downvoteButton;
|
||||
private ImageView shareButton;
|
||||
|
||||
DataViewHolder(CardView itemView) {
|
||||
DataViewHolder(LinearLayout itemView) {
|
||||
super(itemView);
|
||||
cardView = itemView.findViewById(R.id.card_view_view_post_detail);
|
||||
linearLayout = itemView.findViewById(R.id.linear_layout_view_post_detail);
|
||||
subredditIconCircleImageView = itemView.findViewById(R.id.subreddit_icon_circle_image_view_best_post_item);
|
||||
subredditNameTextView = itemView.findViewById(R.id.subreddit_text_view_best_post_item);
|
||||
stickiedPostImageView = itemView.findViewById(R.id.stickied_post_image_view_best_post_item);
|
||||
@@ -530,6 +542,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
||||
relativeLayout = itemView.findViewById(R.id.image_view_wrapper_item_best_post);
|
||||
progressBar = itemView.findViewById(R.id.progress_bar_best_post_item);
|
||||
imageView = itemView.findViewById(R.id.image_view_best_post_item);
|
||||
errorLinearLayout = itemView.findViewById(R.id.load_image_error_linear_layout_best_post_item);
|
||||
noPreviewLinkImageView = itemView.findViewById(R.id.image_view_no_preview_link_best_post_item);
|
||||
|
||||
upvoteButton = itemView.findViewById(R.id.plus_button_item_best_post);
|
||||
@@ -564,6 +577,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
||||
((DataViewHolder) holder).nsfwTextView.setVisibility(View.GONE);
|
||||
((DataViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||
((DataViewHolder) holder).imageView.setVisibility(View.GONE);
|
||||
((DataViewHolder) holder).errorLinearLayout.setVisibility(View.GONE);
|
||||
((DataViewHolder) holder).noPreviewLinkImageView.setVisibility(View.GONE);
|
||||
((DataViewHolder) holder).upvoteButton.clearColorFilter();
|
||||
((DataViewHolder) holder).downvoteButton.clearColorFilter();
|
||||
|
@@ -52,6 +52,10 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
||||
private PostData mPostData;
|
||||
|
||||
private CoordinatorLayout mCoordinatorLayout;
|
||||
private ProgressBar mLoadImageProgressBar;
|
||||
private ImageView mImageView;
|
||||
private RelativeLayout mLoadWrapper;
|
||||
private TextView mLoadImageErrorTextView;
|
||||
private ProgressBar mCommentProgressbar;
|
||||
private CardView mCommentCardView;
|
||||
private MultiLevelRecyclerView mRecyclerView;
|
||||
@@ -85,8 +89,10 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
||||
TextView gildedNumberTextView = findViewById(R.id.gilded_number_text_view_view_post_detail);
|
||||
TextView nsfwTextView = findViewById(R.id.nsfw_text_view_view_post_detail);
|
||||
RelativeLayout relativeLayout = findViewById(R.id.image_view_wrapper_view_post_detail);
|
||||
final ProgressBar progressBar = findViewById(R.id.progress_bar_view_post_detail);
|
||||
ImageView imageView = findViewById(R.id.image_view_view_post_detail);
|
||||
mLoadWrapper = findViewById(R.id.load_wrapper_view_post_detail);
|
||||
mLoadImageProgressBar = findViewById(R.id.progress_bar_view_post_detail);
|
||||
mLoadImageErrorTextView = findViewById(R.id.load_image_error_text_view_view_post_detail);
|
||||
mImageView = findViewById(R.id.image_view_view_post_detail);
|
||||
ImageView noPreviewLinkImageView = findViewById(R.id.image_view_no_preview_link_view_post_detail);
|
||||
|
||||
final ImageView upvoteButton = findViewById(R.id.plus_button_view_post_detail);
|
||||
@@ -151,12 +157,12 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
||||
|
||||
if(mPostData.getPostType() != PostData.TEXT_TYPE && mPostData.getPostType() != PostData.NO_PREVIEW_LINK_TYPE) {
|
||||
relativeLayout.setVisibility(View.VISIBLE);
|
||||
imageView.setVisibility(View.VISIBLE);
|
||||
|
||||
RequestBuilder imageRequestBuilder = Glide.with(this).load(mPostData.getPreviewUrl()).listener(new RequestListener<Drawable>() {
|
||||
mImageView.setVisibility(View.VISIBLE);
|
||||
loadImage();
|
||||
/*RequestBuilder imageRequestBuilder = Glide.with(this).load(mPostData.getPreviewUrl()).listener(new RequestListener<Drawable>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
|
||||
//Need to be implemented
|
||||
progressBar.setVisibility(View.GONE);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -169,10 +175,10 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
||||
|
||||
if(mPostData.isNSFW()) {
|
||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 3)))
|
||||
.into(imageView);
|
||||
.into(mImageView);
|
||||
} else {
|
||||
imageRequestBuilder.into(imageView);
|
||||
}
|
||||
imageRequestBuilder.into(mImageView);
|
||||
}*/
|
||||
}
|
||||
|
||||
mRecyclerView.setNestedScrollingEnabled(false);
|
||||
@@ -222,7 +228,7 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
||||
switch (mPostData.getPostType()) {
|
||||
case PostData.IMAGE_TYPE:
|
||||
typeTextView.setText("IMAGE");
|
||||
imageView.setOnClickListener(new View.OnClickListener() {
|
||||
mImageView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Intent intent = new Intent(ViewPostDetailActivity.this, ViewImageActivity.class);
|
||||
@@ -241,7 +247,7 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
||||
contentTextView.setHtml(mPostData.getSelfText());
|
||||
}
|
||||
|
||||
imageView.setOnClickListener(new View.OnClickListener() {
|
||||
mImageView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
|
||||
@@ -257,7 +263,7 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
||||
typeTextView.setText("VIDEO");
|
||||
|
||||
final Uri gifVideoUri = Uri.parse(mPostData.getVideoUrl());
|
||||
imageView.setOnClickListener(new View.OnClickListener() {
|
||||
mImageView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Intent intent = new Intent(ViewPostDetailActivity.this, ViewVideoActivity.class);
|
||||
@@ -278,7 +284,7 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
||||
typeTextView.setText("VIDEO");
|
||||
|
||||
final Uri videoUri = Uri.parse(mPostData.getVideoUrl());
|
||||
imageView.setOnClickListener(new View.OnClickListener() {
|
||||
mImageView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Intent intent = new Intent(ViewPostDetailActivity.this, ViewVideoActivity.class);
|
||||
@@ -524,6 +530,38 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
||||
});
|
||||
}
|
||||
|
||||
private void loadImage() {
|
||||
RequestBuilder imageRequestBuilder = Glide.with(this).load(mPostData.getPreviewUrl()).listener(new RequestListener<Drawable>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
|
||||
mLoadImageProgressBar.setVisibility(View.GONE);
|
||||
mLoadImageErrorTextView.setVisibility(View.VISIBLE);
|
||||
mLoadImageErrorTextView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
mLoadImageProgressBar.setVisibility(View.VISIBLE);
|
||||
mLoadImageErrorTextView.setVisibility(View.GONE);
|
||||
loadImage();
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
|
||||
mLoadWrapper.setVisibility(View.GONE);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if(mPostData.isNSFW()) {
|
||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 3)))
|
||||
.into(mImageView);
|
||||
} else {
|
||||
imageRequestBuilder.into(mImageView);
|
||||
}
|
||||
}
|
||||
|
||||
private void showRetrySnackbar() {
|
||||
Snackbar snackbar = Snackbar.make(mCoordinatorLayout, R.string.load_comment_failed, Snackbar.LENGTH_INDEFINITE);
|
||||
snackbar.setAction(R.string.retry, new View.OnClickListener() {
|
||||
|
Reference in New Issue
Block a user