mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-07 03:07:26 +01:00
Swipe to see gallery images in HistoryPostFragment.
This commit is contained in:
parent
968b04a508
commit
a95c77731a
@ -12,7 +12,9 @@ import android.net.Uri;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewConfiguration;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@ -32,6 +34,7 @@ import androidx.core.content.ContextCompat;
|
|||||||
import androidx.paging.PagingDataAdapter;
|
import androidx.paging.PagingDataAdapter;
|
||||||
import androidx.recyclerview.widget.DiffUtil;
|
import androidx.recyclerview.widget.DiffUtil;
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||||
|
import androidx.recyclerview.widget.PagerSnapHelper;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
@ -60,6 +63,7 @@ import jp.wasabeef.glide.transformations.BlurTransformation;
|
|||||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||||
import ml.docilealligator.infinityforreddit.FetchGfycatOrRedgifsVideoLinks;
|
import ml.docilealligator.infinityforreddit.FetchGfycatOrRedgifsVideoLinks;
|
||||||
import ml.docilealligator.infinityforreddit.FetchStreamableVideo;
|
import ml.docilealligator.infinityforreddit.FetchStreamableVideo;
|
||||||
|
import ml.docilealligator.infinityforreddit.MarkPostAsReadInterface;
|
||||||
import ml.docilealligator.infinityforreddit.R;
|
import ml.docilealligator.infinityforreddit.R;
|
||||||
import ml.docilealligator.infinityforreddit.SaveMemoryCenterInisdeDownsampleStrategy;
|
import ml.docilealligator.infinityforreddit.SaveMemoryCenterInisdeDownsampleStrategy;
|
||||||
import ml.docilealligator.infinityforreddit.SaveThing;
|
import ml.docilealligator.infinityforreddit.SaveThing;
|
||||||
@ -80,6 +84,11 @@ import ml.docilealligator.infinityforreddit.apis.StreamableAPI;
|
|||||||
import ml.docilealligator.infinityforreddit.bottomsheetfragments.ShareLinkBottomSheetFragment;
|
import ml.docilealligator.infinityforreddit.bottomsheetfragments.ShareLinkBottomSheetFragment;
|
||||||
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
||||||
import ml.docilealligator.infinityforreddit.customviews.AspectRatioGifImageView;
|
import ml.docilealligator.infinityforreddit.customviews.AspectRatioGifImageView;
|
||||||
|
import ml.docilealligator.infinityforreddit.customviews.SwipeLockInterface;
|
||||||
|
import ml.docilealligator.infinityforreddit.customviews.SwipeLockLinearLayoutManager;
|
||||||
|
import ml.docilealligator.infinityforreddit.databinding.ItemPostCard2GalleryTypeBinding;
|
||||||
|
import ml.docilealligator.infinityforreddit.databinding.ItemPostGalleryGalleryTypeBinding;
|
||||||
|
import ml.docilealligator.infinityforreddit.databinding.ItemPostGalleryTypeBinding;
|
||||||
import ml.docilealligator.infinityforreddit.events.PostUpdateEventToPostDetailFragment;
|
import ml.docilealligator.infinityforreddit.events.PostUpdateEventToPostDetailFragment;
|
||||||
import ml.docilealligator.infinityforreddit.fragments.HistoryPostFragment;
|
import ml.docilealligator.infinityforreddit.fragments.HistoryPostFragment;
|
||||||
import ml.docilealligator.infinityforreddit.post.Post;
|
import ml.docilealligator.infinityforreddit.post.Post;
|
||||||
@ -102,12 +111,15 @@ import retrofit2.Retrofit;
|
|||||||
public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerView.ViewHolder> implements CacheManager {
|
public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerView.ViewHolder> implements CacheManager {
|
||||||
private static final int VIEW_TYPE_POST_CARD_VIDEO_AUTOPLAY_TYPE = 1;
|
private static final int VIEW_TYPE_POST_CARD_VIDEO_AUTOPLAY_TYPE = 1;
|
||||||
private static final int VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE = 2;
|
private static final int VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE = 2;
|
||||||
private static final int VIEW_TYPE_POST_CARD_TEXT_TYPE = 3;
|
private static final int VIEW_TYPE_POST_CARD_GALLERY_TYPE = 3;
|
||||||
private static final int VIEW_TYPE_POST_COMPACT = 4;
|
private static final int VIEW_TYPE_POST_CARD_TEXT_TYPE = 4;
|
||||||
private static final int VIEW_TYPE_POST_GALLERY = 5;
|
private static final int VIEW_TYPE_POST_COMPACT = 5;
|
||||||
private static final int VIEW_TYPE_POST_CARD_2_VIDEO_AUTOPLAY_TYPE = 6;
|
private static final int VIEW_TYPE_POST_GALLERY = 6;
|
||||||
private static final int VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE = 7;
|
private static final int VIEW_TYPE_POST_GALLERY_GALLERY_TYPE = 7;
|
||||||
private static final int VIEW_TYPE_POST_CARD_2_TEXT_TYPE = 8;
|
private static final int VIEW_TYPE_POST_CARD_2_VIDEO_AUTOPLAY_TYPE = 8;
|
||||||
|
private static final int VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE = 9;
|
||||||
|
private static final int VIEW_TYPE_POST_CARD_2_GALLERY_TYPE = 10;
|
||||||
|
private static final int VIEW_TYPE_POST_CARD_2_TEXT_TYPE = 11;
|
||||||
|
|
||||||
private static final DiffUtil.ItemCallback<Post> DIFF_CALLBACK = new DiffUtil.ItemCallback<Post>() {
|
private static final DiffUtil.ItemCallback<Post> DIFF_CALLBACK = new DiffUtil.ItemCallback<Post>() {
|
||||||
@Override
|
@Override
|
||||||
@ -205,6 +217,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
private ExoCreator mExoCreator;
|
private ExoCreator mExoCreator;
|
||||||
private Callback mCallback;
|
private Callback mCallback;
|
||||||
private boolean canPlayVideo = true;
|
private boolean canPlayVideo = true;
|
||||||
|
private RecyclerView.RecycledViewPool mGalleryRecycledViewPool;
|
||||||
|
|
||||||
public HistoryPostRecyclerViewAdapter(BaseActivity activity, HistoryPostFragment fragment, Executor executor, Retrofit oauthRetrofit,
|
public HistoryPostRecyclerViewAdapter(BaseActivity activity, HistoryPostFragment fragment, Executor executor, Retrofit oauthRetrofit,
|
||||||
Retrofit gfycatRetrofit, Retrofit redgifsRetrofit, Retrofit streambleRetrofit,
|
Retrofit gfycatRetrofit, Retrofit redgifsRetrofit, Retrofit streambleRetrofit,
|
||||||
@ -324,6 +337,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
mLocale = locale;
|
mLocale = locale;
|
||||||
mExoCreator = exoCreator;
|
mExoCreator = exoCreator;
|
||||||
mCallback = callback;
|
mCallback = callback;
|
||||||
|
mGalleryRecycledViewPool = new RecyclerView.RecycledViewPool();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -347,8 +361,9 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
return VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE;
|
return VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE;
|
||||||
case Post.GIF_TYPE:
|
case Post.GIF_TYPE:
|
||||||
case Post.IMAGE_TYPE:
|
case Post.IMAGE_TYPE:
|
||||||
case Post.GALLERY_TYPE:
|
|
||||||
return VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE;
|
return VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE;
|
||||||
|
case Post.GALLERY_TYPE:
|
||||||
|
return VIEW_TYPE_POST_CARD_GALLERY_TYPE;
|
||||||
case Post.LINK_TYPE:
|
case Post.LINK_TYPE:
|
||||||
case Post.NO_PREVIEW_LINK_TYPE:
|
case Post.NO_PREVIEW_LINK_TYPE:
|
||||||
switch (mDefaultLinkPostLayout) {
|
switch (mDefaultLinkPostLayout) {
|
||||||
@ -381,7 +396,16 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
}
|
}
|
||||||
return VIEW_TYPE_POST_COMPACT;
|
return VIEW_TYPE_POST_COMPACT;
|
||||||
} else if (mPostLayout == SharedPreferencesUtils.POST_LAYOUT_GALLERY) {
|
} else if (mPostLayout == SharedPreferencesUtils.POST_LAYOUT_GALLERY) {
|
||||||
|
Post post = getItem(position);
|
||||||
|
if (post != null) {
|
||||||
|
if (post.getPostType() == Post.GALLERY_TYPE) {
|
||||||
|
return VIEW_TYPE_POST_GALLERY_GALLERY_TYPE;
|
||||||
|
} else {
|
||||||
return VIEW_TYPE_POST_GALLERY;
|
return VIEW_TYPE_POST_GALLERY;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return VIEW_TYPE_POST_GALLERY;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Post post = getItem(position);
|
Post post = getItem(position);
|
||||||
if (post != null) {
|
if (post != null) {
|
||||||
@ -396,8 +420,9 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
return VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE;
|
return VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE;
|
||||||
case Post.GIF_TYPE:
|
case Post.GIF_TYPE:
|
||||||
case Post.IMAGE_TYPE:
|
case Post.IMAGE_TYPE:
|
||||||
case Post.GALLERY_TYPE:
|
|
||||||
return VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE;
|
return VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE;
|
||||||
|
case Post.GALLERY_TYPE:
|
||||||
|
return VIEW_TYPE_POST_CARD_2_GALLERY_TYPE;
|
||||||
case Post.LINK_TYPE:
|
case Post.LINK_TYPE:
|
||||||
case Post.NO_PREVIEW_LINK_TYPE:
|
case Post.NO_PREVIEW_LINK_TYPE:
|
||||||
switch (mDefaultLinkPostLayout) {
|
switch (mDefaultLinkPostLayout) {
|
||||||
@ -427,6 +452,8 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
return new PostVideoAutoplayViewHolder(LayoutInflater.from(parent.getContext()).inflate(mLegacyAutoplayVideoControllerUI ? R.layout.item_post_video_type_autoplay_legacy_controller : R.layout.item_post_video_type_autoplay, parent, false));
|
return new PostVideoAutoplayViewHolder(LayoutInflater.from(parent.getContext()).inflate(mLegacyAutoplayVideoControllerUI ? R.layout.item_post_video_type_autoplay_legacy_controller : R.layout.item_post_video_type_autoplay, parent, false));
|
||||||
} else if (viewType == VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE) {
|
} else if (viewType == VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE) {
|
||||||
return new PostWithPreviewTypeViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_with_preview, parent, false));
|
return new PostWithPreviewTypeViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_with_preview, parent, false));
|
||||||
|
} else if (viewType == VIEW_TYPE_POST_CARD_GALLERY_TYPE) {
|
||||||
|
return new PostGalleryTypeViewHolder(ItemPostGalleryTypeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
|
||||||
} else if (viewType == VIEW_TYPE_POST_CARD_TEXT_TYPE) {
|
} else if (viewType == VIEW_TYPE_POST_CARD_TEXT_TYPE) {
|
||||||
return new PostTextTypeViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_text, parent, false));
|
return new PostTextTypeViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_text, parent, false));
|
||||||
} else if (viewType == VIEW_TYPE_POST_COMPACT) {
|
} else if (viewType == VIEW_TYPE_POST_COMPACT) {
|
||||||
@ -437,6 +464,8 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
}
|
}
|
||||||
} else if (viewType == VIEW_TYPE_POST_GALLERY) {
|
} else if (viewType == VIEW_TYPE_POST_GALLERY) {
|
||||||
return new PostGalleryViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_gallery, parent, false));
|
return new PostGalleryViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_gallery, parent, false));
|
||||||
|
} else if (viewType == VIEW_TYPE_POST_GALLERY_GALLERY_TYPE) {
|
||||||
|
return new PostGalleryGalleryTypeViewHolder(ItemPostGalleryGalleryTypeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
|
||||||
} else if (viewType == VIEW_TYPE_POST_CARD_2_VIDEO_AUTOPLAY_TYPE) {
|
} else if (viewType == VIEW_TYPE_POST_CARD_2_VIDEO_AUTOPLAY_TYPE) {
|
||||||
if (mDataSavingMode) {
|
if (mDataSavingMode) {
|
||||||
return new PostCard2WithPreviewViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_card_2_with_preview, parent, false));
|
return new PostCard2WithPreviewViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_card_2_with_preview, parent, false));
|
||||||
@ -444,6 +473,8 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
return new PostCard2VideoAutoplayViewHolder(LayoutInflater.from(parent.getContext()).inflate(mLegacyAutoplayVideoControllerUI ? R.layout.item_post_card_2_video_autoplay_legacy_controller : R.layout.item_post_card_2_video_autoplay, parent, false));
|
return new PostCard2VideoAutoplayViewHolder(LayoutInflater.from(parent.getContext()).inflate(mLegacyAutoplayVideoControllerUI ? R.layout.item_post_card_2_video_autoplay_legacy_controller : R.layout.item_post_card_2_video_autoplay, parent, false));
|
||||||
} else if (viewType == VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE) {
|
} else if (viewType == VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE) {
|
||||||
return new PostCard2WithPreviewViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_card_2_with_preview, parent, false));
|
return new PostCard2WithPreviewViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_card_2_with_preview, parent, false));
|
||||||
|
} else if (viewType == VIEW_TYPE_POST_CARD_2_GALLERY_TYPE) {
|
||||||
|
return new PostCard2GalleryTypeViewHolder(ItemPostCard2GalleryTypeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
|
||||||
} else {
|
} else {
|
||||||
//VIEW_TYPE_POST_CARD_2_TEXT_TYPE
|
//VIEW_TYPE_POST_CARD_2_TEXT_TYPE
|
||||||
return new PostCard2TextTypeViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_card_2_text, parent, false));
|
return new PostCard2TextTypeViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_card_2_text, parent, false));
|
||||||
@ -750,10 +781,6 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setVisibility(View.VISIBLE);
|
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setVisibility(View.VISIBLE);
|
||||||
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setImageResource(R.drawable.ic_link);
|
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setImageResource(R.drawable.ic_link);
|
||||||
}
|
}
|
||||||
} else if (post.getPostType() == Post.GALLERY_TYPE) {
|
|
||||||
((PostWithPreviewTypeViewHolder) holder).typeTextView.setText(mActivity.getString(R.string.gallery));
|
|
||||||
((PostWithPreviewTypeViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.VISIBLE);
|
|
||||||
((PostWithPreviewTypeViewHolder) holder).videoOrGifIndicatorImageView.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_gallery_24dp));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (post.getPostType() != Post.NO_PREVIEW_LINK_TYPE) {
|
if (post.getPostType() != Post.NO_PREVIEW_LINK_TYPE) {
|
||||||
@ -770,8 +797,6 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
((PostWithPreviewTypeViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
((PostWithPreviewTypeViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
||||||
} else if (post.getPostType() == Post.LINK_TYPE) {
|
} else if (post.getPostType() == Post.LINK_TYPE) {
|
||||||
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setImageResource(R.drawable.ic_link);
|
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setImageResource(R.drawable.ic_link);
|
||||||
} else if (post.getPostType() == Post.GALLERY_TYPE) {
|
|
||||||
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setImageResource(R.drawable.ic_gallery_24dp);
|
|
||||||
}
|
}
|
||||||
} else if (mDataSavingMode && mOnlyDisablePreviewInVideoAndGifPosts && (post.getPostType() == Post.VIDEO_TYPE || post.getPostType() == Post.GIF_TYPE)) {
|
} else if (mDataSavingMode && mOnlyDisablePreviewInVideoAndGifPosts && (post.getPostType() == Post.VIDEO_TYPE || post.getPostType() == Post.GIF_TYPE)) {
|
||||||
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setVisibility(View.VISIBLE);
|
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setVisibility(View.VISIBLE);
|
||||||
@ -812,12 +837,31 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
((PostWithPreviewTypeViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
((PostWithPreviewTypeViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
||||||
} else if (post.getPostType() == Post.LINK_TYPE) {
|
} else if (post.getPostType() == Post.LINK_TYPE) {
|
||||||
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setImageResource(R.drawable.ic_link);
|
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setImageResource(R.drawable.ic_link);
|
||||||
} else if (post.getPostType() == Post.GALLERY_TYPE) {
|
|
||||||
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setImageResource(R.drawable.ic_gallery_24dp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (holder instanceof PostBaseGalleryTypeViewHolder) {
|
||||||
|
if (mDataSavingMode && mDisableImagePreview) {
|
||||||
|
((PostBaseGalleryTypeViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
||||||
|
((PostBaseGalleryTypeViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_gallery_24dp);
|
||||||
|
} else {
|
||||||
|
((PostBaseGalleryTypeViewHolder) holder).frameLayout.setVisibility(View.VISIBLE);
|
||||||
|
((PostBaseGalleryTypeViewHolder) holder).imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, 1, post.getGallery().size()));
|
||||||
|
Post.Preview preview = getSuitablePreview(post.getPreviews());
|
||||||
|
if (preview != null) {
|
||||||
|
if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) {
|
||||||
|
((PostBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1);
|
||||||
|
} else {
|
||||||
|
((PostBaseGalleryTypeViewHolder) holder).adapter.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
((PostBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1);
|
||||||
|
}
|
||||||
|
((PostBaseGalleryTypeViewHolder) holder).adapter.setGalleryImages(post.getGallery());
|
||||||
|
((PostBaseGalleryTypeViewHolder) holder).adapter.setBlurImage(
|
||||||
|
(post.isNSFW() && mNeedBlurNsfw) || (post.isSpoiler() && mNeedBlurSpoiler));
|
||||||
|
}
|
||||||
} else if (holder instanceof PostTextTypeViewHolder) {
|
} else if (holder instanceof PostTextTypeViewHolder) {
|
||||||
if (!mHideTextPostContent && !post.isSpoiler() && post.getSelfTextPlainTrimmed() != null && !post.getSelfTextPlainTrimmed().equals("")) {
|
if (!mHideTextPostContent && !post.isSpoiler() && post.getSelfTextPlainTrimmed() != null && !post.getSelfTextPlainTrimmed().equals("")) {
|
||||||
((PostTextTypeViewHolder) holder).contentTextView.setVisibility(View.VISIBLE);
|
((PostTextTypeViewHolder) holder).contentTextView.setVisibility(View.VISIBLE);
|
||||||
@ -912,10 +956,6 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
((PostCard2WithPreviewViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
((PostCard2WithPreviewViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
||||||
((PostCard2WithPreviewViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_link);
|
((PostCard2WithPreviewViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_link);
|
||||||
}
|
}
|
||||||
} else if (post.getPostType() == Post.GALLERY_TYPE) {
|
|
||||||
((PostCard2WithPreviewViewHolder) holder).typeTextView.setText(mActivity.getString(R.string.gallery));
|
|
||||||
((PostCard2WithPreviewViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.VISIBLE);
|
|
||||||
((PostCard2WithPreviewViewHolder) holder).videoOrGifIndicatorImageView.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_gallery_24dp));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (post.getPostType() != Post.NO_PREVIEW_LINK_TYPE) {
|
if (post.getPostType() != Post.NO_PREVIEW_LINK_TYPE) {
|
||||||
@ -933,8 +973,6 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
((PostCard2WithPreviewViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
((PostCard2WithPreviewViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
||||||
} else if (post.getPostType() == Post.LINK_TYPE) {
|
} else if (post.getPostType() == Post.LINK_TYPE) {
|
||||||
((PostCard2WithPreviewViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_link);
|
((PostCard2WithPreviewViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_link);
|
||||||
} else if (post.getPostType() == Post.GALLERY_TYPE) {
|
|
||||||
((PostCard2WithPreviewViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_gallery_24dp);
|
|
||||||
}
|
}
|
||||||
} else if (mDataSavingMode && mOnlyDisablePreviewInVideoAndGifPosts && (post.getPostType() == Post.VIDEO_TYPE || post.getPostType() == Post.GIF_TYPE)) {
|
} else if (mDataSavingMode && mOnlyDisablePreviewInVideoAndGifPosts && (post.getPostType() == Post.VIDEO_TYPE || post.getPostType() == Post.GIF_TYPE)) {
|
||||||
((PostCard2WithPreviewViewHolder) holder).progressBar.setVisibility(View.GONE);
|
((PostCard2WithPreviewViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||||
@ -977,8 +1015,6 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
((PostCard2WithPreviewViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
((PostCard2WithPreviewViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
||||||
} else if (post.getPostType() == Post.LINK_TYPE) {
|
} else if (post.getPostType() == Post.LINK_TYPE) {
|
||||||
((PostCard2WithPreviewViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_link);
|
((PostCard2WithPreviewViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_link);
|
||||||
} else if (post.getPostType() == Post.GALLERY_TYPE) {
|
|
||||||
((PostCard2WithPreviewViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_gallery_24dp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1348,8 +1384,6 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
||||||
} else if (post.getPostType() == Post.LINK_TYPE) {
|
} else if (post.getPostType() == Post.LINK_TYPE) {
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_link);
|
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_link);
|
||||||
} else if (post.getPostType() == Post.GALLERY_TYPE) {
|
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_gallery_24dp);
|
|
||||||
}
|
}
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_image_24dp);
|
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_image_24dp);
|
||||||
}
|
}
|
||||||
@ -1460,36 +1494,35 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
((PostGalleryViewHolder) holder).titleTextView.setText(post.getTitle());
|
((PostGalleryViewHolder) holder).titleTextView.setText(post.getTitle());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Post.GALLERY_TYPE: {
|
}
|
||||||
Post.Preview preview = getSuitablePreview(post.getPreviews());
|
}
|
||||||
((PostGalleryViewHolder) holder).preview = preview;
|
} else if (holder instanceof PostGalleryBaseGalleryTypeViewHolder) {
|
||||||
if (preview != null) {
|
Post post = getItem(position);
|
||||||
((PostGalleryViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
if (post != null) {
|
||||||
((PostGalleryViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
((PostGalleryBaseGalleryTypeViewHolder) holder).post = post;
|
||||||
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.VISIBLE);
|
((PostGalleryBaseGalleryTypeViewHolder) holder).currentPosition = position;
|
||||||
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_gallery_24dp));
|
|
||||||
|
|
||||||
|
if (mDataSavingMode && mDisableImagePreview) {
|
||||||
|
((PostGalleryBaseGalleryTypeViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
||||||
|
((PostGalleryBaseGalleryTypeViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_gallery_24dp);
|
||||||
|
} else {
|
||||||
|
Post.Preview preview = getSuitablePreview(post.getPreviews());
|
||||||
|
((PostGalleryBaseGalleryTypeViewHolder) holder).preview = preview;
|
||||||
|
|
||||||
|
((PostGalleryBaseGalleryTypeViewHolder) holder).frameLayout.setVisibility(View.VISIBLE);
|
||||||
|
((PostGalleryBaseGalleryTypeViewHolder) holder).imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, 1, post.getGallery().size()));
|
||||||
|
if (preview != null) {
|
||||||
if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) {
|
if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) {
|
||||||
int height = (int) (400 * mScale);
|
((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1);
|
||||||
((PostGalleryViewHolder) holder).imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
|
||||||
((PostGalleryViewHolder) holder).imageView.getLayoutParams().height = height;
|
|
||||||
} else {
|
} else {
|
||||||
((PostGalleryViewHolder) holder).imageView
|
((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
||||||
.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
|
||||||
}
|
}
|
||||||
((PostGalleryViewHolder) holder).imageView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
|
|
||||||
@Override
|
|
||||||
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
|
||||||
((PostGalleryViewHolder) holder).imageView.removeOnLayoutChangeListener(this);
|
|
||||||
loadImage(holder);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1);
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_gallery_24dp);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setGalleryImages(post.getGallery());
|
||||||
|
((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setBlurImage(
|
||||||
|
(post.isNSFW() && mNeedBlurNsfw) || (post.isSpoiler() && mNeedBlurSpoiler));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1804,6 +1837,9 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
((PostWithPreviewTypeViewHolder) holder).progressBar.setVisibility(View.GONE);
|
((PostWithPreviewTypeViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||||
((PostWithPreviewTypeViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
((PostWithPreviewTypeViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
||||||
((PostWithPreviewTypeViewHolder) holder).linkTextView.setVisibility(View.GONE);
|
((PostWithPreviewTypeViewHolder) holder).linkTextView.setVisibility(View.GONE);
|
||||||
|
} else if (holder instanceof PostBaseGalleryTypeViewHolder) {
|
||||||
|
((PostBaseGalleryTypeViewHolder) holder).frameLayout.setVisibility(View.GONE);
|
||||||
|
((PostBaseGalleryTypeViewHolder) holder).noPreviewImageView.setVisibility(View.GONE);
|
||||||
} else if (holder instanceof PostTextTypeViewHolder) {
|
} else if (holder instanceof PostTextTypeViewHolder) {
|
||||||
((PostTextTypeViewHolder) holder).contentTextView.setText("");
|
((PostTextTypeViewHolder) holder).contentTextView.setText("");
|
||||||
((PostTextTypeViewHolder) holder).contentTextView.setTextColor(mPostContentColor);
|
((PostTextTypeViewHolder) holder).contentTextView.setTextColor(mPostContentColor);
|
||||||
@ -1882,6 +1918,10 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
((PostGalleryViewHolder) holder).errorTextView.setVisibility(View.GONE);
|
((PostGalleryViewHolder) holder).errorTextView.setVisibility(View.GONE);
|
||||||
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE);
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setVisibility(View.GONE);
|
((PostGalleryViewHolder) holder).noPreviewImageView.setVisibility(View.GONE);
|
||||||
|
} else if (holder instanceof PostGalleryBaseGalleryTypeViewHolder) {
|
||||||
|
holder.itemView.setBackgroundTintList(ColorStateList.valueOf(mCardViewBackgroundColor));
|
||||||
|
((PostGalleryBaseGalleryTypeViewHolder) holder).frameLayout.setVisibility(View.GONE);
|
||||||
|
((PostGalleryBaseGalleryTypeViewHolder) holder).noPreviewImageView.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1960,6 +2000,10 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void openMedia(Post post) {
|
private void openMedia(Post post) {
|
||||||
|
openMedia(post, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void openMedia(Post post, int galleryItemIndex) {
|
||||||
if (canStartActivity) {
|
if (canStartActivity) {
|
||||||
canStartActivity = false;
|
canStartActivity = false;
|
||||||
if (post.getPostType() == Post.VIDEO_TYPE) {
|
if (post.getPostType() == Post.VIDEO_TYPE) {
|
||||||
@ -2014,6 +2058,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
intent.putParcelableArrayListExtra(ViewRedditGalleryActivity.EXTRA_REDDIT_GALLERY, post.getGallery());
|
intent.putParcelableArrayListExtra(ViewRedditGalleryActivity.EXTRA_REDDIT_GALLERY, post.getGallery());
|
||||||
intent.putExtra(ViewRedditGalleryActivity.EXTRA_SUBREDDIT_NAME, post.getSubredditName());
|
intent.putExtra(ViewRedditGalleryActivity.EXTRA_SUBREDDIT_NAME, post.getSubredditName());
|
||||||
intent.putExtra(ViewRedditGalleryActivity.EXTRA_IS_NSFW, post.isNSFW());
|
intent.putExtra(ViewRedditGalleryActivity.EXTRA_IS_NSFW, post.isNSFW());
|
||||||
|
intent.putExtra(ViewRedditGalleryActivity.EXTRA_GALLERY_ITEM_INDEX, galleryItemIndex);
|
||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2961,6 +3006,224 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class PostBaseGalleryTypeViewHolder extends PostBaseViewHolder {
|
||||||
|
FrameLayout frameLayout;
|
||||||
|
RecyclerView galleryRecyclerView;
|
||||||
|
CustomTextView imageIndexTextView;
|
||||||
|
ImageView noPreviewImageView;
|
||||||
|
|
||||||
|
PostGalleryTypeImageRecyclerViewAdapter adapter;
|
||||||
|
private boolean swipeLocked;
|
||||||
|
|
||||||
|
PostBaseGalleryTypeViewHolder(View rootView,
|
||||||
|
AspectRatioGifImageView iconGifImageView,
|
||||||
|
TextView subredditTextView,
|
||||||
|
TextView userTextView,
|
||||||
|
ImageView stickiedPostImageView,
|
||||||
|
TextView postTimeTextView,
|
||||||
|
TextView titleTextView,
|
||||||
|
CustomTextView typeTextView,
|
||||||
|
ImageView archivedImageView,
|
||||||
|
ImageView lockedImageView,
|
||||||
|
ImageView crosspostImageView,
|
||||||
|
CustomTextView nsfwTextView,
|
||||||
|
CustomTextView spoilerTextView,
|
||||||
|
CustomTextView flairTextView,
|
||||||
|
CustomTextView awardsTextView,
|
||||||
|
FrameLayout frameLayout,
|
||||||
|
RecyclerView galleryRecyclerView,
|
||||||
|
CustomTextView imageIndexTextView,
|
||||||
|
ImageView noPreviewImageView,
|
||||||
|
ConstraintLayout bottomConstraintLayout,
|
||||||
|
ImageView upvoteButton,
|
||||||
|
TextView scoreTextView,
|
||||||
|
ImageView downvoteButton,
|
||||||
|
TextView commentsCountTextView,
|
||||||
|
ImageView saveButton,
|
||||||
|
ImageView shareButton,
|
||||||
|
boolean itemViewIsNotCardView) {
|
||||||
|
super(rootView);
|
||||||
|
setBaseView(
|
||||||
|
iconGifImageView,
|
||||||
|
subredditTextView,
|
||||||
|
userTextView,
|
||||||
|
stickiedPostImageView,
|
||||||
|
postTimeTextView,
|
||||||
|
titleTextView,
|
||||||
|
typeTextView,
|
||||||
|
archivedImageView,
|
||||||
|
lockedImageView,
|
||||||
|
crosspostImageView,
|
||||||
|
nsfwTextView,
|
||||||
|
spoilerTextView,
|
||||||
|
flairTextView,
|
||||||
|
awardsTextView,
|
||||||
|
bottomConstraintLayout,
|
||||||
|
upvoteButton,
|
||||||
|
scoreTextView,
|
||||||
|
downvoteButton,
|
||||||
|
commentsCountTextView,
|
||||||
|
saveButton,
|
||||||
|
shareButton,
|
||||||
|
itemViewIsNotCardView);
|
||||||
|
|
||||||
|
this.frameLayout = frameLayout;
|
||||||
|
this.galleryRecyclerView = galleryRecyclerView;
|
||||||
|
this.imageIndexTextView = imageIndexTextView;
|
||||||
|
this.noPreviewImageView = noPreviewImageView;
|
||||||
|
|
||||||
|
imageIndexTextView.setTextColor(mMediaIndicatorIconTint);
|
||||||
|
imageIndexTextView.setBackgroundColor(mMediaIndicatorBackgroundColor);
|
||||||
|
imageIndexTextView.setBorderColor(mMediaIndicatorBackgroundColor);
|
||||||
|
if (mActivity.typeface != null) {
|
||||||
|
imageIndexTextView.setTypeface(mActivity.typeface);
|
||||||
|
}
|
||||||
|
|
||||||
|
noPreviewImageView.setBackgroundColor(mNoPreviewPostTypeBackgroundColor);
|
||||||
|
noPreviewImageView.setColorFilter(mNoPreviewPostTypeIconTint, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||||
|
|
||||||
|
adapter = new PostGalleryTypeImageRecyclerViewAdapter(mGlide, mActivity.typeface,
|
||||||
|
mSaveMemoryCenterInsideDownsampleStrategy, mColorAccent, mPrimaryTextColor, mScale);
|
||||||
|
galleryRecyclerView.setAdapter(adapter);
|
||||||
|
new PagerSnapHelper().attachToRecyclerView(galleryRecyclerView);
|
||||||
|
galleryRecyclerView.setRecycledViewPool(mGalleryRecycledViewPool);
|
||||||
|
SwipeLockLinearLayoutManager layoutManager = new SwipeLockLinearLayoutManager(
|
||||||
|
mActivity, RecyclerView.HORIZONTAL, false, new SwipeLockInterface() {
|
||||||
|
@Override
|
||||||
|
public void lockSwipe() {
|
||||||
|
mActivity.lockSwipeRightToGoBack();
|
||||||
|
swipeLocked = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unlockSwipe() {
|
||||||
|
mActivity.unlockSwipeRightToGoBack();
|
||||||
|
swipeLocked = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSwipeLocked(boolean swipeLocked) {
|
||||||
|
PostBaseGalleryTypeViewHolder.this.swipeLocked = swipeLocked;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
galleryRecyclerView.setLayoutManager(layoutManager);
|
||||||
|
galleryRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
|
@Override
|
||||||
|
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
|
||||||
|
super.onScrollStateChanged(recyclerView, newState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
|
||||||
|
super.onScrolled(recyclerView, dx, dy);
|
||||||
|
imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, layoutManager.findFirstVisibleItemPosition() + 1, post.getGallery().size()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
galleryRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
|
||||||
|
private float downX;
|
||||||
|
private float downY;
|
||||||
|
private boolean dragged;
|
||||||
|
private final int minTouchSlop = ViewConfiguration.get(mActivity).getScaledTouchSlop();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
|
||||||
|
int action = e.getAction();
|
||||||
|
switch (action) {
|
||||||
|
case MotionEvent.ACTION_DOWN:
|
||||||
|
downX = e.getRawX();
|
||||||
|
downY = e.getRawY();
|
||||||
|
break;
|
||||||
|
case MotionEvent.ACTION_MOVE:
|
||||||
|
if(Math.abs(e.getRawX() - downX) > minTouchSlop || Math.abs(e.getRawY() - downY) > minTouchSlop) {
|
||||||
|
dragged = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MotionEvent.ACTION_UP:
|
||||||
|
if (!dragged) {
|
||||||
|
int position = getBindingAdapterPosition();
|
||||||
|
if (position >= 0) {
|
||||||
|
if (post != null) {
|
||||||
|
openMedia(post, layoutManager.findFirstVisibleItemPosition());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
downX = 0;
|
||||||
|
downY = 0;
|
||||||
|
dragged = false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
rootView.setOnTouchListener((view, motionEvent) -> {
|
||||||
|
swipeLocked = false;
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
bottomConstraintLayout.setOnTouchListener((view, motionEvent) -> {
|
||||||
|
swipeLocked = false;
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
noPreviewImageView.setOnClickListener(view -> {
|
||||||
|
int position = getBindingAdapterPosition();
|
||||||
|
if (position < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (post != null) {
|
||||||
|
openMedia(post, 0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSwipeLocked() {
|
||||||
|
return swipeLocked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PostGalleryTypeViewHolder extends PostBaseGalleryTypeViewHolder {
|
||||||
|
|
||||||
|
PostGalleryTypeViewHolder(ItemPostGalleryTypeBinding binding) {
|
||||||
|
super(binding.getRoot(),
|
||||||
|
binding.iconGifImageViewItemPostGalleryType,
|
||||||
|
binding.subredditNameTextViewItemPostGalleryType,
|
||||||
|
binding.userTextViewItemPostGalleryType,
|
||||||
|
binding.stickiedPostImageViewItemPostGalleryType,
|
||||||
|
binding.postTimeTextViewItemPostGalleryType,
|
||||||
|
binding.titleTextViewItemPostGalleryType,
|
||||||
|
binding.typeTextViewItemPostGalleryType,
|
||||||
|
binding.archivedImageViewItemPostGalleryType,
|
||||||
|
binding.lockedImageViewItemPostGalleryType,
|
||||||
|
binding.crosspostImageViewItemPostGalleryType,
|
||||||
|
binding.nsfwTextViewItemPostGalleryType,
|
||||||
|
binding.spoilerTextViewItemPostGalleryType,
|
||||||
|
binding.flairTextViewItemPostGalleryType,
|
||||||
|
binding.awardsTextViewItemPostGalleryType,
|
||||||
|
binding.galleryFrameLayoutItemPostGalleryType,
|
||||||
|
binding.galleryRecyclerViewItemPostGalleryType,
|
||||||
|
binding.imageIndexTextViewItemPostGalleryType,
|
||||||
|
binding.noPreviewImageViewItemPostGalleryType,
|
||||||
|
binding.bottomConstraintLayoutItemPostGalleryType,
|
||||||
|
binding.upvoteButtonItemPostGalleryType,
|
||||||
|
binding.scoreTextViewItemPostGalleryType,
|
||||||
|
binding.downvoteButtonItemPostGalleryType,
|
||||||
|
binding.commentsCountTextViewItemPostGalleryType,
|
||||||
|
binding.saveButtonItemPostGalleryType,
|
||||||
|
binding.shareButtonItemPostGalleryType,
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class PostTextTypeViewHolder extends PostBaseViewHolder {
|
class PostTextTypeViewHolder extends PostBaseViewHolder {
|
||||||
@BindView(R.id.icon_gif_image_view_item_post_text_type)
|
@BindView(R.id.icon_gif_image_view_item_post_text_type)
|
||||||
AspectRatioGifImageView iconGifImageView;
|
AspectRatioGifImageView iconGifImageView;
|
||||||
@ -3827,6 +4090,175 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class PostGalleryBaseGalleryTypeViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
FrameLayout frameLayout;
|
||||||
|
RecyclerView recyclerView;
|
||||||
|
CustomTextView imageIndexTextView;
|
||||||
|
ImageView noPreviewImageView;
|
||||||
|
|
||||||
|
PostGalleryTypeImageRecyclerViewAdapter adapter;
|
||||||
|
private SwipeLockLinearLayoutManager layoutManager;
|
||||||
|
|
||||||
|
Post post;
|
||||||
|
Post.Preview preview;
|
||||||
|
|
||||||
|
int currentPosition;
|
||||||
|
|
||||||
|
public PostGalleryBaseGalleryTypeViewHolder(@NonNull View itemView,
|
||||||
|
FrameLayout frameLayout,
|
||||||
|
RecyclerView recyclerView,
|
||||||
|
CustomTextView imageIndexTextView,
|
||||||
|
ImageView noPreviewImageView) {
|
||||||
|
super(itemView);
|
||||||
|
|
||||||
|
this.frameLayout = frameLayout;
|
||||||
|
this.recyclerView = recyclerView;
|
||||||
|
this.imageIndexTextView = imageIndexTextView;
|
||||||
|
this.noPreviewImageView = noPreviewImageView;
|
||||||
|
|
||||||
|
if (mActivity.typeface != null) {
|
||||||
|
imageIndexTextView.setTypeface(mActivity.typeface);
|
||||||
|
}
|
||||||
|
|
||||||
|
itemView.setBackgroundTintList(ColorStateList.valueOf(mCardViewBackgroundColor));
|
||||||
|
noPreviewImageView.setBackgroundColor(mNoPreviewPostTypeBackgroundColor);
|
||||||
|
noPreviewImageView.setColorFilter(mNoPreviewPostTypeIconTint, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||||
|
|
||||||
|
imageIndexTextView.setTextColor(mMediaIndicatorIconTint);
|
||||||
|
imageIndexTextView.setBackgroundColor(mMediaIndicatorBackgroundColor);
|
||||||
|
imageIndexTextView.setBorderColor(mMediaIndicatorBackgroundColor);
|
||||||
|
|
||||||
|
adapter = new PostGalleryTypeImageRecyclerViewAdapter(mGlide, mActivity.typeface,
|
||||||
|
mSaveMemoryCenterInsideDownsampleStrategy, mColorAccent, mPrimaryTextColor, mScale);
|
||||||
|
recyclerView.setAdapter(adapter);
|
||||||
|
new PagerSnapHelper().attachToRecyclerView(recyclerView);
|
||||||
|
recyclerView.setRecycledViewPool(mGalleryRecycledViewPool);
|
||||||
|
layoutManager = new SwipeLockLinearLayoutManager(
|
||||||
|
mActivity, RecyclerView.HORIZONTAL, false, new SwipeLockInterface() {
|
||||||
|
@Override
|
||||||
|
public void lockSwipe() {
|
||||||
|
mActivity.lockSwipeRightToGoBack();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unlockSwipe() {
|
||||||
|
mActivity.unlockSwipeRightToGoBack();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
recyclerView.setLayoutManager(layoutManager);
|
||||||
|
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
|
@Override
|
||||||
|
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
|
||||||
|
super.onScrollStateChanged(recyclerView, newState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
|
||||||
|
super.onScrolled(recyclerView, dx, dy);
|
||||||
|
imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, layoutManager.findFirstVisibleItemPosition() + 1, post.getGallery().size()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
|
||||||
|
private float downX;
|
||||||
|
private float downY;
|
||||||
|
private boolean dragged;
|
||||||
|
private long downTime;
|
||||||
|
private final int minTouchSlop = ViewConfiguration.get(mActivity).getScaledTouchSlop();
|
||||||
|
private final int longClickThreshold = ViewConfiguration.getLongPressTimeout();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
|
||||||
|
int action = e.getAction();
|
||||||
|
switch (action) {
|
||||||
|
case MotionEvent.ACTION_DOWN:
|
||||||
|
downX = e.getRawX();
|
||||||
|
downY = e.getRawY();
|
||||||
|
downTime = System.currentTimeMillis();
|
||||||
|
break;
|
||||||
|
case MotionEvent.ACTION_MOVE:
|
||||||
|
if(Math.abs(e.getRawX() - downX) > minTouchSlop || Math.abs(e.getRawY() - downY) > minTouchSlop) {
|
||||||
|
dragged = true;
|
||||||
|
}
|
||||||
|
if (!dragged) {
|
||||||
|
if (System.currentTimeMillis() - downTime >= longClickThreshold) {
|
||||||
|
onLongClick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MotionEvent.ACTION_UP:
|
||||||
|
if (!dragged) {
|
||||||
|
if (System.currentTimeMillis() - downTime < longClickThreshold) {
|
||||||
|
onClick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case MotionEvent.ACTION_CANCEL:
|
||||||
|
downX = 0;
|
||||||
|
downY = 0;
|
||||||
|
dragged = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
noPreviewImageView.setOnClickListener(view -> {
|
||||||
|
onClick();
|
||||||
|
});
|
||||||
|
|
||||||
|
noPreviewImageView.setOnLongClickListener(view -> onLongClick());
|
||||||
|
}
|
||||||
|
|
||||||
|
void onClick() {
|
||||||
|
int position = getBindingAdapterPosition();
|
||||||
|
if (position >= 0 && canStartActivity) {
|
||||||
|
Post post = getItem(position);
|
||||||
|
if (post != null) {
|
||||||
|
if (post.getPostType() == Post.TEXT_TYPE || !mSharedPreferences.getBoolean(SharedPreferencesUtils.CLICK_TO_SHOW_MEDIA_IN_GALLERY_LAYOUT, false)) {
|
||||||
|
openViewPostDetailActivity(post, getBindingAdapterPosition());
|
||||||
|
} else {
|
||||||
|
openMedia(post, layoutManager.findFirstVisibleItemPosition());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean onLongClick() {
|
||||||
|
int position = getBindingAdapterPosition();
|
||||||
|
if (position >= 0 && canStartActivity) {
|
||||||
|
Post post = getItem(position);
|
||||||
|
if (post != null) {
|
||||||
|
if (post.getPostType() == Post.TEXT_TYPE || mSharedPreferences.getBoolean(SharedPreferencesUtils.CLICK_TO_SHOW_MEDIA_IN_GALLERY_LAYOUT, false)) {
|
||||||
|
openViewPostDetailActivity(post, getBindingAdapterPosition());
|
||||||
|
} else {
|
||||||
|
openMedia(post, layoutManager.findFirstVisibleItemPosition());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PostGalleryGalleryTypeViewHolder extends PostGalleryBaseGalleryTypeViewHolder {
|
||||||
|
|
||||||
|
public PostGalleryGalleryTypeViewHolder(@NonNull ItemPostGalleryGalleryTypeBinding binding) {
|
||||||
|
super(binding.getRoot(), binding.galleryFrameLayoutItemPostGalleryGalleryType,
|
||||||
|
binding.galleryRecyclerViewItemPostGalleryGalleryType, binding.imageIndexTextViewItemPostGalleryGalleryType,
|
||||||
|
binding.imageViewNoPreviewItemPostGalleryGalleryType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class PostCard2VideoAutoplayViewHolder extends PostBaseViewHolder implements ToroPlayer {
|
class PostCard2VideoAutoplayViewHolder extends PostBaseViewHolder implements ToroPlayer {
|
||||||
@BindView(R.id.icon_gif_image_view_item_post_card_2_video_autoplay)
|
@BindView(R.id.icon_gif_image_view_item_post_card_2_video_autoplay)
|
||||||
AspectRatioGifImageView iconGifImageView;
|
AspectRatioGifImageView iconGifImageView;
|
||||||
@ -4231,6 +4663,41 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class PostCard2GalleryTypeViewHolder extends PostBaseGalleryTypeViewHolder {
|
||||||
|
|
||||||
|
PostCard2GalleryTypeViewHolder(ItemPostCard2GalleryTypeBinding binding) {
|
||||||
|
super(binding.getRoot(),
|
||||||
|
binding.iconGifImageViewItemPostCard2GalleryType,
|
||||||
|
binding.subredditNameTextViewItemPostCard2GalleryType,
|
||||||
|
binding.userTextViewItemPostCard2GalleryType,
|
||||||
|
binding.stickiedPostImageViewItemPostCard2GalleryType,
|
||||||
|
binding.postTimeTextViewItemPostCard2GalleryType,
|
||||||
|
binding.titleTextViewItemPostCard2GalleryType,
|
||||||
|
binding.typeTextViewItemPostCard2GalleryType,
|
||||||
|
binding.archivedImageViewItemPostCard2GalleryType,
|
||||||
|
binding.lockedImageViewItemPostCard2GalleryType,
|
||||||
|
binding.crosspostImageViewItemPostCard2GalleryType,
|
||||||
|
binding.nsfwTextViewItemPostCard2GalleryType,
|
||||||
|
binding.spoilerCustomTextViewItemPostCard2GalleryType,
|
||||||
|
binding.flairCustomTextViewItemPostCard2GalleryType,
|
||||||
|
binding.awardsTextViewItemPostCard2GalleryType,
|
||||||
|
binding.galleryFrameLayoutItemPostCard2GalleryType,
|
||||||
|
binding.galleryRecyclerViewItemPostCard2GalleryType,
|
||||||
|
binding.imageIndexTextViewItemPostCard2GalleryType,
|
||||||
|
binding.noPreviewImageViewItemPostCard2GalleryType,
|
||||||
|
binding.bottomConstraintLayoutItemPostCard2GalleryType,
|
||||||
|
binding.upvoteButtonItemPostCard2GalleryType,
|
||||||
|
binding.scoreTextViewItemPostCard2GalleryType,
|
||||||
|
binding.downvoteButtonItemPostCard2GalleryType,
|
||||||
|
binding.commentsCountTextViewItemPostCard2GalleryType,
|
||||||
|
binding.saveButtonItemPostCard2GalleryType,
|
||||||
|
binding.shareButtonItemPostCard2GalleryType,
|
||||||
|
true);
|
||||||
|
|
||||||
|
binding.dividerItemPostCard2GalleryType.setBackgroundColor(mDividerColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class PostCard2TextTypeViewHolder extends PostBaseViewHolder {
|
class PostCard2TextTypeViewHolder extends PostBaseViewHolder {
|
||||||
@BindView(R.id.icon_gif_image_view_item_post_card_2_text)
|
@BindView(R.id.icon_gif_image_view_item_post_card_2_text)
|
||||||
AspectRatioGifImageView iconGifImageView;
|
AspectRatioGifImageView iconGifImageView;
|
||||||
|
@ -3209,6 +3209,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
imageIndexTextView.setTextColor(mMediaIndicatorIconTint);
|
imageIndexTextView.setTextColor(mMediaIndicatorIconTint);
|
||||||
imageIndexTextView.setBackgroundColor(mMediaIndicatorBackgroundColor);
|
imageIndexTextView.setBackgroundColor(mMediaIndicatorBackgroundColor);
|
||||||
imageIndexTextView.setBorderColor(mMediaIndicatorBackgroundColor);
|
imageIndexTextView.setBorderColor(mMediaIndicatorBackgroundColor);
|
||||||
|
if (mActivity.typeface != null) {
|
||||||
|
imageIndexTextView.setTypeface(mActivity.typeface);
|
||||||
|
}
|
||||||
|
|
||||||
noPreviewImageView.setBackgroundColor(mNoPreviewPostTypeBackgroundColor);
|
noPreviewImageView.setBackgroundColor(mNoPreviewPostTypeBackgroundColor);
|
||||||
noPreviewImageView.setColorFilter(mNoPreviewPostTypeIconTint, android.graphics.PorterDuff.Mode.SRC_IN);
|
noPreviewImageView.setColorFilter(mNoPreviewPostTypeIconTint, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||||
|
@ -467,9 +467,13 @@ public class HistoryPostFragment extends Fragment implements FragmentCommunicato
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
|
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
|
||||||
if (!(viewHolder instanceof PostRecyclerViewAdapter.PostBaseViewHolder) &&
|
if (!(viewHolder instanceof HistoryPostRecyclerViewAdapter.PostBaseViewHolder) &&
|
||||||
!(viewHolder instanceof PostRecyclerViewAdapter.PostCompactBaseViewHolder)) {
|
!(viewHolder instanceof HistoryPostRecyclerViewAdapter.PostCompactBaseViewHolder)) {
|
||||||
return makeMovementFlags(0, 0);
|
return makeMovementFlags(0, 0);
|
||||||
|
} else if (viewHolder instanceof HistoryPostRecyclerViewAdapter.PostBaseGalleryTypeViewHolder) {
|
||||||
|
if (((HistoryPostRecyclerViewAdapter.PostBaseGalleryTypeViewHolder) viewHolder).isSwipeLocked()) {
|
||||||
|
return makeMovementFlags(0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
|
int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
|
||||||
return makeMovementFlags(0, swipeFlags);
|
return makeMovementFlags(0, swipeFlags);
|
||||||
@ -556,7 +560,7 @@ public class HistoryPostFragment extends Fragment implements FragmentCommunicato
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getSwipeThreshold(@NonNull RecyclerView.ViewHolder viewHolder) {
|
public float getSwipeThreshold(@NonNull RecyclerView.ViewHolder viewHolder) {
|
||||||
return 100;
|
return 1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user