mirror of
https://github.com/Docile-Alligator/Infinity-For-Reddit.git
synced 2026-08-18 02:51:58 +00:00
Continue implementing grid layout for gallery posts.
This commit is contained in:
@ -44,6 +44,7 @@ import androidx.media3.ui.DefaultTimeBar;
|
||||
import androidx.media3.ui.PlayerView;
|
||||
import androidx.media3.ui.TimeBar;
|
||||
import androidx.media3.ui.TrackSelectionDialogBuilder;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import androidx.recyclerview.widget.PagerSnapHelper;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
@ -73,6 +74,7 @@ import io.noties.markwon.core.MarkwonTheme;
|
||||
import jp.wasabeef.glide.transformations.BlurTransformation;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
import ml.docilealligator.infinityforreddit.FetchVideoLinkListener;
|
||||
import ml.docilealligator.infinityforreddit.PostGalleryGridLayoutItemDecoration;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
|
||||
import ml.docilealligator.infinityforreddit.SaveMemoryCenterInisdeDownsampleStrategy;
|
||||
@ -199,6 +201,7 @@ public class PostDetailRecyclerViewAdapterNew extends RecyclerView.Adapter<Recyc
|
||||
private final boolean mHideSubredditAndUserPrefix;
|
||||
private final boolean mHideTheNumberOfVotes;
|
||||
private final boolean mHideTheNumberOfComments;
|
||||
private final boolean mShowGalleryMediaAsGrid;
|
||||
private final boolean mSeparatePostAndComments;
|
||||
private final boolean mLegacyAutoplayVideoControllerUI;
|
||||
private final boolean mEasierToWatchInFullScreen;
|
||||
@ -326,6 +329,7 @@ public class PostDetailRecyclerViewAdapterNew extends RecyclerView.Adapter<Recyc
|
||||
mHideSubredditAndUserPrefix = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_SUBREDDIT_AND_USER_PREFIX, false);
|
||||
mHideTheNumberOfVotes = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_VOTES, false);
|
||||
mHideTheNumberOfComments = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_COMMENTS, false);
|
||||
mShowGalleryMediaAsGrid = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_GALLERY_MEDIA_AS_GRID, false);
|
||||
|
||||
mPostHistorySharedPreferences = postHistorySharedPreferences;
|
||||
|
||||
@ -909,12 +913,13 @@ public class PostDetailRecyclerViewAdapterNew extends RecyclerView.Adapter<Recyc
|
||||
}
|
||||
}
|
||||
} else if (holder instanceof PostDetailGalleryViewHolder) {
|
||||
int gallerySize = mPost.getGallery().size();
|
||||
if (mDataSavingMode && mDisableImagePreview) {
|
||||
((PostDetailGalleryViewHolder) holder).binding.noPreviewPostTypeImageViewItemPostDetailGallery.setVisibility(View.VISIBLE);
|
||||
((PostDetailGalleryViewHolder) holder).binding.noPreviewPostTypeImageViewItemPostDetailGallery.setImageResource(R.drawable.ic_gallery_day_night_24dp);
|
||||
} else {
|
||||
((PostDetailGalleryViewHolder) holder).binding.galleryFrameLayoutItemPostDetailGallery.setVisibility(View.VISIBLE);
|
||||
((PostDetailGalleryViewHolder) holder).binding.imageIndexTextViewItemPostDetailGallery.setText(mActivity.getString(R.string.image_index_in_gallery, 1, mPost.getGallery().size()));
|
||||
((PostDetailGalleryViewHolder) holder).binding.imageIndexTextViewItemPostDetailGallery.setText(mActivity.getString(R.string.image_index_in_gallery, 1, gallerySize));
|
||||
Post.Preview preview = getSuitablePreview(mPost.getPreviews());
|
||||
if (preview != null) {
|
||||
if (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0) {
|
||||
@ -929,6 +934,28 @@ public class PostDetailRecyclerViewAdapterNew extends RecyclerView.Adapter<Recyc
|
||||
((PostDetailGalleryViewHolder) holder).adapter.setBlurImage(
|
||||
(mPost.isNSFW() && mNeedBlurNsfw && !(mDoNotBlurNsfwInNsfwSubreddits && mFragment != null && mFragment.getIsNsfwSubreddit())) || (mPost.isSpoiler() && mNeedBlurSpoiler));
|
||||
}
|
||||
|
||||
RecyclerView.LayoutManager layoutManager = ((PostDetailGalleryViewHolder) holder).binding.galleryRecyclerViewItemPostDetailGallery.getLayoutManager();
|
||||
if (layoutManager instanceof GridLayoutManager) {
|
||||
int spanCount = gallerySize == 2 || gallerySize == 4 ? 2 : 3;
|
||||
((GridLayoutManager) layoutManager).setSpanCount(spanCount);
|
||||
if (((PostDetailGalleryViewHolder) holder).binding.galleryRecyclerViewItemPostDetailGallery.getItemDecorationCount() > 0) {
|
||||
RecyclerView.ItemDecoration itemDecoration = ((PostDetailGalleryViewHolder) holder).binding.galleryRecyclerViewItemPostDetailGallery.getItemDecorationAt(0);
|
||||
if (itemDecoration instanceof PostGalleryGridLayoutItemDecoration) {
|
||||
((PostGalleryGridLayoutItemDecoration) itemDecoration).setSpanCount(spanCount);
|
||||
}
|
||||
}
|
||||
|
||||
int padding = (int) (8 * mScale);
|
||||
((PostDetailGalleryViewHolder) holder).binding.galleryRecyclerViewItemPostDetailGallery.setPadding(
|
||||
0, 0, padding, 0
|
||||
);
|
||||
((PostDetailGalleryViewHolder) holder).adapter.setIsGridLayout(true);
|
||||
((PostDetailGalleryViewHolder) holder).binding.imageIndexTextViewItemPostDetailGallery.setVisibility(View.GONE);
|
||||
} else if (layoutManager instanceof LinearLayoutManagerBugFixed) {
|
||||
((PostDetailGalleryViewHolder) holder).binding.galleryRecyclerViewItemPostDetailGallery.setPadding(0, 0, 0, 0);
|
||||
((PostDetailGalleryViewHolder) holder).binding.imageIndexTextViewItemPostDetailGallery.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
if (itemWidth < 250) {
|
||||
@ -1386,9 +1413,14 @@ public class PostDetailRecyclerViewAdapterNew extends RecyclerView.Adapter<Recyc
|
||||
}
|
||||
PostOptionsBottomSheetFragment postOptionsBottomSheetFragment;
|
||||
if (mPost.getPostType() == Post.GALLERY_TYPE && this instanceof PostDetailGalleryViewHolder) {
|
||||
postOptionsBottomSheetFragment = PostOptionsBottomSheetFragment.newInstance(mPost,
|
||||
mFragment.getPostListPosition(),
|
||||
((LinearLayoutManagerBugFixed) ((PostDetailGalleryViewHolder) this).binding.galleryRecyclerViewItemPostDetailGallery.getLayoutManager()).findFirstVisibleItemPosition());
|
||||
RecyclerView.LayoutManager layoutManager = ((PostDetailGalleryViewHolder) this).binding.galleryRecyclerViewItemPostDetailGallery.getLayoutManager();
|
||||
if (layoutManager instanceof LinearLayoutManagerBugFixed) {
|
||||
postOptionsBottomSheetFragment = PostOptionsBottomSheetFragment.newInstance(mPost,
|
||||
mFragment.getPostListPosition(),
|
||||
((LinearLayoutManagerBugFixed) layoutManager).findFirstVisibleItemPosition());
|
||||
} else {
|
||||
postOptionsBottomSheetFragment = PostOptionsBottomSheetFragment.newInstance(mPost, mFragment.getPostListPosition());
|
||||
}
|
||||
} else {
|
||||
postOptionsBottomSheetFragment = PostOptionsBottomSheetFragment.newInstance(mPost, mFragment.getPostListPosition());
|
||||
}
|
||||
@ -2608,7 +2640,16 @@ public class PostDetailRecyclerViewAdapterNew extends RecyclerView.Adapter<Recyc
|
||||
mCardViewColor, mCommentColor, mScale);
|
||||
binding.galleryRecyclerViewItemPostDetailGallery.setAdapter(adapter);
|
||||
new PagerSnapHelper().attachToRecyclerView(binding.galleryRecyclerViewItemPostDetailGallery);
|
||||
LinearLayoutManagerBugFixed layoutManager = new LinearLayoutManagerBugFixed(mActivity, RecyclerView.HORIZONTAL, false);
|
||||
RecyclerView.LayoutManager layoutManager;
|
||||
if (mShowGalleryMediaAsGrid) {
|
||||
adapter.setIsGridLayout(true);
|
||||
layoutManager = new GridLayoutManager(mActivity, 3);
|
||||
} else {
|
||||
layoutManager = new LinearLayoutManagerBugFixed(mActivity, RecyclerView.HORIZONTAL, false);
|
||||
}
|
||||
PostGalleryGridLayoutItemDecoration itemDecoration =
|
||||
new PostGalleryGridLayoutItemDecoration(mActivity, R.dimen.staggeredLayoutManagerItemOffset, 2);
|
||||
binding.galleryRecyclerViewItemPostDetailGallery.addItemDecoration(itemDecoration);
|
||||
binding.galleryRecyclerViewItemPostDetailGallery.setLayoutManager(layoutManager);
|
||||
binding.galleryRecyclerViewItemPostDetailGallery.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
@ -2622,7 +2663,9 @@ public class PostDetailRecyclerViewAdapterNew extends RecyclerView.Adapter<Recyc
|
||||
if (mPost == null) {
|
||||
return;
|
||||
}
|
||||
binding.imageIndexTextViewItemPostDetailGallery.setText(mActivity.getString(R.string.image_index_in_gallery, layoutManager.findFirstVisibleItemPosition() + 1, mPost.getGallery().size()));
|
||||
if (layoutManager instanceof LinearLayoutManagerBugFixed) {
|
||||
binding.imageIndexTextViewItemPostDetailGallery.setText(mActivity.getString(R.string.image_index_in_gallery, ((LinearLayoutManagerBugFixed) layoutManager).findFirstVisibleItemPosition() + 1, mPost.getGallery().size()));
|
||||
}
|
||||
}
|
||||
});
|
||||
binding.galleryRecyclerViewItemPostDetailGallery.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
|
||||
@ -2677,7 +2720,12 @@ public class PostDetailRecyclerViewAdapterNew extends RecyclerView.Adapter<Recyc
|
||||
int position = getBindingAdapterPosition();
|
||||
if (position >= 0) {
|
||||
if (mPost != null) {
|
||||
openMedia(mPost, layoutManager.findFirstVisibleItemPosition());
|
||||
View itemView = binding.galleryRecyclerViewItemPostDetailGallery.findChildViewUnder(e.getX(), e.getY());
|
||||
int currentItemPosition = -1;
|
||||
if (itemView != null) {
|
||||
currentItemPosition = binding.galleryRecyclerViewItemPostDetailGallery.getChildAdapterPosition(itemView);
|
||||
}
|
||||
openMedia(mPost, Math.max(0, currentItemPosition));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2713,7 +2761,7 @@ public class PostDetailRecyclerViewAdapterNew extends RecyclerView.Adapter<Recyc
|
||||
});
|
||||
|
||||
binding.noPreviewPostTypeImageViewItemPostDetailGallery.setOnClickListener(view -> {
|
||||
openMedia(mPost, layoutManager.findFirstVisibleItemPosition());
|
||||
openMedia(mPost);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -3785,9 +3785,6 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
galleryRecyclerView.setAdapter(adapter);
|
||||
new PagerSnapHelper().attachToRecyclerView(galleryRecyclerView);
|
||||
galleryRecyclerView.setRecycledViewPool(mGalleryRecycledViewPool);
|
||||
/*//LinearLayoutManagerBugFixed layoutManager = new LinearLayoutManagerBugFixed(mActivity, RecyclerView.HORIZONTAL, false);
|
||||
GridLayoutManager layoutManager = new GridLayoutManager(mActivity, 3);
|
||||
galleryRecyclerView.setLayoutManager(layoutManager);*/
|
||||
PostGalleryGridLayoutItemDecoration itemDecoration =
|
||||
new PostGalleryGridLayoutItemDecoration(mActivity, R.dimen.staggeredLayoutManagerItemOffset, 2);
|
||||
galleryRecyclerView.addItemDecoration(itemDecoration);
|
||||
|
||||
@ -61,4 +61,9 @@
|
||||
app:key="comment_thread_continuity_capacity"
|
||||
app:title="@string/settings_comment_thread_continuity_capacity_title" />
|
||||
|
||||
<ml.docilealligator.infinityforreddit.customviews.preference.CustomFontSwitchPreference
|
||||
app:defaultValue="false"
|
||||
app:key="show_gallery_media_as_grid"
|
||||
app:title="@string/settings_show_gallery_media_as_grid" />
|
||||
|
||||
</PreferenceScreen>
|
||||
@ -55,4 +55,9 @@
|
||||
app:key="comment_thread_continuity_capacity"
|
||||
app:title="@string/settings_comment_thread_continuity_capacity_title" />
|
||||
|
||||
<ml.docilealligator.infinityforreddit.customviews.preference.CustomFontSwitchPreference
|
||||
app:defaultValue="false"
|
||||
app:key="show_gallery_media_as_grid"
|
||||
app:title="@string/settings_show_gallery_media_as_grid" />
|
||||
|
||||
</PreferenceScreen>
|
||||
Reference in New Issue
Block a user