Probably fix app crashes when loading large images in CommentAndPostRecyclerViewAdapter.

This commit is contained in:
Alex Ning 2020-07-13 23:54:15 +08:00
parent cd108fbe55
commit b1c6223233
4 changed files with 132 additions and 845 deletions

View File

@ -5,6 +5,7 @@ import android.content.SharedPreferences;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
@ -196,6 +197,7 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
private boolean mLockFab; private boolean mLockFab;
private boolean mSwipeUpToHideFab; private boolean mSwipeUpToHideFab;
private boolean mExpandChildren; private boolean mExpandChildren;
private int mWindowWidth;
private LinearLayoutManager mLinearLayoutManager; private LinearLayoutManager mLinearLayoutManager;
private CommentAndPostRecyclerViewAdapter mAdapter; private CommentAndPostRecyclerViewAdapter mAdapter;
private RecyclerView.SmoothScroller mSmoothScroller; private RecyclerView.SmoothScroller mSmoothScroller;
@ -251,6 +253,10 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
} }
} }
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
mWindowWidth = displayMetrics.widthPixels;
mToolbar.setTitle(""); mToolbar.setTitle("");
setSupportActionBar(mToolbar); setSupportActionBar(mToolbar);
setToolbarGoToTop(mToolbar); setToolbarGoToTop(mToolbar);
@ -462,8 +468,8 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
mAdapter = new CommentAndPostRecyclerViewAdapter(ViewPostDetailActivity.this, mAdapter = new CommentAndPostRecyclerViewAdapter(ViewPostDetailActivity.this,
mCustomThemeWrapper, mRetrofit, mOauthRetrofit, mRedditDataRoomDatabase, mGlide, mCustomThemeWrapper, mRetrofit, mOauthRetrofit, mRedditDataRoomDatabase, mGlide,
mAccessToken, mAccountName, mPost, mLocale, mSingleCommentId, isSingleCommentThreadMode, mWindowWidth, mAccessToken, mAccountName, mPost, mLocale, mSingleCommentId,
mSharedPreferences, mExoCreator, isSingleCommentThreadMode, mSharedPreferences, mExoCreator,
new CommentAndPostRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() { new CommentAndPostRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
@Override @Override
public void updatePost(Post post) { public void updatePost(Post post) {
@ -626,8 +632,8 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
mAdapter = new CommentAndPostRecyclerViewAdapter(ViewPostDetailActivity.this, mAdapter = new CommentAndPostRecyclerViewAdapter(ViewPostDetailActivity.this,
mCustomThemeWrapper, mRetrofit, mOauthRetrofit, mRedditDataRoomDatabase, mGlide, mCustomThemeWrapper, mRetrofit, mOauthRetrofit, mRedditDataRoomDatabase, mGlide,
mAccessToken, mAccountName, mPost, mLocale, mSingleCommentId, isSingleCommentThreadMode, mWindowWidth, mAccessToken, mAccountName, mPost, mLocale,
mSharedPreferences, mExoCreator, mSingleCommentId, isSingleCommentThreadMode, mSharedPreferences, mExoCreator,
new CommentAndPostRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() { new CommentAndPostRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
@Override @Override
public void updatePost(Post post) { public void updatePost(Post post) {

View File

@ -5,7 +5,6 @@ import android.content.SharedPreferences;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.ColorFilter; import android.graphics.ColorFilter;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
@ -42,11 +41,7 @@ import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException; import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.request.transition.Transition;
import com.davemorrissey.labs.subscaleview.ImageSource;
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.metadata.Metadata;
import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.text.Cue; import com.google.android.exoplayer2.text.Cue;
@ -102,7 +97,6 @@ import ml.docilealligator.infinityforreddit.Comment.Comment;
import ml.docilealligator.infinityforreddit.Comment.FetchComment; import ml.docilealligator.infinityforreddit.Comment.FetchComment;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.CustomView.AspectRatioGifImageView; import ml.docilealligator.infinityforreddit.CustomView.AspectRatioGifImageView;
import ml.docilealligator.infinityforreddit.CustomView.AspectRatioSubsamplingScaleImageView;
import ml.docilealligator.infinityforreddit.CustomView.MarkwonLinearLayoutManager; import ml.docilealligator.infinityforreddit.CustomView.MarkwonLinearLayoutManager;
import ml.docilealligator.infinityforreddit.Post.Post; import ml.docilealligator.infinityforreddit.Post.Post;
import ml.docilealligator.infinityforreddit.Post.PostDataSource; import ml.docilealligator.infinityforreddit.Post.PostDataSource;
@ -122,20 +116,19 @@ import static ml.docilealligator.infinityforreddit.Activity.CommentActivity.WRIT
public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements CacheManager { public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements CacheManager {
private static final int VIEW_TYPE_POST_DETAIL_VIDEO_AUTOPLAY = 1; private static final int VIEW_TYPE_POST_DETAIL_VIDEO_AUTOPLAY = 1;
private static final int VIEW_TYPE_POST_DETAIL_VIDEO_AND_GIF_PREVIEW = 2; private static final int VIEW_TYPE_POST_DETAIL_VIDEO_AND_GIF_PREVIEW = 2;
private static final int VIEW_TYPE_POST_DETAIL_GIF_AUTOPLAY = 3; private static final int VIEW_TYPE_POST_DETAIL_IMAGE_AND_GIF_AUTOPLAY = 3;
private static final int VIEW_TYPE_POST_DETAIL_IMAGE = 4; private static final int VIEW_TYPE_POST_DETAIL_LINK = 4;
private static final int VIEW_TYPE_POST_DETAIL_LINK = 5; private static final int VIEW_TYPE_POST_DETAIL_NO_PREVIEW_LINK = 5;
private static final int VIEW_TYPE_POST_DETAIL_NO_PREVIEW_LINK = 6; private static final int VIEW_TYPE_POST_DETAIL_TEXT_TYPE = 6;
private static final int VIEW_TYPE_POST_DETAIL_TEXT_TYPE = 7; private static final int VIEW_TYPE_FIRST_LOADING = 7;
private static final int VIEW_TYPE_FIRST_LOADING = 8; private static final int VIEW_TYPE_FIRST_LOADING_FAILED = 8;
private static final int VIEW_TYPE_FIRST_LOADING_FAILED = 9; private static final int VIEW_TYPE_NO_COMMENT_PLACEHOLDER = 9;
private static final int VIEW_TYPE_NO_COMMENT_PLACEHOLDER = 10; private static final int VIEW_TYPE_COMMENT = 10;
private static final int VIEW_TYPE_COMMENT = 11; private static final int VIEW_TYPE_COMMENT_FULLY_COLLAPSED = 11;
private static final int VIEW_TYPE_COMMENT_FULLY_COLLAPSED = 12; private static final int VIEW_TYPE_LOAD_MORE_CHILD_COMMENTS = 12;
private static final int VIEW_TYPE_LOAD_MORE_CHILD_COMMENTS = 13; private static final int VIEW_TYPE_IS_LOADING_MORE_COMMENTS = 13;
private static final int VIEW_TYPE_IS_LOADING_MORE_COMMENTS = 14; private static final int VIEW_TYPE_LOAD_MORE_COMMENTS_FAILED = 14;
private static final int VIEW_TYPE_LOAD_MORE_COMMENTS_FAILED = 15; private static final int VIEW_TYPE_VIEW_ALL_COMMENTS = 15;
private static final int VIEW_TYPE_VIEW_ALL_COMMENTS = 16;
private AppCompatActivity mActivity; private AppCompatActivity mActivity;
private Retrofit mRetrofit; private Retrofit mRetrofit;
@ -145,6 +138,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
private Markwon mPostDetailMarkwon; private Markwon mPostDetailMarkwon;
private Markwon mCommentMarkwon; private Markwon mCommentMarkwon;
private final MarkwonAdapter mMarkwonAdapter; private final MarkwonAdapter mMarkwonAdapter;
private int mImageViewWidth;
private String mAccessToken; private String mAccessToken;
private String mAccountName; private String mAccountName;
private Post mPost; private Post mPost;
@ -229,8 +223,9 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
public CommentAndPostRecyclerViewAdapter(AppCompatActivity activity, CustomThemeWrapper customThemeWrapper, public CommentAndPostRecyclerViewAdapter(AppCompatActivity activity, CustomThemeWrapper customThemeWrapper,
Retrofit retrofit, Retrofit oauthRetrofit, Retrofit retrofit, Retrofit oauthRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase, RequestManager glide, RedditDataRoomDatabase redditDataRoomDatabase, RequestManager glide,
String accessToken, String accountName, Post post, Locale locale, int imageViewWidth, String accessToken, String accountName,
String singleCommentId, boolean isSingleCommentThreadMode, Post post, Locale locale, String singleCommentId,
boolean isSingleCommentThreadMode,
SharedPreferences sharedPreferences, ExoCreator exoCreator, SharedPreferences sharedPreferences, ExoCreator exoCreator,
CommentRecyclerViewAdapterCallback commentRecyclerViewAdapterCallback) { CommentRecyclerViewAdapterCallback commentRecyclerViewAdapterCallback) {
mActivity = activity; mActivity = activity;
@ -322,6 +317,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
.tableLayout(R.layout.adapter_table_block, R.id.table_layout) .tableLayout(R.layout.adapter_table_block, R.id.table_layout)
.textLayoutIsRoot(R.layout.view_table_entry_cell))) .textLayoutIsRoot(R.layout.view_table_entry_cell)))
.build(); .build();
mImageViewWidth = imageViewWidth;
mAccessToken = accessToken; mAccessToken = accessToken;
mAccountName = accountName; mAccountName = accountName;
mPost = post; mPost = post;
@ -438,12 +434,12 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
if (!mAutoplayNsfwVideos && mPost.isNSFW()) { if (!mAutoplayNsfwVideos && mPost.isNSFW()) {
return VIEW_TYPE_POST_DETAIL_VIDEO_AND_GIF_PREVIEW; return VIEW_TYPE_POST_DETAIL_VIDEO_AND_GIF_PREVIEW;
} }
return VIEW_TYPE_POST_DETAIL_GIF_AUTOPLAY; return VIEW_TYPE_POST_DETAIL_IMAGE_AND_GIF_AUTOPLAY;
} else { } else {
return VIEW_TYPE_POST_DETAIL_VIDEO_AND_GIF_PREVIEW; return VIEW_TYPE_POST_DETAIL_VIDEO_AND_GIF_PREVIEW;
} }
case Post.IMAGE_TYPE: case Post.IMAGE_TYPE:
return VIEW_TYPE_POST_DETAIL_IMAGE; return VIEW_TYPE_POST_DETAIL_IMAGE_AND_GIF_AUTOPLAY;
case Post.LINK_TYPE: case Post.LINK_TYPE:
return VIEW_TYPE_POST_DETAIL_LINK; return VIEW_TYPE_POST_DETAIL_LINK;
case Post.NO_PREVIEW_LINK_TYPE: case Post.NO_PREVIEW_LINK_TYPE:
@ -517,10 +513,8 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
return new PostDetailVideoAutoplayViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_video_autoplay, parent, false)); return new PostDetailVideoAutoplayViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_video_autoplay, parent, false));
case VIEW_TYPE_POST_DETAIL_VIDEO_AND_GIF_PREVIEW: case VIEW_TYPE_POST_DETAIL_VIDEO_AND_GIF_PREVIEW:
return new PostDetailVideoAndGifPreviewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_video_and_gif_preview, parent, false)); return new PostDetailVideoAndGifPreviewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_video_and_gif_preview, parent, false));
case VIEW_TYPE_POST_DETAIL_GIF_AUTOPLAY: case VIEW_TYPE_POST_DETAIL_IMAGE_AND_GIF_AUTOPLAY:
return new PostDetailGifAutoplayViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_gif_autoplay, parent, false)); return new PostDetailImageAndGifAutoplayViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_image_and_gif_autoplay, parent, false));
case VIEW_TYPE_POST_DETAIL_IMAGE:
return new PostDetailImageViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_image, parent, false));
case VIEW_TYPE_POST_DETAIL_LINK: case VIEW_TYPE_POST_DETAIL_LINK:
return new PostDetailLinkViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_link, parent, false)); return new PostDetailLinkViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_link, parent, false));
case VIEW_TYPE_POST_DETAIL_NO_PREVIEW_LINK: case VIEW_TYPE_POST_DETAIL_NO_PREVIEW_LINK:
@ -722,17 +716,20 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
} }
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setRatio((float) mPost.getPreviewHeight() / (float) mPost.getPreviewWidth()); ((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setRatio((float) mPost.getPreviewHeight() / (float) mPost.getPreviewWidth());
loadImage((PostDetailVideoAndGifPreviewHolder) holder); loadImage((PostDetailVideoAndGifPreviewHolder) holder);
} else if (holder instanceof PostDetailGifAutoplayViewHolder) { } else if (holder instanceof PostDetailImageAndGifAutoplayViewHolder) {
((PostDetailGifAutoplayViewHolder) holder).mImageView.setRatio((float) mPost.getPreviewHeight() / (float) mPost.getPreviewWidth()); if (mPost.getPostType() == Post.IMAGE_TYPE) {
loadImage((PostDetailGifAutoplayViewHolder) holder); ((PostDetailImageAndGifAutoplayViewHolder) holder).mTypeTextView.setText(R.string.image);
} else if (holder instanceof PostDetailImageViewHolder) { } else {
if (mPost.getPreviewWidth() <= 0 || mPost.getPreviewHeight() <= 0) { ((PostDetailImageAndGifAutoplayViewHolder) holder).mTypeTextView.setText(R.string.gif);
((PostDetailImageViewHolder) holder).mImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP);
((PostDetailImageViewHolder) holder).mImageView.getLayoutParams().height = (int) (400 * mScale);
} }
((PostDetailImageViewHolder) holder).mImageView.setRatio((float) mPost.getPreviewHeight() / (float) mPost.getPreviewWidth()); if (mPost.getPreviewWidth() <= 0 || mPost.getPreviewHeight() <= 0) {
loadImage((PostDetailImageViewHolder) holder); ((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.getLayoutParams().height = (int) (400 * mScale);
} else {
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setRatio((float) mPost.getPreviewHeight() / (float) mPost.getPreviewWidth());
}
loadImage((PostDetailImageAndGifAutoplayViewHolder) holder);
} else if (holder instanceof PostDetailLinkViewHolder) { } else if (holder instanceof PostDetailLinkViewHolder) {
String domain = Uri.parse(mPost.getUrl()).getHost(); String domain = Uri.parse(mPost.getUrl()).getHost();
((PostDetailLinkViewHolder) holder).mLinkTextView.setText(domain); ((PostDetailLinkViewHolder) holder).mLinkTextView.setText(domain);
@ -1222,65 +1219,36 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
} }
private void loadImage(PostDetailBaseViewHolder holder) { private void loadImage(PostDetailBaseViewHolder holder) {
if (holder instanceof PostDetailGifAutoplayViewHolder) { if (holder instanceof PostDetailImageAndGifAutoplayViewHolder) {
mGlide.asBitmap().load(mPost.getPreviewUrl()) RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(mPost.getPreviewUrl())
.listener(new RequestListener<Bitmap>() { .listener(new RequestListener<Drawable>() {
@Override @Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) { public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
((PostDetailGifAutoplayViewHolder) holder).mLoadImageProgressBar.setVisibility(View.GONE); ((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageProgressBar.setVisibility(View.GONE);
((PostDetailGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.VISIBLE); ((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.VISIBLE);
((PostDetailGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setOnClickListener(view -> { ((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setOnClickListener(view -> {
((PostDetailGifAutoplayViewHolder) holder).mLoadImageProgressBar.setVisibility(View.VISIBLE); ((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageProgressBar.setVisibility(View.VISIBLE);
((PostDetailGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.GONE); ((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.GONE);
loadImage(holder); loadImage(holder);
}); });
return false; return false;
} }
@Override @Override
public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) { public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
((PostDetailGifAutoplayViewHolder) holder).mLoadWrapper.setVisibility(View.GONE); ((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadWrapper.setVisibility(View.GONE);
return false;
}
}).into(((PostDetailGifAutoplayViewHolder) holder).mImageView);
} else if (holder instanceof PostDetailImageViewHolder) {
RequestBuilder<Bitmap> imageRequestBuilder = mGlide.asBitmap().load(mPost.getPreviewUrl())
.listener(new RequestListener<Bitmap>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
((PostDetailImageViewHolder) holder).mLoadImageProgressBar.setVisibility(View.GONE);
((PostDetailImageViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.VISIBLE);
((PostDetailImageViewHolder) holder).mLoadImageErrorTextView.setOnClickListener(view -> {
((PostDetailImageViewHolder) holder).mLoadImageProgressBar.setVisibility(View.VISIBLE);
((PostDetailImageViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.GONE);
loadImage(holder);
});
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
((PostDetailImageViewHolder) holder).mLoadWrapper.setVisibility(View.GONE);
return false; return false;
} }
}); });
CustomTarget<Bitmap> customTarget = new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
((PostDetailImageViewHolder) holder).mImageView.setImage(ImageSource.cachedBitmap(resource));
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
};
if ((mPost.isNSFW() && mNeedBlurNsfw) || (mPost.isSpoiler() && mNeedBlurSpoiler)) { if ((mPost.isNSFW() && mNeedBlurNsfw) || (mPost.isSpoiler() && mNeedBlurSpoiler)) {
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))).into(customTarget); imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))).into(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView);
} else { } else {
imageRequestBuilder.apply(RequestOptions.noTransformation()).into(customTarget); if (mImageViewWidth > mPost.getPreviewWidth()) {
imageRequestBuilder.override(Target.SIZE_ORIGINAL).into(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView);
} else {
imageRequestBuilder.into(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView);
}
} }
} else if (holder instanceof PostDetailVideoAndGifPreviewHolder) { } else if (holder instanceof PostDetailVideoAndGifPreviewHolder) {
RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(mPost.getPreviewUrl()) RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(mPost.getPreviewUrl())
@ -1341,259 +1309,6 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
} }
} }
/*private void loadImage(PostDetailBaseViewHolder holder) {
if (holder instanceof PostDetailImageAndGifAutoplayViewHolder) {
String url = mAutoplay && mPost.getPostType() == Post.GIF_TYPE ? mPost.getUrl() : mPost.getPreviewUrl();
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setImageLoaderCallback(new ImageLoader.Callback() {
@Override
public void onCacheHit(int imageType, File image) {
}
@Override
public void onCacheMiss(int imageType, File image) {
}
@Override
public void onStart() {
}
@Override
public void onProgress(int progress) {
}
@Override
public void onFinish() {
}
@Override
public void onSuccess(File image) {
((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadWrapper.setVisibility(View.GONE);
}
@Override
public void onFail(Exception error) {
((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageProgressBar.setVisibility(View.GONE);
((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.VISIBLE);
((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setOnClickListener(view -> {
((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageProgressBar.setVisibility(View.VISIBLE);
((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.GONE);
loadImage(holder);
});
}
});
if ((mPost.isNSFW() && mNeedBlurNsfw) || (mPost.isSpoiler() && mNeedBlurSpoiler)) {
SubsamplingScaleImageView subsamplingScaleImageView = ((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.getSSIV();
if (subsamplingScaleImageView != null) {
mGlide.asBitmap().load(url)
.listener(new RequestListener<Bitmap>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageProgressBar.setVisibility(View.GONE);
((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.VISIBLE);
((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setOnClickListener(view -> {
((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageProgressBar.setVisibility(View.VISIBLE);
((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.GONE);
loadImage(holder);
});
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadWrapper.setVisibility(View.GONE);
return false;
}
}).apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))).into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
subsamplingScaleImageView.setImage(ImageSource.bitmap(resource));
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
} else {
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.showImage(Uri.parse(url));
}
} else {
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.showImage(Uri.parse(url));
}
} else if (holder instanceof PostDetailVideoAndGifPreviewHolder) {
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setImageLoaderCallback(new ImageLoader.Callback() {
@Override
public void onCacheHit(int imageType, File image) {
}
@Override
public void onCacheMiss(int imageType, File image) {
}
@Override
public void onStart() {
}
@Override
public void onProgress(int progress) {
}
@Override
public void onFinish() {
}
@Override
public void onSuccess(File image) {
((PostDetailVideoAndGifPreviewHolder) holder).mLoadWrapper.setVisibility(View.GONE);
}
@Override
public void onFail(Exception error) {
((PostDetailVideoAndGifPreviewHolder) holder).mLoadImageProgressBar.setVisibility(View.GONE);
((PostDetailVideoAndGifPreviewHolder) holder).mLoadImageErrorTextView.setVisibility(View.VISIBLE);
((PostDetailVideoAndGifPreviewHolder) holder).mLoadImageErrorTextView.setOnClickListener(view -> {
((PostDetailVideoAndGifPreviewHolder) holder).mLoadImageProgressBar.setVisibility(View.VISIBLE);
((PostDetailVideoAndGifPreviewHolder) holder).mLoadImageErrorTextView.setVisibility(View.GONE);
loadImage(holder);
});
}
});
if ((mPost.isNSFW() && mNeedBlurNsfw) || (mPost.isSpoiler() && mNeedBlurSpoiler)) {
SubsamplingScaleImageView subsamplingScaleImageView = ((PostDetailVideoAndGifPreviewHolder) holder).mImageView.getSSIV();
if (subsamplingScaleImageView != null) {
mGlide.asBitmap().load(mPost.getPreviewUrl())
.listener(new RequestListener<Bitmap>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
((PostDetailVideoAndGifPreviewHolder) holder).mLoadImageProgressBar.setVisibility(View.GONE);
((PostDetailVideoAndGifPreviewHolder) holder).mLoadImageErrorTextView.setVisibility(View.VISIBLE);
((PostDetailVideoAndGifPreviewHolder) holder).mLoadImageErrorTextView.setOnClickListener(view -> {
((PostDetailVideoAndGifPreviewHolder) holder).mLoadImageProgressBar.setVisibility(View.VISIBLE);
((PostDetailVideoAndGifPreviewHolder) holder).mLoadImageErrorTextView.setVisibility(View.GONE);
loadImage(holder);
});
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
((PostDetailVideoAndGifPreviewHolder) holder).mLoadWrapper.setVisibility(View.GONE);
return false;
}
}).apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
.into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
subsamplingScaleImageView.setImage(ImageSource.bitmap(resource));
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
} else {
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.showImage(Uri.parse(mPost.getPreviewUrl()));
}
} else {
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.showImage(Uri.parse(mPost.getPreviewUrl()));
}
} else if (holder instanceof PostDetailLinkViewHolder) {
((PostDetailLinkViewHolder) holder).mImageView.setImageLoaderCallback(new ImageLoader.Callback() {
@Override
public void onCacheHit(int imageType, File image) {
}
@Override
public void onCacheMiss(int imageType, File image) {
}
@Override
public void onStart() {
}
@Override
public void onProgress(int progress) {
}
@Override
public void onFinish() {
}
@Override
public void onSuccess(File image) {
((PostDetailLinkViewHolder) holder).mLoadWrapper.setVisibility(View.GONE);
}
@Override
public void onFail(Exception error) {
((PostDetailLinkViewHolder) holder).mLoadImageProgressBar.setVisibility(View.GONE);
((PostDetailLinkViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.VISIBLE);
((PostDetailLinkViewHolder) holder).mLoadImageErrorTextView.setOnClickListener(view -> {
((PostDetailLinkViewHolder) holder).mLoadImageProgressBar.setVisibility(View.VISIBLE);
((PostDetailLinkViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.GONE);
loadImage(holder);
});
}
});
if ((mPost.isNSFW() && mNeedBlurNsfw) || (mPost.isSpoiler() && mNeedBlurSpoiler)) {
SubsamplingScaleImageView subsamplingScaleImageView = ((PostDetailLinkViewHolder) holder).mImageView.getSSIV();
if (subsamplingScaleImageView != null) {
mGlide.asBitmap().load(mPost.getPreviewUrl())
.listener(new RequestListener<Bitmap>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
((PostDetailLinkViewHolder) holder).mLoadImageProgressBar.setVisibility(View.GONE);
((PostDetailLinkViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.VISIBLE);
((PostDetailLinkViewHolder) holder).mLoadImageErrorTextView.setOnClickListener(view -> {
((PostDetailLinkViewHolder) holder).mLoadImageProgressBar.setVisibility(View.VISIBLE);
((PostDetailLinkViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.GONE);
loadImage(holder);
});
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
((PostDetailLinkViewHolder) holder).mLoadWrapper.setVisibility(View.GONE);
return false;
}
}).apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
.into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
subsamplingScaleImageView.setImage(ImageSource.bitmap(resource));
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
} else {
((PostDetailLinkViewHolder) holder).mImageView.showImage(Uri.parse(mPost.getPreviewUrl()));
}
} else {
((PostDetailLinkViewHolder) holder).mImageView.showImage(Uri.parse(mPost.getPreviewUrl()));
}
}
}*/
public void updatePost(Post post) { public void updatePost(Post post) {
mPost = post; mPost = post;
notifyItemChanged(0); notifyItemChanged(0);
@ -1903,11 +1618,8 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
((PostDetailVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.GONE); ((PostDetailVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.GONE);
} else if (holder instanceof PostDetailVideoAndGifPreviewHolder) { } else if (holder instanceof PostDetailVideoAndGifPreviewHolder) {
mGlide.clear(((PostDetailVideoAndGifPreviewHolder) holder).mImageView); mGlide.clear(((PostDetailVideoAndGifPreviewHolder) holder).mImageView);
} else if (holder instanceof PostDetailGifAutoplayViewHolder) { } else if (holder instanceof PostDetailImageAndGifAutoplayViewHolder) {
mGlide.clear(((PostDetailGifAutoplayViewHolder) holder).mImageView); mGlide.clear(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView);
} else if (holder instanceof PostDetailImageViewHolder) {
mGlide.clear(((PostDetailImageViewHolder) holder).mImageView);
((PostDetailImageViewHolder) holder).mImageView.recycle();
} else if (holder instanceof PostDetailLinkViewHolder) { } else if (holder instanceof PostDetailLinkViewHolder) {
mGlide.clear(((PostDetailLinkViewHolder) holder).mImageView); mGlide.clear(((PostDetailLinkViewHolder) holder).mImageView);
} }
@ -2689,163 +2401,61 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
} }
} }
class PostDetailGifAutoplayViewHolder extends PostDetailBaseViewHolder { class PostDetailImageAndGifAutoplayViewHolder extends PostDetailBaseViewHolder {
@BindView(R.id.icon_gif_image_view_item_post_detail_gif_autoplay) @BindView(R.id.icon_gif_image_view_item_post_detail_image_and_gif_autoplay)
AspectRatioGifImageView mIconGifImageView; AspectRatioGifImageView mIconGifImageView;
@BindView(R.id.subreddit_text_view_item_post_detail_gif_autoplay) @BindView(R.id.subreddit_text_view_item_post_detail_image_and_gif_autoplay)
TextView mSubredditTextView; TextView mSubredditTextView;
@BindView(R.id.user_text_view_item_post_detail_gif_autoplay) @BindView(R.id.user_text_view_item_post_detail_image_and_gif_autoplay)
TextView mUserTextView; TextView mUserTextView;
@BindView(R.id.author_flair_text_view_item_post_detail_gif_autoplay) @BindView(R.id.author_flair_text_view_item_post_detail_image_and_gif_autoplay)
TextView mAuthorFlairTextView; TextView mAuthorFlairTextView;
@BindView(R.id.post_time_text_view_item_post_detail_gif_autoplay) @BindView(R.id.post_time_text_view_item_post_detail_image_and_gif_autoplay)
TextView mPostTimeTextView; TextView mPostTimeTextView;
@BindView(R.id.title_text_view_item_post_detail_gif_autoplay) @BindView(R.id.title_text_view_item_post_detail_image_and_gif_autoplay)
TextView mTitleTextView; TextView mTitleTextView;
@BindView(R.id.type_text_view_item_post_detail_gif_autoplay) @BindView(R.id.type_text_view_item_post_detail_image_and_gif_autoplay)
CustomTextView mTypeTextView; CustomTextView mTypeTextView;
@BindView(R.id.crosspost_image_view_item_post_detail_gif_autoplay) @BindView(R.id.crosspost_image_view_item_post_detail_image_and_gif_autoplay)
ImageView mCrosspostImageView; ImageView mCrosspostImageView;
@BindView(R.id.archived_image_view_item_post_detail_gif_autoplay) @BindView(R.id.archived_image_view_item_post_detail_image_and_gif_autoplay)
ImageView mArchivedImageView; ImageView mArchivedImageView;
@BindView(R.id.locked_image_view_item_post_detail_gif_autoplay) @BindView(R.id.locked_image_view_item_post_detail_image_and_gif_autoplay)
ImageView mLockedImageView; ImageView mLockedImageView;
@BindView(R.id.nsfw_text_view_item_post_detail_gif_autoplay) @BindView(R.id.nsfw_text_view_item_post_detail_image_and_gif_autoplay)
CustomTextView mNSFWTextView; CustomTextView mNSFWTextView;
@BindView(R.id.spoiler_custom_text_view_item_post_detail_gif_autoplay) @BindView(R.id.spoiler_custom_text_view_item_post_detail_image_and_gif_autoplay)
CustomTextView mSpoilerTextView; CustomTextView mSpoilerTextView;
@BindView(R.id.flair_custom_text_view_item_post_detail_gif_autoplay) @BindView(R.id.flair_custom_text_view_item_post_detail_image_and_gif_autoplay)
CustomTextView mFlairTextView; CustomTextView mFlairTextView;
@BindView(R.id.awards_text_view_item_post_detail_gif_autoplay) @BindView(R.id.awards_text_view_item_post_detail_image_and_gif_autoplay)
TextView mAwardsTextView; TextView mAwardsTextView;
@BindView(R.id.image_view_wrapper_item_post_detail_gif_autoplay) @BindView(R.id.image_view_wrapper_item_post_detail_image_and_gif_autoplay)
RelativeLayout mRelativeLayout; RelativeLayout mRelativeLayout;
@BindView(R.id.load_wrapper_item_post_detail_gif_autoplay) @BindView(R.id.load_wrapper_item_post_detail_image_and_gif_autoplay)
RelativeLayout mLoadWrapper; RelativeLayout mLoadWrapper;
@BindView(R.id.progress_bar_item_post_detail_gif_autoplay) @BindView(R.id.progress_bar_item_post_detail_image_and_gif_autoplay)
ProgressBar mLoadImageProgressBar; ProgressBar mLoadImageProgressBar;
@BindView(R.id.load_image_error_text_view_item_post_detail_gif_autoplay) @BindView(R.id.load_image_error_text_view_item_post_detail_image_and_gif_autoplay)
TextView mLoadImageErrorTextView; TextView mLoadImageErrorTextView;
@BindView(R.id.image_view_item_post_detail_gif_autoplay) @BindView(R.id.image_view_item_post_detail_image_and_gif_autoplay)
AspectRatioGifImageView mImageView; AspectRatioGifImageView mImageView;
@BindView(R.id.bottom_constraint_layout_item_post_detail_gif_autoplay) @BindView(R.id.bottom_constraint_layout_item_post_detail_image_and_gif_autoplay)
ConstraintLayout mBottomConstraintLayout; ConstraintLayout mBottomConstraintLayout;
@BindView(R.id.plus_button_item_post_detail_gif_autoplay) @BindView(R.id.plus_button_item_post_detail_image_and_gif_autoplay)
ImageView mUpvoteButton; ImageView mUpvoteButton;
@BindView(R.id.score_text_view_item_post_detail_gif_autoplay) @BindView(R.id.score_text_view_item_post_detail_image_and_gif_autoplay)
TextView mScoreTextView; TextView mScoreTextView;
@BindView(R.id.minus_button_item_post_detail_gif_autoplay) @BindView(R.id.minus_button_item_post_detail_image_and_gif_autoplay)
ImageView mDownvoteButton; ImageView mDownvoteButton;
@BindView(R.id.comments_count_item_post_detail_gif_autoplay) @BindView(R.id.comments_count_item_post_detail_image_and_gif_autoplay)
TextView commentsCountTextView; TextView commentsCountTextView;
@BindView(R.id.save_button_item_post_detail_gif_autoplay) @BindView(R.id.save_button_item_post_detail_image_and_gif_autoplay)
ImageView mSaveButton; ImageView mSaveButton;
@BindView(R.id.share_button_item_post_detail_gif_autoplay) @BindView(R.id.share_button_item_post_detail_image_and_gif_autoplay)
ImageView mShareButton; ImageView mShareButton;
PostDetailGifAutoplayViewHolder(@NonNull View itemView) { PostDetailImageAndGifAutoplayViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
setBaseView(mIconGifImageView,
mSubredditTextView,
mUserTextView,
mAuthorFlairTextView,
mPostTimeTextView,
mTitleTextView,
mTypeTextView,
mCrosspostImageView,
mArchivedImageView,
mLockedImageView,
mNSFWTextView,
mSpoilerTextView,
mFlairTextView,
mAwardsTextView,
mBottomConstraintLayout,
mUpvoteButton,
mScoreTextView,
mDownvoteButton,
commentsCountTextView,
mSaveButton,
mShareButton);
mLoadImageProgressBar.setIndeterminateTintList(ColorStateList.valueOf(mColorAccent));
mLoadImageErrorTextView.setTextColor(mPrimaryTextColor);
mImageView.setOnClickListener(view -> {
if (mPost.getPostType() == Post.IMAGE_TYPE) {
Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class);
intent.putExtra(ViewImageOrGifActivity.IMAGE_URL_KEY, mPost.getUrl());
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, mPost.getSubredditNamePrefixed().substring(2)
+ "-" + mPost.getId().substring(3) + ".jpg");
intent.putExtra(ViewImageOrGifActivity.POST_TITLE_KEY, mPost.getTitle());
mActivity.startActivity(intent);
} else if (mPost.getPostType() == Post.GIF_TYPE) {
Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class);
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, mPost.getSubredditName()
+ "-" + mPost.getId() + ".gif");
intent.putExtra(ViewImageOrGifActivity.GIF_URL_KEY, mPost.getVideoUrl());
intent.putExtra(ViewImageOrGifActivity.POST_TITLE_KEY, mPost.getTitle());
mActivity.startActivity(intent);
}
});
}
}
class PostDetailImageViewHolder extends PostDetailBaseViewHolder {
@BindView(R.id.icon_gif_image_view_item_post_detail_image)
AspectRatioGifImageView mIconGifImageView;
@BindView(R.id.subreddit_text_view_item_post_detail_image)
TextView mSubredditTextView;
@BindView(R.id.user_text_view_item_post_detail_image)
TextView mUserTextView;
@BindView(R.id.author_flair_text_view_item_post_detail_image)
TextView mAuthorFlairTextView;
@BindView(R.id.post_time_text_view_item_post_detail_image)
TextView mPostTimeTextView;
@BindView(R.id.title_text_view_item_post_detail_image)
TextView mTitleTextView;
@BindView(R.id.type_text_view_item_post_detail_image)
CustomTextView mTypeTextView;
@BindView(R.id.crosspost_image_view_item_post_detail_image)
ImageView mCrosspostImageView;
@BindView(R.id.archived_image_view_item_post_detail_image)
ImageView mArchivedImageView;
@BindView(R.id.locked_image_view_item_post_detail_image)
ImageView mLockedImageView;
@BindView(R.id.nsfw_text_view_item_post_detail_image)
CustomTextView mNSFWTextView;
@BindView(R.id.spoiler_custom_text_view_item_post_detail_image)
CustomTextView mSpoilerTextView;
@BindView(R.id.flair_custom_text_view_item_post_detail_image)
CustomTextView mFlairTextView;
@BindView(R.id.awards_text_view_item_post_detail_image)
TextView mAwardsTextView;
@BindView(R.id.image_view_wrapper_item_post_detail_image)
RelativeLayout mRelativeLayout;
@BindView(R.id.load_wrapper_item_post_detail_image)
RelativeLayout mLoadWrapper;
@BindView(R.id.progress_bar_item_post_detail_image)
ProgressBar mLoadImageProgressBar;
@BindView(R.id.load_image_error_text_view_item_post_detail_image)
TextView mLoadImageErrorTextView;
@BindView(R.id.image_view_item_post_detail_image)
AspectRatioSubsamplingScaleImageView mImageView;
@BindView(R.id.bottom_constraint_layout_item_post_detail_image)
ConstraintLayout mBottomConstraintLayout;
@BindView(R.id.plus_button_item_post_detail_image)
ImageView mUpvoteButton;
@BindView(R.id.score_text_view_item_post_detail_image)
TextView mScoreTextView;
@BindView(R.id.minus_button_item_post_detail_image)
ImageView mDownvoteButton;
@BindView(R.id.comments_count_item_post_detail_image)
TextView commentsCountTextView;
@BindView(R.id.save_button_item_post_detail_image)
ImageView mSaveButton;
@BindView(R.id.share_button_item_post_detail_image)
ImageView mShareButton;
PostDetailImageViewHolder(@NonNull View itemView) {
super(itemView); super(itemView);
ButterKnife.bind(this, itemView); ButterKnife.bind(this, itemView);
setBaseView(mIconGifImageView, setBaseView(mIconGifImageView,

View File

@ -1,328 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="?attr/cardViewBackgroundColor">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraint_layout_item_post_detail_gif_autoplay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<ml.docilealligator.infinityforreddit.CustomView.AspectRatioGifImageView
android:id="@+id/icon_gif_image_view_item_post_detail_gif_autoplay"
android:layout_width="24dp"
android:layout_height="24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/subreddit_text_view_item_post_detail_gif_autoplay"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="8dp"
android:textSize="?attr/font_default"
android:fontFamily="?attr/font_family"
android:maxLines="2"
android:ellipsize="end"
app:layout_constraintStart_toEndOf="@+id/icon_gif_image_view_item_post_detail_gif_autoplay"
app:layout_constraintEnd_toStartOf="@id/guideline"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0" />
<TextView
android:id="@+id/user_text_view_item_post_detail_gif_autoplay"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="8dp"
android:textSize="?attr/font_default"
android:fontFamily="?attr/font_family"
android:maxLines="2"
android:ellipsize="end"
app:layout_constraintBottom_toTopOf="@+id/author_flair_text_view_item_post_detail_gif_autoplay"
app:layout_constraintStart_toEndOf="@+id/icon_gif_image_view_item_post_detail_gif_autoplay"
app:layout_constraintEnd_toStartOf="@id/guideline"
app:layout_constraintTop_toBottomOf="@+id/subreddit_text_view_item_post_detail_gif_autoplay"
app:layout_constraintHorizontal_bias="0" />
<TextView
android:id="@+id/author_flair_text_view_item_post_detail_gif_autoplay"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="8dp"
android:textSize="?attr/font_12"
android:fontFamily="?attr/font_family"
android:maxLines="2"
android:ellipsize="end"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/icon_gif_image_view_item_post_detail_gif_autoplay"
app:layout_constraintEnd_toStartOf="@id/guideline"
app:layout_constraintTop_toBottomOf="@+id/user_text_view_item_post_detail_gif_autoplay"
app:layout_constraintHorizontal_bias="0" />
<TextView
android:id="@+id/post_time_text_view_item_post_detail_gif_autoplay"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="end"
android:textSize="?attr/font_default"
android:fontFamily="?attr/font_family"
app:layout_constraintHorizontal_bias="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/guideline"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.6" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/title_text_view_item_post_detail_gif_autoplay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:textColor="?attr/primaryTextColor"
android:textSize="?attr/title_font_18"
android:fontFamily="?attr/title_font_family"
android:textIsSelectable="true"
android:enabled="true"
android:focusable="true"
android:longClickable="true" />
<com.nex3z.flowlayout.FlowLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
app:flChildSpacing="16dp"
app:flChildSpacingForLastRow="align"
app:flRowSpacing="8dp">
<com.libRG.CustomTextView
android:id="@+id/type_text_view_item_post_detail_gif_autoplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:text="@string/gif"
android:textSize="?attr/font_12"
android:fontFamily="?attr/font_family"
app:lib_setRadius="3dp"
app:lib_setRoundedView="true"
app:lib_setShape="rectangle" />
<com.libRG.CustomTextView
android:id="@+id/spoiler_custom_text_view_item_post_detail_gif_autoplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/spoiler"
android:textSize="?attr/font_12"
android:fontFamily="?attr/font_family"
android:padding="4dp"
android:visibility="gone"
app:lib_setRadius="3dp"
app:lib_setRoundedView="true"
app:lib_setShape="rectangle" />
<com.libRG.CustomTextView
android:id="@+id/nsfw_text_view_item_post_detail_gif_autoplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:text="@string/nsfw"
android:textSize="?attr/font_12"
android:fontFamily="?attr/font_family"
android:visibility="gone"
app:lib_setRadius="3dp"
app:lib_setRoundedView="true"
app:lib_setShape="rectangle" />
<com.libRG.CustomTextView
android:id="@+id/flair_custom_text_view_item_post_detail_gif_autoplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="4dp"
android:textSize="?attr/font_12"
android:fontFamily="?attr/font_family"
android:visibility="gone"
app:lib_setRadius="3dp"
app:lib_setRoundedView="true"
app:lib_setShape="rectangle" />
<ImageView
android:id="@+id/archived_image_view_item_post_detail_gif_autoplay"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_archive_outline"
android:visibility="gone" />
<ImageView
android:id="@+id/locked_image_view_item_post_detail_gif_autoplay"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_outline_lock_24dp"
android:visibility="gone" />
<ImageView
android:id="@+id/crosspost_image_view_item_post_detail_gif_autoplay"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/crosspost"
android:visibility="gone" />
<TextView
android:id="@+id/awards_text_view_item_post_detail_gif_autoplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="?attr/font_12"
android:fontFamily="?attr/font_family"
android:visibility="gone" />
</com.nex3z.flowlayout.FlowLayout>
<RelativeLayout
android:id="@+id/image_view_wrapper_item_post_detail_gif_autoplay"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ml.docilealligator.infinityforreddit.CustomView.AspectRatioGifImageView
android:id="@+id/image_view_item_post_detail_gif_autoplay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitStart" />
<RelativeLayout
android:id="@+id/load_wrapper_item_post_detail_gif_autoplay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true">
<ProgressBar
android:id="@+id/progress_bar_item_post_detail_gif_autoplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
<TextView
android:id="@+id/load_image_error_text_view_item_post_detail_gif_autoplay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_error_outline_black_24dp"
android:layout_centerInParent="true"
android:gravity="center"
android:text="@string/error_loading_image_tap_to_retry"
android:textSize="?attr/font_default"
android:fontFamily="?attr/font_family"
android:visibility="gone" />
</RelativeLayout>
</RelativeLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bottom_constraint_layout_item_post_detail_gif_autoplay">
<ImageView
android:id="@+id/plus_button_item_post_detail_gif_autoplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="12dp"
android:src="@drawable/ic_arrow_upward_grey_24dp"
android:tint="@android:color/tab_indicator_text"
android:background="?actionBarItemBackground"
android:clickable="true"
android:focusable="true"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/score_text_view_item_post_detail_gif_autoplay"
android:layout_width="64dp"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="?attr/font_12"
android:textStyle="bold"
android:fontFamily="?attr/font_family"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/plus_button_item_post_detail_gif_autoplay" />
<ImageView
android:id="@+id/minus_button_item_post_detail_gif_autoplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="12dp"
android:src="@drawable/ic_arrow_downward_grey_24dp"
android:tint="@android:color/tab_indicator_text"
android:background="?actionBarItemBackground"
android:clickable="true"
android:focusable="true"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/score_text_view_item_post_detail_gif_autoplay" />
<TextView
android:id="@+id/comments_count_item_post_detail_gif_autoplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="12dp"
android:gravity="center_vertical"
android:textSize="?attr/font_12"
android:textStyle="bold"
android:fontFamily="?attr/font_family"
android:drawableStart="@drawable/ic_comment_grey_24dp"
android:drawablePadding="12dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/minus_button_item_post_detail_gif_autoplay" />
<ImageView
android:id="@+id/save_button_item_post_detail_gif_autoplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="12dp"
android:tint="@android:color/tab_indicator_text"
android:background="?actionBarItemBackground"
android:clickable="true"
android:focusable="true"
app:layout_constraintHorizontal_bias="1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/comments_count_item_post_detail_gif_autoplay"
app:layout_constraintEnd_toStartOf="@id/share_button_item_post_detail_gif_autoplay" />
<ImageView
android:id="@+id/share_button_item_post_detail_gif_autoplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="12dp"
android:src="@drawable/ic_share_grey_24dp"
android:background="?actionBarItemBackground"
android:clickable="true"
android:focusable="true"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>

View File

@ -7,13 +7,13 @@
android:background="?attr/cardViewBackgroundColor"> android:background="?attr/cardViewBackgroundColor">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraint_layout_item_post_detail_image" android:id="@+id/constraint_layout_item_post_detail_image_and_gif_autoplay"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="16dp"> android:padding="16dp">
<ml.docilealligator.infinityforreddit.CustomView.AspectRatioGifImageView <ml.docilealligator.infinityforreddit.CustomView.AspectRatioGifImageView
android:id="@+id/icon_gif_image_view_item_post_detail_image" android:id="@+id/icon_gif_image_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="24dp" android:layout_width="24dp"
android:layout_height="24dp" android:layout_height="24dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
@ -21,7 +21,7 @@
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/subreddit_text_view_item_post_detail_image" android:id="@+id/subreddit_text_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
@ -30,13 +30,13 @@
android:fontFamily="?attr/font_family" android:fontFamily="?attr/font_family"
android:maxLines="2" android:maxLines="2"
android:ellipsize="end" android:ellipsize="end"
app:layout_constraintStart_toEndOf="@+id/icon_gif_image_view_item_post_detail_image" app:layout_constraintStart_toEndOf="@+id/icon_gif_image_view_item_post_detail_image_and_gif_autoplay"
app:layout_constraintEnd_toStartOf="@id/guideline" app:layout_constraintEnd_toStartOf="@id/guideline"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0" /> app:layout_constraintHorizontal_bias="0" />
<TextView <TextView
android:id="@+id/user_text_view_item_post_detail_image" android:id="@+id/user_text_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
@ -45,14 +45,14 @@
android:fontFamily="?attr/font_family" android:fontFamily="?attr/font_family"
android:maxLines="2" android:maxLines="2"
android:ellipsize="end" android:ellipsize="end"
app:layout_constraintBottom_toTopOf="@+id/author_flair_text_view_item_post_detail_image" app:layout_constraintBottom_toTopOf="@+id/author_flair_text_view_item_post_detail_image_and_gif_autoplay"
app:layout_constraintStart_toEndOf="@+id/icon_gif_image_view_item_post_detail_image" app:layout_constraintStart_toEndOf="@+id/icon_gif_image_view_item_post_detail_image_and_gif_autoplay"
app:layout_constraintEnd_toStartOf="@id/guideline" app:layout_constraintEnd_toStartOf="@id/guideline"
app:layout_constraintTop_toBottomOf="@+id/subreddit_text_view_item_post_detail_image" app:layout_constraintTop_toBottomOf="@+id/subreddit_text_view_item_post_detail_image_and_gif_autoplay"
app:layout_constraintHorizontal_bias="0" /> app:layout_constraintHorizontal_bias="0" />
<TextView <TextView
android:id="@+id/author_flair_text_view_item_post_detail_image" android:id="@+id/author_flair_text_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
@ -63,13 +63,13 @@
android:ellipsize="end" android:ellipsize="end"
android:visibility="gone" android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/icon_gif_image_view_item_post_detail_image" app:layout_constraintStart_toEndOf="@+id/icon_gif_image_view_item_post_detail_image_and_gif_autoplay"
app:layout_constraintEnd_toStartOf="@id/guideline" app:layout_constraintEnd_toStartOf="@id/guideline"
app:layout_constraintTop_toBottomOf="@+id/user_text_view_item_post_detail_image" app:layout_constraintTop_toBottomOf="@+id/user_text_view_item_post_detail_image_and_gif_autoplay"
app:layout_constraintHorizontal_bias="0" /> app:layout_constraintHorizontal_bias="0" />
<TextView <TextView
android:id="@+id/post_time_text_view_item_post_detail_image" android:id="@+id/post_time_text_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="end" android:gravity="end"
@ -91,7 +91,7 @@
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<TextView <TextView
android:id="@+id/title_text_view_item_post_detail_image" android:id="@+id/title_text_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingStart="16dp" android:paddingStart="16dp"
@ -113,7 +113,7 @@
app:flRowSpacing="8dp"> app:flRowSpacing="8dp">
<com.libRG.CustomTextView <com.libRG.CustomTextView
android:id="@+id/type_text_view_item_post_detail_image" android:id="@+id/type_text_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="4dp" android:padding="4dp"
@ -125,7 +125,7 @@
app:lib_setShape="rectangle" /> app:lib_setShape="rectangle" />
<com.libRG.CustomTextView <com.libRG.CustomTextView
android:id="@+id/spoiler_custom_text_view_item_post_detail_image" android:id="@+id/spoiler_custom_text_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
@ -139,7 +139,7 @@
app:lib_setShape="rectangle" /> app:lib_setShape="rectangle" />
<com.libRG.CustomTextView <com.libRG.CustomTextView
android:id="@+id/nsfw_text_view_item_post_detail_image" android:id="@+id/nsfw_text_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="4dp" android:padding="4dp"
@ -152,7 +152,7 @@
app:lib_setShape="rectangle" /> app:lib_setShape="rectangle" />
<com.libRG.CustomTextView <com.libRG.CustomTextView
android:id="@+id/flair_custom_text_view_item_post_detail_image" android:id="@+id/flair_custom_text_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
@ -165,28 +165,28 @@
app:lib_setShape="rectangle" /> app:lib_setShape="rectangle" />
<ImageView <ImageView
android:id="@+id/archived_image_view_item_post_detail_image" android:id="@+id/archived_image_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="20dp" android:layout_width="20dp"
android:layout_height="20dp" android:layout_height="20dp"
android:src="@drawable/ic_archive_outline" android:src="@drawable/ic_archive_outline"
android:visibility="gone" /> android:visibility="gone" />
<ImageView <ImageView
android:id="@+id/locked_image_view_item_post_detail_image" android:id="@+id/locked_image_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="20dp" android:layout_width="20dp"
android:layout_height="20dp" android:layout_height="20dp"
android:src="@drawable/ic_outline_lock_24dp" android:src="@drawable/ic_outline_lock_24dp"
android:visibility="gone" /> android:visibility="gone" />
<ImageView <ImageView
android:id="@+id/crosspost_image_view_item_post_detail_image" android:id="@+id/crosspost_image_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="20dp" android:layout_width="20dp"
android:layout_height="20dp" android:layout_height="20dp"
android:src="@drawable/crosspost" android:src="@drawable/crosspost"
android:visibility="gone" /> android:visibility="gone" />
<TextView <TextView
android:id="@+id/awards_text_view_item_post_detail_image" android:id="@+id/awards_text_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="?attr/font_12" android:textSize="?attr/font_12"
@ -196,32 +196,31 @@
</com.nex3z.flowlayout.FlowLayout> </com.nex3z.flowlayout.FlowLayout>
<RelativeLayout <RelativeLayout
android:id="@+id/image_view_wrapper_item_post_detail_image" android:id="@+id/image_view_wrapper_item_post_detail_image_and_gif_autoplay"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<ml.docilealligator.infinityforreddit.CustomView.AspectRatioSubsamplingScaleImageView <ml.docilealligator.infinityforreddit.CustomView.AspectRatioGifImageView
android:id="@+id/image_view_item_post_detail_image" android:id="@+id/image_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:quickScaleEnabled="false" android:adjustViewBounds="true"
app:zoomEnabled="false" android:scaleType="fitStart" />
app:panEnabled="false" />
<RelativeLayout <RelativeLayout
android:id="@+id/load_wrapper_item_post_detail_image" android:id="@+id/load_wrapper_item_post_detail_image_and_gif_autoplay"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerInParent="true"> android:layout_centerInParent="true">
<ProgressBar <ProgressBar
android:id="@+id/progress_bar_item_post_detail_image" android:id="@+id/progress_bar_item_post_detail_image_and_gif_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerInParent="true" /> android:layout_centerInParent="true" />
<TextView <TextView
android:id="@+id/load_image_error_text_view_item_post_detail_image" android:id="@+id/load_image_error_text_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_error_outline_black_24dp" android:drawableTop="@drawable/ic_error_outline_black_24dp"
@ -239,10 +238,10 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/bottom_constraint_layout_item_post_detail_image"> android:id="@+id/bottom_constraint_layout_item_post_detail_image_and_gif_autoplay">
<ImageView <ImageView
android:id="@+id/plus_button_item_post_detail_image" android:id="@+id/plus_button_item_post_detail_image_and_gif_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="12dp" android:padding="12dp"
@ -256,7 +255,7 @@
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintStart_toStartOf="parent" />
<TextView <TextView
android:id="@+id/score_text_view_item_post_detail_image" android:id="@+id/score_text_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
@ -265,10 +264,10 @@
android:fontFamily="?attr/font_family" android:fontFamily="?attr/font_family"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/plus_button_item_post_detail_image" /> app:layout_constraintStart_toEndOf="@id/plus_button_item_post_detail_image_and_gif_autoplay" />
<ImageView <ImageView
android:id="@+id/minus_button_item_post_detail_image" android:id="@+id/minus_button_item_post_detail_image_and_gif_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="12dp" android:padding="12dp"
@ -279,10 +278,10 @@
android:focusable="true" android:focusable="true"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/score_text_view_item_post_detail_image" /> app:layout_constraintStart_toEndOf="@id/score_text_view_item_post_detail_image_and_gif_autoplay" />
<TextView <TextView
android:id="@+id/comments_count_item_post_detail_image" android:id="@+id/comments_count_item_post_detail_image_and_gif_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="12dp" android:padding="12dp"
@ -294,10 +293,10 @@
android:drawablePadding="12dp" android:drawablePadding="12dp"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/minus_button_item_post_detail_image" /> app:layout_constraintStart_toEndOf="@id/minus_button_item_post_detail_image_and_gif_autoplay" />
<ImageView <ImageView
android:id="@+id/save_button_item_post_detail_image" android:id="@+id/save_button_item_post_detail_image_and_gif_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="12dp" android:padding="12dp"
@ -308,11 +307,11 @@
app:layout_constraintHorizontal_bias="1" app:layout_constraintHorizontal_bias="1"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/comments_count_item_post_detail_image" app:layout_constraintStart_toEndOf="@id/comments_count_item_post_detail_image_and_gif_autoplay"
app:layout_constraintEnd_toStartOf="@id/share_button_item_post_detail_image" /> app:layout_constraintEnd_toStartOf="@id/share_button_item_post_detail_image_and_gif_autoplay" />
<ImageView <ImageView
android:id="@+id/share_button_item_post_detail_image" android:id="@+id/share_button_item_post_detail_image_and_gif_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="12dp" android:padding="12dp"