aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
authorAlex Ning <chineseperson5@gmail.com>2020-07-11 14:54:29 +0000
committerAlex Ning <chineseperson5@gmail.com>2020-07-11 14:54:29 +0000
commitd17408e2c9f15b95c5d5839a1c9bb1aafddc4fd0 (patch)
tree09119fe43702141f9cf986703e0cd8aa5b8ec0e3 /app/src/main/java
parent98f4da3868b5caf1082347f97faea49db595091d (diff)
downloadinfinity-for-reddit-d17408e2c9f15b95c5d5839a1c9bb1aafddc4fd0.tar
infinity-for-reddit-d17408e2c9f15b95c5d5839a1c9bb1aafddc4fd0.tar.gz
infinity-for-reddit-d17408e2c9f15b95c5d5839a1c9bb1aafddc4fd0.tar.bz2
infinity-for-reddit-d17408e2c9f15b95c5d5839a1c9bb1aafddc4fd0.tar.lz
infinity-for-reddit-d17408e2c9f15b95c5d5839a1c9bb1aafddc4fd0.tar.xz
infinity-for-reddit-d17408e2c9f15b95c5d5839a1c9bb1aafddc4fd0.tar.zst
infinity-for-reddit-d17408e2c9f15b95c5d5839a1c9bb1aafddc4fd0.zip
Use SubsamplingScaleImageView and BigImageView to display images in ViewImageOrGifActivity and CommentAndPostRecyclerViewAdapter to avoid app crashing. Create another ViewModel, PostDetailGifAutoplayViewHolder in CommentAndPostRecyclerViewAdapter.
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewImageOrGifActivity.java116
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPostDetailActivity.java14
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java635
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/CustomView/AspectRatioBigImageView.java60
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/CustomView/AspectRatioGifImageView.java2
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/CustomView/AspectRatioSubsamplingScaleImageView.java54
6 files changed, 766 insertions, 115 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewImageOrGifActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewImageOrGifActivity.java
index 68631472..8c7da456 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewImageOrGifActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewImageOrGifActivity.java
@@ -26,7 +26,6 @@ import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
-import com.alexvasilkov.gestures.views.GestureFrameLayout;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.DataSource;
@@ -36,6 +35,11 @@ import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.request.transition.Transition;
+import com.github.piasy.biv.BigImageViewer;
+import com.github.piasy.biv.loader.ImageLoader;
+import com.github.piasy.biv.loader.glide.GlideImageLoader;
+import com.github.piasy.biv.view.BigImageView;
+import com.github.piasy.biv.view.GlideImageViewFactory;
import com.thefuntasty.hauler.DragDirection;
import com.thefuntasty.hauler.HaulerView;
@@ -63,7 +67,6 @@ import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.WallpaperSetter;
-import pl.droidsonroids.gif.GifImageView;
public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWallpaperCallback {
@@ -77,9 +80,13 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
@BindView(R.id.progress_bar_view_image_or_gif_activity)
ProgressBar mProgressBar;
@BindView(R.id.image_view_view_image_or_gif_activity)
- GifImageView mImageView;
+ BigImageView mImageView;
+ /*@BindView(R.id.image_view_view_image_or_gif_activity)
+ SubsamplingScaleImageView mImageView;
@BindView(R.id.gesture_layout_view_image_or_gif_activity)
GestureFrameLayout gestureLayout;
+ @BindView(R.id.gif_view_view_image_or_gif_activity)
+ GifImageView mGifView;*/
@BindView(R.id.load_image_error_linear_layout_view_image_or_gif_activity)
LinearLayout mLoadErrorLinearLayout;
@Inject
@@ -119,6 +126,8 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
getTheme().applyStyle(ContentFontFamily.valueOf(mSharedPreferences
.getString(SharedPreferencesUtils.CONTENT_FONT_FAMILY_KEY, ContentFontFamily.Default.name())).getResId(), true);
+ BigImageViewer.initialize(GlideImageLoader.with(this));
+
setContentView(R.layout.activity_view_image_or_gif);
ButterKnife.bind(this);
@@ -161,10 +170,6 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
loadImage();
});
- loadImage();
-
- gestureLayout.getController().getSettings().setMaxZoom(10f).setDoubleTapZoom(2f).setPanEnabled(true);
-
mImageView.setOnClickListener(view -> {
if (isActionBarHidden) {
getWindow().getDecorView().setSystemUiVisibility(
@@ -183,23 +188,102 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
isActionBarHidden = true;
}
});
- }
- private void loadImage() {
- glide.load(mImageUrl).listener(new RequestListener<Drawable>() {
+ mImageView.setImageViewFactory(new GlideImageViewFactory());
+
+ 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 boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
+ public void onSuccess(File image) {
mProgressBar.setVisibility(View.GONE);
- mLoadErrorLinearLayout.setVisibility(View.VISIBLE);
- return false;
}
@Override
- public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
+ public void onFail(Exception error) {
mProgressBar.setVisibility(View.GONE);
- return false;
+ mLoadErrorLinearLayout.setVisibility(View.VISIBLE);
}
- }).override(Target.SIZE_ORIGINAL).into(mImageView);
+ });
+
+ /*if (isGif) {
+ gestureLayout.setVisibility(View.VISIBLE);
+ gestureLayout.getController().getSettings().setMaxZoom(10f).setDoubleTapZoom(2f).setPanEnabled(true);
+ mGifView.setOnClickListener(imageViewOnClickListener);
+ } else {
+ mImageView.setVisibility(View.VISIBLE);
+ mImageView.setOnClickListener(imageViewOnClickListener);
+ }*/
+
+ loadImage();
+ }
+
+ private void loadImage() {
+ mImageView.showImage(Uri.parse(mImageUrl));
+ /*if (isGif) {
+ glide.load(mImageUrl).listener(new RequestListener<Drawable>() {
+ @Override
+ public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
+ mProgressBar.setVisibility(View.GONE);
+ mLoadErrorLinearLayout.setVisibility(View.VISIBLE);
+ return false;
+ }
+
+ @Override
+ public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
+ mProgressBar.setVisibility(View.GONE);
+ return false;
+ }
+ }).override(Target.SIZE_ORIGINAL).into(mGifView);
+ } else {
+ glide.asBitmap().load(mImageUrl).listener(new RequestListener<Bitmap>() {
+ @Override
+ public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
+ mProgressBar.setVisibility(View.GONE);
+ mLoadErrorLinearLayout.setVisibility(View.VISIBLE);
+ return false;
+ }
+
+ @Override
+ public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
+ mProgressBar.setVisibility(View.GONE);
+ return false;
+ }
+ }).override(Target.SIZE_ORIGINAL).into(new CustomTarget<Bitmap>() {
+ @Override
+ public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
+ mImageView.setImage(ImageSource.bitmap(resource));
+ }
+
+ @Override
+ public void onLoadCleared(@Nullable Drawable placeholder) {
+
+ }
+ });
+ }*/
}
@Override
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPostDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPostDetailActivity.java
index 50c85c54..af2ac5aa 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPostDetailActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPostDetailActivity.java
@@ -31,6 +31,8 @@ import androidx.transition.TransitionManager;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.evernote.android.state.State;
+import com.github.piasy.biv.BigImageViewer;
+import com.github.piasy.biv.loader.glide.GlideImageLoader;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
@@ -63,6 +65,9 @@ import ml.docilealligator.infinityforreddit.AsyncTask.SwitchAccountAsyncTask;
import ml.docilealligator.infinityforreddit.BottomSheetFragment.FlairBottomSheetFragment;
import ml.docilealligator.infinityforreddit.BottomSheetFragment.PostCommentSortTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.Comment.Comment;
+import ml.docilealligator.infinityforreddit.Comment.FetchComment;
+import ml.docilealligator.infinityforreddit.Comment.FetchRemovedComment;
+import ml.docilealligator.infinityforreddit.Comment.ParseComment;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.CustomView.CustomToroContainer;
import ml.docilealligator.infinityforreddit.DeleteThing;
@@ -72,18 +77,15 @@ import ml.docilealligator.infinityforreddit.Event.ChangeWifiStatusEvent;
import ml.docilealligator.infinityforreddit.Event.PostUpdateEventToDetailActivity;
import ml.docilealligator.infinityforreddit.Event.PostUpdateEventToPostList;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
-import ml.docilealligator.infinityforreddit.Comment.FetchComment;
-import ml.docilealligator.infinityforreddit.Comment.FetchRemovedComment;
-import ml.docilealligator.infinityforreddit.Post.FetchRemovedPost;
import ml.docilealligator.infinityforreddit.Flair;
import ml.docilealligator.infinityforreddit.Infinity;
-import ml.docilealligator.infinityforreddit.Comment.ParseComment;
+import ml.docilealligator.infinityforreddit.Message.ReadMessage;
import ml.docilealligator.infinityforreddit.Post.FetchPost;
+import ml.docilealligator.infinityforreddit.Post.FetchRemovedPost;
import ml.docilealligator.infinityforreddit.Post.HidePost;
import ml.docilealligator.infinityforreddit.Post.ParsePost;
import ml.docilealligator.infinityforreddit.Post.Post;
import ml.docilealligator.infinityforreddit.R;
-import ml.docilealligator.infinityforreddit.Message.ReadMessage;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SaveThing;
import ml.docilealligator.infinityforreddit.SortType;
@@ -208,6 +210,8 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
super.onCreate(savedInstanceState);
+ BigImageViewer.initialize(GlideImageLoader.with(this));
+
setContentView(R.layout.activity_view_post_detail);
Bridge.restoreInstanceState(this, savedInstanceState);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java
index 014f2cbd..45e3495e 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java
@@ -5,6 +5,7 @@ import android.content.SharedPreferences;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Resources;
+import android.graphics.Bitmap;
import android.graphics.ColorFilter;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
@@ -41,7 +42,12 @@ import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
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.transition.Transition;
+import com.davemorrissey.labs.subscaleview.ImageSource;
+import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
+import com.github.piasy.biv.loader.ImageLoader;
import com.google.android.exoplayer2.metadata.Metadata;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.text.Cue;
@@ -50,10 +56,10 @@ import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
import com.google.android.exoplayer2.ui.PlayerView;
import com.libRG.CustomTextView;
import com.lsjwzh.widget.materialloadingprogressbar.CircleProgressBar;
-import com.santalu.aspectratioimageview.AspectRatioImageView;
import org.commonmark.ext.gfm.tables.TableBlock;
+import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -97,7 +103,9 @@ import ml.docilealligator.infinityforreddit.BottomSheetFragment.ShareLinkBottomS
import ml.docilealligator.infinityforreddit.Comment.Comment;
import ml.docilealligator.infinityforreddit.Comment.FetchComment;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
+import ml.docilealligator.infinityforreddit.CustomView.AspectRatioBigImageView;
import ml.docilealligator.infinityforreddit.CustomView.AspectRatioGifImageView;
+import ml.docilealligator.infinityforreddit.CustomView.AspectRatioSubsamplingScaleImageView;
import ml.docilealligator.infinityforreddit.CustomView.MarkwonLinearLayoutManager;
import ml.docilealligator.infinityforreddit.Post.Post;
import ml.docilealligator.infinityforreddit.Post.PostDataSource;
@@ -109,7 +117,6 @@ import ml.docilealligator.infinityforreddit.Utils.GlideImageGetter;
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.Utils.Utils;
import ml.docilealligator.infinityforreddit.VoteThing;
-import pl.droidsonroids.gif.GifImageView;
import retrofit2.Retrofit;
import static ml.docilealligator.infinityforreddit.Activity.CommentActivity.WRITE_COMMENT_REQUEST_CODE;
@@ -117,19 +124,20 @@ import static ml.docilealligator.infinityforreddit.Activity.CommentActivity.WRIT
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_AND_GIF_PREVIEW = 2;
- private static final int VIEW_TYPE_POST_DETAIL_IMAGE_AND_GIF_AUTOPLAY = 3;
- private static final int VIEW_TYPE_POST_DETAIL_LINK = 4;
- private static final int VIEW_TYPE_POST_DETAIL_NO_PREVIEW_LINK = 5;
- private static final int VIEW_TYPE_POST_DETAIL_TEXT_TYPE = 6;
- private static final int VIEW_TYPE_FIRST_LOADING = 7;
- private static final int VIEW_TYPE_FIRST_LOADING_FAILED = 8;
- private static final int VIEW_TYPE_NO_COMMENT_PLACEHOLDER = 9;
- private static final int VIEW_TYPE_COMMENT = 10;
- private static final int VIEW_TYPE_COMMENT_FULLY_COLLAPSED = 11;
- private static final int VIEW_TYPE_LOAD_MORE_CHILD_COMMENTS = 12;
- private static final int VIEW_TYPE_IS_LOADING_MORE_COMMENTS = 13;
- private static final int VIEW_TYPE_LOAD_MORE_COMMENTS_FAILED = 14;
- private static final int VIEW_TYPE_VIEW_ALL_COMMENTS = 15;
+ private static final int VIEW_TYPE_POST_DETAIL_GIF_AUTOPLAY = 3;
+ private static final int VIEW_TYPE_POST_DETAIL_IMAGE = 4;
+ private static final int VIEW_TYPE_POST_DETAIL_LINK = 5;
+ private static final int VIEW_TYPE_POST_DETAIL_NO_PREVIEW_LINK = 6;
+ private static final int VIEW_TYPE_POST_DETAIL_TEXT_TYPE = 7;
+ private static final int VIEW_TYPE_FIRST_LOADING = 8;
+ private static final int VIEW_TYPE_FIRST_LOADING_FAILED = 9;
+ private static final int VIEW_TYPE_NO_COMMENT_PLACEHOLDER = 10;
+ private static final int VIEW_TYPE_COMMENT = 11;
+ private static final int VIEW_TYPE_COMMENT_FULLY_COLLAPSED = 12;
+ private static final int VIEW_TYPE_LOAD_MORE_CHILD_COMMENTS = 13;
+ private static final int VIEW_TYPE_IS_LOADING_MORE_COMMENTS = 14;
+ private static final int VIEW_TYPE_LOAD_MORE_COMMENTS_FAILED = 15;
+ private static final int VIEW_TYPE_VIEW_ALL_COMMENTS = 16;
private AppCompatActivity mActivity;
private Retrofit mRetrofit;
@@ -432,12 +440,12 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
if (!mAutoplayNsfwVideos && mPost.isNSFW()) {
return VIEW_TYPE_POST_DETAIL_VIDEO_AND_GIF_PREVIEW;
}
- return VIEW_TYPE_POST_DETAIL_IMAGE_AND_GIF_AUTOPLAY;
+ return VIEW_TYPE_POST_DETAIL_GIF_AUTOPLAY;
} else {
return VIEW_TYPE_POST_DETAIL_VIDEO_AND_GIF_PREVIEW;
}
case Post.IMAGE_TYPE:
- return VIEW_TYPE_POST_DETAIL_IMAGE_AND_GIF_AUTOPLAY;
+ return VIEW_TYPE_POST_DETAIL_IMAGE;
case Post.LINK_TYPE:
return VIEW_TYPE_POST_DETAIL_LINK;
case Post.NO_PREVIEW_LINK_TYPE:
@@ -511,8 +519,10 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
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:
return new PostDetailVideoAndGifPreviewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_video_and_gif_preview, parent, false));
- case VIEW_TYPE_POST_DETAIL_IMAGE_AND_GIF_AUTOPLAY:
- return new PostDetailImageAndGifAutoplayViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_image_and_gif_autoplay, parent, false));
+ case VIEW_TYPE_POST_DETAIL_GIF_AUTOPLAY:
+ return new PostDetailGifAutoplayViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_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:
return new PostDetailLinkViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_link, parent, false));
case VIEW_TYPE_POST_DETAIL_NO_PREVIEW_LINK:
@@ -703,7 +713,17 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
if (holder instanceof PostDetailVideoAutoplayViewHolder) {
((PostDetailVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) mPost.getPreviewWidth() / mPost.getPreviewHeight());
((PostDetailVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.VISIBLE);
- mGlide.load(mPost.getPreviewUrl()).apply(RequestOptions.noTransformation()).into(((PostDetailVideoAutoplayViewHolder) holder).previewImageView);
+ mGlide.asBitmap().load(mPost.getPreviewUrl()).into(new CustomTarget<Bitmap>() {
+ @Override
+ public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
+ ((PostDetailVideoAutoplayViewHolder) holder).previewImageView.setImage(ImageSource.bitmap(resource));
+ }
+
+ @Override
+ public void onLoadCleared(@Nullable Drawable placeholder) {
+
+ }
+ });
((PostDetailVideoAutoplayViewHolder) holder).setVolume(mMuteAutoplayingVideos || (mPost.isNSFW() && mMuteNSFWVideo) ? 0f : 1f);
((PostDetailVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(mPost.getVideoUrl()));
} else if (holder instanceof PostDetailVideoAndGifPreviewHolder) {
@@ -714,20 +734,17 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
}
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setRatio((float) mPost.getPreviewHeight() / (float) mPost.getPreviewWidth());
loadImage((PostDetailVideoAndGifPreviewHolder) holder);
- } else if (holder instanceof PostDetailImageAndGifAutoplayViewHolder) {
- if (mPost.getPostType() == Post.GIF_TYPE) {
- ((PostDetailImageAndGifAutoplayViewHolder) holder).mTypeTextView.setText(mActivity.getString(R.string.gif));
- } else {
- ((PostDetailImageAndGifAutoplayViewHolder) holder).mTypeTextView.setText(mActivity.getString(R.string.image));
- }
-
+ } else if (holder instanceof PostDetailGifAutoplayViewHolder) {
+ ((PostDetailGifAutoplayViewHolder) holder).mImageView.setRatio((float) mPost.getPreviewHeight() / (float) mPost.getPreviewWidth());
+ loadImage((PostDetailGifAutoplayViewHolder) holder);
+ } else if (holder instanceof PostDetailImageViewHolder) {
if (mPost.getPreviewWidth() <= 0 || mPost.getPreviewHeight() <= 0) {
- ((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
- ((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.getLayoutParams().height = (int) (400 * mScale);
+ ((PostDetailImageViewHolder) holder).mImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP);
+ ((PostDetailImageViewHolder) holder).mImageView.getLayoutParams().height = (int) (400 * mScale);
}
- ((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setRatio((float) mPost.getPreviewHeight() / (float) mPost.getPreviewWidth());
- loadImage((PostDetailImageAndGifAutoplayViewHolder) holder);
+ ((PostDetailImageViewHolder) holder).mImageView.setRatio((float) mPost.getPreviewHeight() / (float) mPost.getPreviewWidth());
+ loadImage((PostDetailImageViewHolder) holder);
} else if (holder instanceof PostDetailLinkViewHolder) {
String domain = Uri.parse(mPost.getUrl()).getHost();
((PostDetailLinkViewHolder) holder).mLinkTextView.setText(domain);
@@ -1217,40 +1234,94 @@ 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();
- RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(url)
- .listener(new RequestListener<Drawable>() {
+ if (holder instanceof PostDetailGifAutoplayViewHolder) {
+ ((PostDetailGifAutoplayViewHolder) 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) {
+ ((PostDetailGifAutoplayViewHolder) holder).mLoadWrapper.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onFail(Exception error) {
+ ((PostDetailGifAutoplayViewHolder) holder).mLoadImageProgressBar.setVisibility(View.GONE);
+ ((PostDetailGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.VISIBLE);
+ ((PostDetailGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setOnClickListener(view -> {
+ ((PostDetailGifAutoplayViewHolder) holder).mLoadImageProgressBar.setVisibility(View.VISIBLE);
+ ((PostDetailGifAutoplayViewHolder) holder).mLoadImageErrorTextView.setVisibility(View.GONE);
+ loadImage(holder);
+ });
+ }
+ });
+ ((PostDetailGifAutoplayViewHolder) holder).mImageView.showImage(Uri.parse(mPost.getUrl()));
+ } 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<Drawable> 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);
+ 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(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
- ((PostDetailImageAndGifAutoplayViewHolder) holder).mLoadWrapper.setVisibility(View.GONE);
+ public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
+ ((PostDetailImageViewHolder) holder).mLoadWrapper.setVisibility(View.GONE);
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.bitmap(resource));
+ }
+
+ @Override
+ public void onLoadCleared(@Nullable Drawable placeholder) {
+
+ }
+ };
+
if ((mPost.isNSFW() && mNeedBlurNsfw) || (mPost.isSpoiler() && mNeedBlurSpoiler)) {
- imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
- .into(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView);
+ imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))).into(customTarget);
} else {
- imageRequestBuilder.apply(RequestOptions.noTransformation()).into(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView);
+ imageRequestBuilder.apply(RequestOptions.noTransformation()).into(customTarget);
}
} else if (holder instanceof PostDetailVideoAndGifPreviewHolder) {
- RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(mPost.getPreviewUrl())
- .listener(new RequestListener<Drawable>() {
+ RequestBuilder<Bitmap> imageRequestBuilder = mGlide.asBitmap().load(mPost.getPreviewUrl())
+ .listener(new RequestListener<Bitmap>() {
@Override
- public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
+ 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 -> {
@@ -1262,23 +1333,35 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
}
@Override
- public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
+ public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
((PostDetailVideoAndGifPreviewHolder) holder).mLoadWrapper.setVisibility(View.GONE);
return false;
}
});
+ CustomTarget<Bitmap> customTarget = new CustomTarget<Bitmap>() {
+ @Override
+ public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
+ ((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setImage(ImageSource.bitmap(resource));
+ }
+
+ @Override
+ public void onLoadCleared(@Nullable Drawable placeholder) {
+
+ }
+ };
+
if ((mPost.isNSFW() && mNeedBlurNsfw) || (mPost.isSpoiler() && mNeedBlurSpoiler)) {
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
- .into(((PostDetailVideoAndGifPreviewHolder) holder).mImageView);
+ .into(customTarget);
} else {
- imageRequestBuilder.apply(RequestOptions.noTransformation()).into(((PostDetailVideoAndGifPreviewHolder) holder).mImageView);
+ imageRequestBuilder.apply(RequestOptions.noTransformation()).into(customTarget);
}
} else if (holder instanceof PostDetailLinkViewHolder) {
- RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(mPost.getPreviewUrl())
- .listener(new RequestListener<Drawable>() {
+ RequestBuilder<Bitmap> imageRequestBuilder = mGlide.asBitmap().load(mPost.getPreviewUrl())
+ .listener(new RequestListener<Bitmap>() {
@Override
- public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
+ 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 -> {
@@ -1290,21 +1373,285 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
}
@Override
- public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
+ public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
((PostDetailLinkViewHolder) holder).mLoadWrapper.setVisibility(View.GONE);
return false;
}
});
+ CustomTarget<Bitmap> customTarget = new CustomTarget<Bitmap>() {
+ @Override
+ public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
+ ((PostDetailLinkViewHolder) holder).mImageView.setImage(ImageSource.bitmap(resource));
+ }
+
+ @Override
+ public void onLoadCleared(@Nullable Drawable placeholder) {
+
+ }
+ };
+
if ((mPost.isNSFW() && mNeedBlurNsfw) || (mPost.isSpoiler() && mNeedBlurSpoiler)) {
- imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
- .into(((PostDetailLinkViewHolder) holder).mImageView);
+ imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))).into(customTarget);
} else {
- imageRequestBuilder.apply(RequestOptions.noTransformation()).into(((PostDetailLinkViewHolder) holder).mImageView);
+ imageRequestBuilder.into(customTarget);
}
}
}
+ /*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) {
mPost = post;
notifyItemChanged(0);
@@ -1614,8 +1961,8 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
((PostDetailVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.GONE);
} else if (holder instanceof PostDetailVideoAndGifPreviewHolder) {
mGlide.clear(((PostDetailVideoAndGifPreviewHolder) holder).mImageView);
- } else if (holder instanceof PostDetailImageAndGifAutoplayViewHolder) {
- mGlide.clear(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView);
+ } else if (holder instanceof PostDetailImageViewHolder) {
+ mGlide.clear(((PostDetailImageViewHolder) holder).mImageView);
} else if (holder instanceof PostDetailLinkViewHolder) {
mGlide.clear(((PostDetailLinkViewHolder) holder).mImageView);
}
@@ -2112,7 +2459,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
@BindView(R.id.player_view_item_post_detail_video_autoplay)
PlayerView playerView;
@BindView(R.id.preview_image_view_item_post_detail_video_autoplay)
- GifImageView previewImageView;
+ SubsamplingScaleImageView previewImageView;
@BindView(R.id.mute_exo_playback_control_view)
ImageView muteButton;
@BindView(R.id.fullscreen_exo_playback_control_view)
@@ -2331,7 +2678,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
@BindView(R.id.load_image_error_text_view_item_post_detail_video_and_gif_preview)
TextView mLoadImageErrorTextView;
@BindView(R.id.image_view_item_post_detail_video_and_gif_preview)
- AspectRatioImageView mImageView;
+ AspectRatioSubsamplingScaleImageView mImageView;
@BindView(R.id.bottom_constraint_layout_item_post_detail_video_and_gif_preview)
ConstraintLayout mBottomConstraintLayout;
@BindView(R.id.plus_button_item_post_detail_video_and_gif_preview)
@@ -2397,61 +2744,163 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
}
}
- class PostDetailImageAndGifAutoplayViewHolder extends PostDetailBaseViewHolder {
- @BindView(R.id.icon_gif_image_view_item_post_detail_image_and_gif_autoplay)
+ class PostDetailGifAutoplayViewHolder extends PostDetailBaseViewHolder {
+ @BindView(R.id.icon_gif_image_view_item_post_detail_gif_autoplay)
+ AspectRatioGifImageView mIconGifImageView;
+ @BindView(R.id.subreddit_text_view_item_post_detail_gif_autoplay)
+ TextView mSubredditTextView;
+ @BindView(R.id.user_text_view_item_post_detail_gif_autoplay)
+ TextView mUserTextView;
+ @BindView(R.id.author_flair_text_view_item_post_detail_gif_autoplay)
+ TextView mAuthorFlairTextView;
+ @BindView(R.id.post_time_text_view_item_post_detail_gif_autoplay)
+ TextView mPostTimeTextView;
+ @BindView(R.id.title_text_view_item_post_detail_gif_autoplay)
+ TextView mTitleTextView;
+ @BindView(R.id.type_text_view_item_post_detail_gif_autoplay)
+ CustomTextView mTypeTextView;
+ @BindView(R.id.crosspost_image_view_item_post_detail_gif_autoplay)
+ ImageView mCrosspostImageView;
+ @BindView(R.id.archived_image_view_item_post_detail_gif_autoplay)
+ ImageView mArchivedImageView;
+ @BindView(R.id.locked_image_view_item_post_detail_gif_autoplay)
+ ImageView mLockedImageView;
+ @BindView(R.id.nsfw_text_view_item_post_detail_gif_autoplay)
+ CustomTextView mNSFWTextView;
+ @BindView(R.id.spoiler_custom_text_view_item_post_detail_gif_autoplay)
+ CustomTextView mSpoilerTextView;
+ @BindView(R.id.flair_custom_text_view_item_post_detail_gif_autoplay)
+ CustomTextView mFlairTextView;
+ @BindView(R.id.awards_text_view_item_post_detail_gif_autoplay)
+ TextView mAwardsTextView;
+ @BindView(R.id.image_view_wrapper_item_post_detail_gif_autoplay)
+ RelativeLayout mRelativeLayout;
+ @BindView(R.id.load_wrapper_item_post_detail_gif_autoplay)
+ RelativeLayout mLoadWrapper;
+ @BindView(R.id.progress_bar_item_post_detail_gif_autoplay)
+ ProgressBar mLoadImageProgressBar;
+ @BindView(R.id.load_image_error_text_view_item_post_detail_gif_autoplay)
+ TextView mLoadImageErrorTextView;
+ @BindView(R.id.image_view_item_post_detail_gif_autoplay)
+ AspectRatioBigImageView mImageView;
+ @BindView(R.id.bottom_constraint_layout_item_post_detail_gif_autoplay)
+ ConstraintLayout mBottomConstraintLayout;
+ @BindView(R.id.plus_button_item_post_detail_gif_autoplay)
+ ImageView mUpvoteButton;
+ @BindView(R.id.score_text_view_item_post_detail_gif_autoplay)
+ TextView mScoreTextView;
+ @BindView(R.id.minus_button_item_post_detail_gif_autoplay)
+ ImageView mDownvoteButton;
+ @BindView(R.id.comments_count_item_post_detail_gif_autoplay)
+ TextView commentsCountTextView;
+ @BindView(R.id.save_button_item_post_detail_gif_autoplay)
+ ImageView mSaveButton;
+ @BindView(R.id.share_button_item_post_detail_gif_autoplay)
+ ImageView mShareButton;
+
+ PostDetailGifAutoplayViewHolder(@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_and_gif_autoplay)
+ @BindView(R.id.subreddit_text_view_item_post_detail_image)
TextView mSubredditTextView;
- @BindView(R.id.user_text_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.user_text_view_item_post_detail_image)
TextView mUserTextView;
- @BindView(R.id.author_flair_text_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.author_flair_text_view_item_post_detail_image)
TextView mAuthorFlairTextView;
- @BindView(R.id.post_time_text_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.post_time_text_view_item_post_detail_image)
TextView mPostTimeTextView;
- @BindView(R.id.title_text_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.title_text_view_item_post_detail_image)
TextView mTitleTextView;
- @BindView(R.id.type_text_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.type_text_view_item_post_detail_image)
CustomTextView mTypeTextView;
- @BindView(R.id.crosspost_image_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.crosspost_image_view_item_post_detail_image)
ImageView mCrosspostImageView;
- @BindView(R.id.archived_image_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.archived_image_view_item_post_detail_image)
ImageView mArchivedImageView;
- @BindView(R.id.locked_image_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.locked_image_view_item_post_detail_image)
ImageView mLockedImageView;
- @BindView(R.id.nsfw_text_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.nsfw_text_view_item_post_detail_image)
CustomTextView mNSFWTextView;
- @BindView(R.id.spoiler_custom_text_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.spoiler_custom_text_view_item_post_detail_image)
CustomTextView mSpoilerTextView;
- @BindView(R.id.flair_custom_text_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.flair_custom_text_view_item_post_detail_image)
CustomTextView mFlairTextView;
- @BindView(R.id.awards_text_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.awards_text_view_item_post_detail_image)
TextView mAwardsTextView;
- @BindView(R.id.image_view_wrapper_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.image_view_wrapper_item_post_detail_image)
RelativeLayout mRelativeLayout;
- @BindView(R.id.load_wrapper_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.load_wrapper_item_post_detail_image)
RelativeLayout mLoadWrapper;
- @BindView(R.id.progress_bar_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.progress_bar_item_post_detail_image)
ProgressBar mLoadImageProgressBar;
- @BindView(R.id.load_image_error_text_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.load_image_error_text_view_item_post_detail_image)
TextView mLoadImageErrorTextView;
- @BindView(R.id.image_view_item_post_detail_image_and_gif_autoplay)
- AspectRatioImageView mImageView;
- @BindView(R.id.bottom_constraint_layout_item_post_detail_image_and_gif_autoplay)
+ @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_and_gif_autoplay)
+ @BindView(R.id.plus_button_item_post_detail_image)
ImageView mUpvoteButton;
- @BindView(R.id.score_text_view_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.score_text_view_item_post_detail_image)
TextView mScoreTextView;
- @BindView(R.id.minus_button_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.minus_button_item_post_detail_image)
ImageView mDownvoteButton;
- @BindView(R.id.comments_count_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.comments_count_item_post_detail_image)
TextView commentsCountTextView;
- @BindView(R.id.save_button_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.save_button_item_post_detail_image)
ImageView mSaveButton;
- @BindView(R.id.share_button_item_post_detail_image_and_gif_autoplay)
+ @BindView(R.id.share_button_item_post_detail_image)
ImageView mShareButton;
- PostDetailImageAndGifAutoplayViewHolder(@NonNull View itemView) {
+ PostDetailImageViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
setBaseView(mIconGifImageView,
@@ -2539,7 +2988,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
@BindView(R.id.load_image_error_text_view_item_post_detail_link)
TextView mLoadImageErrorTextView;
@BindView(R.id.image_view_item_post_detail_link)
- AspectRatioImageView mImageView;
+ AspectRatioSubsamplingScaleImageView mImageView;
@BindView(R.id.bottom_constraint_layout_item_post_detail_link)
ConstraintLayout mBottomConstraintLayout;
@BindView(R.id.plus_button_item_post_detail_link)
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/CustomView/AspectRatioBigImageView.java b/app/src/main/java/ml/docilealligator/infinityforreddit/CustomView/AspectRatioBigImageView.java
new file mode 100644
index 00000000..43114665
--- /dev/null
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/CustomView/AspectRatioBigImageView.java
@@ -0,0 +1,60 @@
+package ml.docilealligator.infinityforreddit.CustomView;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+
+import com.github.piasy.biv.view.BigImageView;
+
+public class AspectRatioBigImageView extends BigImageView {
+ private float ratio;
+
+ public AspectRatioBigImageView(Context context) {
+ super(context);
+ ratio = 1.0F;
+ }
+
+ public AspectRatioBigImageView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ this.ratio = 1.0F;
+ this.init(context, attrs);
+ }
+
+ public AspectRatioBigImageView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ this.ratio = 1.0F;
+ this.init(context, attrs);
+ }
+
+ public final float getRatio() {
+ return this.ratio;
+ }
+
+ public final void setRatio(float var1) {
+ this.ratio = var1;
+ }
+
+ private void init(Context context, AttributeSet attrs) {
+ if (attrs != null) {
+ TypedArray a = context.obtainStyledAttributes(attrs, com.santalu.aspectratioimageview.R.styleable.AspectRatioImageView);
+ this.ratio = a.getFloat(com.santalu.aspectratioimageview.R.styleable.AspectRatioImageView_ari_ratio, 1.0F);
+ a.recycle();
+ }
+
+ }
+
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int width = this.getMeasuredWidth();
+ int height = this.getMeasuredHeight();
+ if (width != 0 || height != 0) {
+ if (width > 0) {
+ height = (int) ((float) width * this.ratio);
+ } else {
+ width = (int) ((float) height / this.ratio);
+ }
+
+ this.setMeasuredDimension(width, height);
+ }
+ }
+}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/CustomView/AspectRatioGifImageView.java b/app/src/main/java/ml/docilealligator/infinityforreddit/CustomView/AspectRatioGifImageView.java
index 9f9d5483..f77f5bd8 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/CustomView/AspectRatioGifImageView.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/CustomView/AspectRatioGifImageView.java
@@ -28,7 +28,7 @@ public class AspectRatioGifImageView extends GifImageView {
this.ratio = var1;
}
- private final void init(Context context, AttributeSet attrs) {
+ private void init(Context context, AttributeSet attrs) {
if (attrs != null) {
TypedArray a = context.obtainStyledAttributes(attrs, com.santalu.aspectratioimageview.R.styleable.AspectRatioImageView);
this.ratio = a.getFloat(com.santalu.aspectratioimageview.R.styleable.AspectRatioImageView_ari_ratio, 1.0F);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/CustomView/AspectRatioSubsamplingScaleImageView.java b/app/src/main/java/ml/docilealligator/infinityforreddit/CustomView/AspectRatioSubsamplingScaleImageView.java
new file mode 100644
index 00000000..9877e697
--- /dev/null
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/CustomView/AspectRatioSubsamplingScaleImageView.java
@@ -0,0 +1,54 @@
+package ml.docilealligator.infinityforreddit.CustomView;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+
+import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
+
+public class AspectRatioSubsamplingScaleImageView extends SubsamplingScaleImageView {
+ private float ratio;
+
+ public AspectRatioSubsamplingScaleImageView(Context context) {
+ super(context);
+ ratio = 1.0F;
+ }
+
+ public AspectRatioSubsamplingScaleImageView(Context context, AttributeSet attr) {
+ super(context, attr);
+ this.ratio = 1.0F;
+ this.init(context, attr);
+ }
+
+ public final float getRatio() {
+ return this.ratio;
+ }
+
+ public final void setRatio(float var1) {
+ this.ratio = var1;
+ }
+
+ private void init(Context context, AttributeSet attrs) {
+ if (attrs != null) {
+ TypedArray a = context.obtainStyledAttributes(attrs, com.santalu.aspectratioimageview.R.styleable.AspectRatioImageView);
+ this.ratio = a.getFloat(com.santalu.aspectratioimageview.R.styleable.AspectRatioImageView_ari_ratio, 1.0F);
+ a.recycle();
+ }
+
+ }
+
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int width = this.getMeasuredWidth();
+ int height = this.getMeasuredHeight();
+ if (width != 0 || height != 0) {
+ if (width > 0) {
+ height = (int) ((float) width * this.ratio);
+ } else {
+ width = (int) ((float) height / this.ratio);
+ }
+
+ this.setMeasuredDimension(width, height);
+ }
+ }
+}