mirror of
				https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
				synced 2025-10-31 17:08:11 +01:00 
			
		
		
		
	Swipe between gallery images in PostFragment.
This commit is contained in:
		| @@ -13,6 +13,7 @@ import androidx.annotation.NonNull; | ||||
| import androidx.fragment.app.Fragment; | ||||
|  | ||||
| import com.r0adkll.slidr.Slidr; | ||||
| import com.r0adkll.slidr.model.SlidrInterface; | ||||
|  | ||||
| import org.greenrobot.eventbus.EventBus; | ||||
| import org.greenrobot.eventbus.Subscribe; | ||||
| @@ -53,6 +54,7 @@ public class AccountPostsActivity extends BaseActivity implements SortTypeSelect | ||||
|     SharedPreferences mCurrentAccountSharedPreferences; | ||||
|     @Inject | ||||
|     CustomThemeWrapper mCustomThemeWrapper; | ||||
|     private SlidrInterface mSlidrInterface; | ||||
|     private String mAccessToken; | ||||
|     private String mAccountName; | ||||
|     private String mUserWhere; | ||||
| @@ -74,7 +76,7 @@ public class AccountPostsActivity extends BaseActivity implements SortTypeSelect | ||||
|         applyCustomTheme(); | ||||
|  | ||||
|         if (mSharedPreferences.getBoolean(SharedPreferencesUtils.SWIPE_RIGHT_TO_GO_BACK, true)) { | ||||
|             Slidr.attach(this); | ||||
|             mSlidrInterface = Slidr.attach(this); | ||||
|         } | ||||
|  | ||||
|         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { | ||||
| @@ -239,4 +241,18 @@ public class AccountPostsActivity extends BaseActivity implements SortTypeSelect | ||||
|             ((PostFragment) mFragment).goBackToTop(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void lockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.lock(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void unlockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.unlock(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -229,12 +229,14 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void lockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.lock(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void unlockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.unlock(); | ||||
|   | ||||
| @@ -391,4 +391,13 @@ public abstract class BaseActivity extends AppCompatActivity implements CustomFo | ||||
|         this.titleTypeface = titleTypeface; | ||||
|         this.contentTypeface = contentTypeface; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public void lockSwipeRightToGoBack() { | ||||
|  | ||||
|     } | ||||
|  | ||||
|     public void unlockSwipeRightToGoBack() { | ||||
|  | ||||
|     } | ||||
| } | ||||
| @@ -41,12 +41,11 @@ import ml.docilealligator.infinityforreddit.Infinity; | ||||
| import ml.docilealligator.infinityforreddit.R; | ||||
| import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; | ||||
| import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; | ||||
| import ml.docilealligator.infinityforreddit.customviews.MarkwonLinearLayoutManager; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockScrollView; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockInterface; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockLinearLayoutManager; | ||||
| import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent; | ||||
| import ml.docilealligator.infinityforreddit.markdown.MarkdownUtils; | ||||
| import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; | ||||
| import ml.docilealligator.infinityforreddit.utils.Utils; | ||||
|  | ||||
| public class FullMarkdownActivity extends BaseActivity { | ||||
|  | ||||
| @@ -145,7 +144,7 @@ public class FullMarkdownActivity extends BaseActivity { | ||||
|                 miscPlugin, markdownColor, spoilerBackgroundColor, null); | ||||
|  | ||||
|         MarkwonAdapter markwonAdapter = MarkdownUtils.createTablesAdapter(); | ||||
|         LinearLayoutManagerBugFixed linearLayoutManager = new MarkwonLinearLayoutManager(this, new SwipeLockScrollView.SwipeLockInterface() { | ||||
|         LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(this, new SwipeLockInterface() { | ||||
|             @Override | ||||
|             public void lockSwipe() { | ||||
|                 if (mSlidrInterface != null) { | ||||
|   | ||||
| @@ -227,12 +227,14 @@ public class HistoryActivity extends BaseActivity implements ActivityToolbarInte | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void lockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.lock(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void unlockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.unlock(); | ||||
|   | ||||
| @@ -393,13 +393,15 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void lockSwipeRightToGoBack() { | ||||
|     @Override | ||||
|     public void lockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.lock(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void unlockSwipeRightToGoBack() { | ||||
|     @Override | ||||
|     public void unlockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.unlock(); | ||||
|         } | ||||
|   | ||||
| @@ -913,13 +913,15 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void lockSwipeRightToGoBack() { | ||||
|     @Override | ||||
|     public void lockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.lock(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void unlockSwipeRightToGoBack() { | ||||
|     @Override | ||||
|     public void unlockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.unlock(); | ||||
|         } | ||||
|   | ||||
| @@ -449,13 +449,15 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void lockSwipeRightToGoBack() { | ||||
|     @Override | ||||
|     public void lockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.lock(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void unlockSwipeRightToGoBack() { | ||||
|     @Override | ||||
|     public void unlockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.unlock(); | ||||
|         } | ||||
|   | ||||
| @@ -916,12 +916,14 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void lockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.lock(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void unlockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.unlock(); | ||||
|   | ||||
| @@ -60,6 +60,7 @@ public class ViewRedditGalleryActivity extends AppCompatActivity implements SetA | ||||
|     public static final String EXTRA_REDDIT_GALLERY = "ERG"; | ||||
|     public static final String EXTRA_SUBREDDIT_NAME = "ESN"; | ||||
|     public static final String EXTRA_IS_NSFW = "EIN"; | ||||
|     public static final String EXTRA_GALLERY_ITEM_INDEX = "EGII"; | ||||
|  | ||||
|     @BindView(R.id.hauler_view_view_reddit_gallery_activity) | ||||
|     HaulerView haulerView; | ||||
|   | ||||
| @@ -1547,13 +1547,15 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp | ||||
|         InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId()); | ||||
|     } | ||||
|  | ||||
|     private void lockSwipeRightToGoBack() { | ||||
|     @Override | ||||
|     public void lockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.lock(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void unlockSwipeRightToGoBack() { | ||||
|     @Override | ||||
|     public void unlockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.unlock(); | ||||
|         } | ||||
|   | ||||
| @@ -1748,12 +1748,14 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void lockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.lock(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void unlockSwipeRightToGoBack() { | ||||
|         if (mSlidrInterface != null) { | ||||
|             mSlidrInterface.unlock(); | ||||
|   | ||||
| @@ -50,8 +50,8 @@ import ml.docilealligator.infinityforreddit.apis.RedditAPI; | ||||
| import ml.docilealligator.infinityforreddit.bottomsheetfragments.UrlMenuBottomSheetFragment; | ||||
| import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; | ||||
| import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; | ||||
| import ml.docilealligator.infinityforreddit.customviews.MarkwonLinearLayoutManager; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockScrollView; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockInterface; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockLinearLayoutManager; | ||||
| import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent; | ||||
| import ml.docilealligator.infinityforreddit.markdown.MarkdownUtils; | ||||
| import ml.docilealligator.infinityforreddit.utils.JSONUtils; | ||||
| @@ -178,7 +178,7 @@ public class WikiActivity extends BaseActivity { | ||||
|                 miscPlugin, markdownColor, spoilerBackgroundColor, onLinkLongClickListener); | ||||
|  | ||||
|         markwonAdapter = MarkdownUtils.createTablesAdapter(); | ||||
|         LinearLayoutManagerBugFixed linearLayoutManager = new MarkwonLinearLayoutManager(this, new SwipeLockScrollView.SwipeLockInterface() { | ||||
|         LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(this, new SwipeLockInterface() { | ||||
|             @Override | ||||
|             public void lockSwipe() { | ||||
|                 if (mSlidrInterface != null) { | ||||
|   | ||||
| @@ -53,9 +53,9 @@ import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; | ||||
| import ml.docilealligator.infinityforreddit.customviews.CommentIndentationView; | ||||
| import ml.docilealligator.infinityforreddit.customviews.CustomMarkwonAdapter; | ||||
| import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; | ||||
| import ml.docilealligator.infinityforreddit.customviews.MarkwonLinearLayoutManager; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SpoilerOnClickTextView; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockScrollView; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockInterface; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockLinearLayoutManager; | ||||
| import ml.docilealligator.infinityforreddit.markdown.MarkdownUtils; | ||||
| import ml.docilealligator.infinityforreddit.utils.APIUtils; | ||||
| import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; | ||||
| @@ -502,7 +502,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment | ||||
|             }); | ||||
|  | ||||
|             commentMarkdownView.setRecycledViewPool(recycledViewPool); | ||||
|             LinearLayoutManagerBugFixed linearLayoutManager = new MarkwonLinearLayoutManager(mActivity, new SwipeLockScrollView.SwipeLockInterface() { | ||||
|             LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(mActivity, new SwipeLockInterface() { | ||||
|                 @Override | ||||
|                 public void lockSwipe() { | ||||
|                     if (mActivity instanceof AccountSavedThingActivity) { | ||||
|   | ||||
| @@ -62,9 +62,9 @@ import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; | ||||
| import ml.docilealligator.infinityforreddit.customviews.CommentIndentationView; | ||||
| import ml.docilealligator.infinityforreddit.customviews.CustomMarkwonAdapter; | ||||
| import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; | ||||
| import ml.docilealligator.infinityforreddit.customviews.MarkwonLinearLayoutManager; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SpoilerOnClickTextView; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockScrollView; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockInterface; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockLinearLayoutManager; | ||||
| import ml.docilealligator.infinityforreddit.fragments.ViewPostDetailFragment; | ||||
| import ml.docilealligator.infinityforreddit.markdown.MarkdownUtils; | ||||
| import ml.docilealligator.infinityforreddit.post.Post; | ||||
| @@ -1268,7 +1268,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi | ||||
|             } | ||||
|  | ||||
|             commentMarkdownView.setRecycledViewPool(recycledViewPool); | ||||
|             LinearLayoutManagerBugFixed linearLayoutManager = new MarkwonLinearLayoutManager(mActivity, new SwipeLockScrollView.SwipeLockInterface() { | ||||
|             LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(mActivity, new SwipeLockInterface() { | ||||
|                 @Override | ||||
|                 public void lockSwipe() { | ||||
|                     ((ViewPostDetailActivity) mActivity).lockSwipeRightToGoBack(); | ||||
|   | ||||
| @@ -89,8 +89,8 @@ import ml.docilealligator.infinityforreddit.bottomsheetfragments.ShareLinkBottom | ||||
| import ml.docilealligator.infinityforreddit.bottomsheetfragments.UrlMenuBottomSheetFragment; | ||||
| import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; | ||||
| import ml.docilealligator.infinityforreddit.customviews.AspectRatioGifImageView; | ||||
| import ml.docilealligator.infinityforreddit.customviews.MarkwonLinearLayoutManager; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockScrollView; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockInterface; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockLinearLayoutManager; | ||||
| import ml.docilealligator.infinityforreddit.fragments.ViewPostDetailFragment; | ||||
| import ml.docilealligator.infinityforreddit.markdown.MarkdownUtils; | ||||
| import ml.docilealligator.infinityforreddit.post.Post; | ||||
| @@ -1191,7 +1191,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler | ||||
|                 mActivity.startActivity(intent); | ||||
|             }); | ||||
|  | ||||
|             mContentMarkdownView.setLayoutManager(new MarkwonLinearLayoutManager(mActivity, new SwipeLockScrollView.SwipeLockInterface() { | ||||
|             mContentMarkdownView.setLayoutManager(new SwipeLockLinearLayoutManager(mActivity, new SwipeLockInterface() { | ||||
|                 @Override | ||||
|                 public void lockSwipe() { | ||||
|                     ((ViewPostDetailActivity) mActivity).lockSwipeRightToGoBack(); | ||||
|   | ||||
| @@ -0,0 +1,155 @@ | ||||
| package ml.docilealligator.infinityforreddit.adapters; | ||||
|  | ||||
| import android.content.res.ColorStateList; | ||||
| import android.graphics.Typeface; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.widget.ImageView; | ||||
|  | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
|  | ||||
| import com.bumptech.glide.RequestBuilder; | ||||
| import com.bumptech.glide.RequestManager; | ||||
| 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.Target; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| import jp.wasabeef.glide.transformations.BlurTransformation; | ||||
| import ml.docilealligator.infinityforreddit.SaveMemoryCenterInisdeDownsampleStrategy; | ||||
| import ml.docilealligator.infinityforreddit.databinding.ItemGalleryImageInPostFeedBinding; | ||||
| import ml.docilealligator.infinityforreddit.post.Post; | ||||
|  | ||||
| public class PostGalleryTypeImageRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | ||||
|     private RequestManager glide; | ||||
|     private Typeface typeface; | ||||
|     private SaveMemoryCenterInisdeDownsampleStrategy saveMemoryCenterInisdeDownsampleStrategy; | ||||
|     private int mColorAccent; | ||||
|     private int mPrimaryTextColor; | ||||
|     private float mScale; | ||||
|     private ArrayList<Post.Gallery> galleryImages; | ||||
|     private boolean blurImage; | ||||
|     private float ratio; | ||||
|     private OnItemClickListener onItemClickListener; | ||||
|  | ||||
|     public PostGalleryTypeImageRecyclerViewAdapter(RequestManager glide, Typeface typeface, | ||||
|                                                    SaveMemoryCenterInisdeDownsampleStrategy saveMemoryCenterInisdeDownsampleStrategy, | ||||
|                                                    int mColorAccent, int mPrimaryTextColor, float scale, | ||||
|                                                    OnItemClickListener onItemClickListener) { | ||||
|         this.glide = glide; | ||||
|         this.typeface = typeface; | ||||
|         this.saveMemoryCenterInisdeDownsampleStrategy = saveMemoryCenterInisdeDownsampleStrategy; | ||||
|         this.mColorAccent = mColorAccent; | ||||
|         this.mPrimaryTextColor = mPrimaryTextColor; | ||||
|         this.mScale = scale; | ||||
|         this.onItemClickListener = onItemClickListener; | ||||
|     } | ||||
|  | ||||
|     @NonNull | ||||
|     @Override | ||||
|     public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { | ||||
|         return new ImageViewHolder(ItemGalleryImageInPostFeedBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { | ||||
|         if (holder instanceof ImageViewHolder) { | ||||
|             if (ratio < 0) { | ||||
|                 int height = (int) (400 * mScale); | ||||
|                 ((ImageViewHolder) holder).binding.imageViewItemGalleryImageInPostFeed.setScaleType(ImageView.ScaleType.CENTER_CROP); | ||||
|                 ((ImageViewHolder) holder).binding.imageViewItemGalleryImageInPostFeed.getLayoutParams().height = height; | ||||
|             } else { | ||||
|                 ((ImageViewHolder) holder).binding.imageViewItemGalleryImageInPostFeed.setRatio(ratio); | ||||
|             } | ||||
|             ((ImageViewHolder) holder).binding.errorTextViewItemGalleryImageInPostFeed.setVisibility(View.GONE); | ||||
|             ((ImageViewHolder) holder).binding.progressBarItemGalleryImageInPostFeed.setVisibility(View.VISIBLE); | ||||
|             loadImage((ImageViewHolder) holder); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int getItemCount() { | ||||
|         return galleryImages == null ? 0 : galleryImages.size(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { | ||||
|         super.onViewRecycled(holder); | ||||
|     } | ||||
|  | ||||
|     private void loadImage(ImageViewHolder holder) { | ||||
|         holder.binding.imageViewItemGalleryImageInPostFeed.setRatio(ratio); | ||||
|         RequestBuilder<Drawable> imageRequestBuilder = glide.load(galleryImages.get(holder.getBindingAdapterPosition()).url).listener(new RequestListener<>() { | ||||
|             @Override | ||||
|             public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { | ||||
|                 holder.binding.progressBarItemGalleryImageInPostFeed.setVisibility(View.GONE); | ||||
|                 holder.binding.errorTextViewItemGalleryImageInPostFeed.setVisibility(View.VISIBLE); | ||||
|                 return false; | ||||
|             } | ||||
|  | ||||
|             @Override | ||||
|             public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { | ||||
|                 holder.binding.errorTextViewItemGalleryImageInPostFeed.setVisibility(View.GONE); | ||||
|                 holder.binding.progressBarItemGalleryImageInPostFeed.setVisibility(View.GONE); | ||||
|                 return false; | ||||
|             } | ||||
|         }); | ||||
|         if (blurImage) { | ||||
|             imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))) | ||||
|                     .into(holder.binding.imageViewItemGalleryImageInPostFeed); | ||||
|         } else { | ||||
|             imageRequestBuilder.centerInside().downsample(saveMemoryCenterInisdeDownsampleStrategy).into(holder.binding.imageViewItemGalleryImageInPostFeed); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setGalleryImages(ArrayList<Post.Gallery> galleryImages) { | ||||
|         this.galleryImages = galleryImages; | ||||
|         notifyDataSetChanged(); | ||||
|     } | ||||
|  | ||||
|     public void setBlurImage(boolean blurImage) { | ||||
|         this.blurImage = blurImage; | ||||
|     } | ||||
|  | ||||
|     public void setRatio(float ratio) { | ||||
|         this.ratio = ratio; | ||||
|     } | ||||
|  | ||||
|     class ImageViewHolder extends RecyclerView.ViewHolder { | ||||
|  | ||||
|         ItemGalleryImageInPostFeedBinding binding; | ||||
|  | ||||
|         public ImageViewHolder(ItemGalleryImageInPostFeedBinding binding) { | ||||
|             super(binding.getRoot()); | ||||
|  | ||||
|             this.binding = binding; | ||||
|  | ||||
|             if (typeface != null) { | ||||
|                 binding.errorTextViewItemGalleryImageInPostFeed.setTypeface(typeface); | ||||
|             } | ||||
|             binding.progressBarItemGalleryImageInPostFeed.setIndeterminateTintList(ColorStateList.valueOf(mColorAccent)); | ||||
|             binding.errorTextViewItemGalleryImageInPostFeed.setTextColor(mPrimaryTextColor); | ||||
|  | ||||
|             binding.imageViewItemGalleryImageInPostFeed.setOnClickListener(view -> { | ||||
|                 onItemClickListener.onClick(getBindingAdapterPosition()); | ||||
|             }); | ||||
|  | ||||
|             binding.errorTextViewItemGalleryImageInPostFeed.setOnClickListener(view -> { | ||||
|                 binding.progressBarItemGalleryImageInPostFeed.setVisibility(View.VISIBLE); | ||||
|                 binding.errorTextViewItemGalleryImageInPostFeed.setVisibility(View.GONE); | ||||
|                 loadImage(this); | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public interface OnItemClickListener { | ||||
|         void onClick(int galleryItemIndex); | ||||
|     } | ||||
| } | ||||
| @@ -11,7 +11,9 @@ import android.graphics.drawable.Drawable; | ||||
| import android.net.Uri; | ||||
| import android.os.Bundle; | ||||
| import android.os.Handler; | ||||
| import android.util.Log; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.MotionEvent; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.widget.FrameLayout; | ||||
| @@ -32,6 +34,8 @@ import androidx.core.content.ContextCompat; | ||||
| import androidx.paging.PagingDataAdapter; | ||||
| import androidx.recyclerview.widget.DiffUtil; | ||||
| import androidx.recyclerview.widget.ItemTouchHelper; | ||||
| import androidx.recyclerview.widget.LinearSnapHelper; | ||||
| import androidx.recyclerview.widget.PagerSnapHelper; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
|  | ||||
| import com.bumptech.glide.Glide; | ||||
| @@ -81,6 +85,9 @@ import ml.docilealligator.infinityforreddit.apis.StreamableAPI; | ||||
| import ml.docilealligator.infinityforreddit.bottomsheetfragments.ShareLinkBottomSheetFragment; | ||||
| import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; | ||||
| import ml.docilealligator.infinityforreddit.customviews.AspectRatioGifImageView; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockInterface; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockLinearLayoutManager; | ||||
| import ml.docilealligator.infinityforreddit.databinding.ItemPostGalleryTypeBinding; | ||||
| import ml.docilealligator.infinityforreddit.events.PostUpdateEventToPostDetailFragment; | ||||
| import ml.docilealligator.infinityforreddit.fragments.PostFragment; | ||||
| import ml.docilealligator.infinityforreddit.post.Post; | ||||
| @@ -107,12 +114,13 @@ import retrofit2.Retrofit; | ||||
| public class PostRecyclerViewAdapter 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_WITH_PREVIEW_TYPE = 2; | ||||
|     private static final int VIEW_TYPE_POST_CARD_TEXT_TYPE = 3; | ||||
|     private static final int VIEW_TYPE_POST_COMPACT = 4; | ||||
|     private static final int VIEW_TYPE_POST_GALLERY = 5; | ||||
|     private static final int VIEW_TYPE_POST_CARD_2_VIDEO_AUTOPLAY_TYPE = 6; | ||||
|     private static final int VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE = 7; | ||||
|     private static final int VIEW_TYPE_POST_CARD_2_TEXT_TYPE = 8; | ||||
|     private static final int VIEW_TYPE_POST_CARD_GALLERY_TYPE = 3; | ||||
|     private static final int VIEW_TYPE_POST_CARD_TEXT_TYPE = 4; | ||||
|     private static final int VIEW_TYPE_POST_COMPACT = 5; | ||||
|     private static final int VIEW_TYPE_POST_GALLERY = 6; | ||||
|     private static final int VIEW_TYPE_POST_CARD_2_VIDEO_AUTOPLAY_TYPE = 7; | ||||
|     private static final int VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE = 8; | ||||
|     private static final int VIEW_TYPE_POST_CARD_2_TEXT_TYPE = 9; | ||||
|  | ||||
|     private static final DiffUtil.ItemCallback<Post> DIFF_CALLBACK = new DiffUtil.ItemCallback<Post>() { | ||||
|         @Override | ||||
| @@ -217,6 +225,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie | ||||
|     private ExoCreator mExoCreator; | ||||
|     private Callback mCallback; | ||||
|     private boolean canPlayVideo = true; | ||||
|     private RecyclerView.RecycledViewPool mGalleryRecycledViewPool; | ||||
|  | ||||
|     public PostRecyclerViewAdapter(BaseActivity activity, PostFragment fragment, Executor executor, Retrofit oauthRetrofit, | ||||
|                                    Retrofit gfycatRetrofit, Retrofit redgifsRetrofit, Retrofit streambleRetrofit, | ||||
| @@ -345,6 +354,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie | ||||
|             mLocale = locale; | ||||
|             mExoCreator = exoCreator; | ||||
|             mCallback = callback; | ||||
|  | ||||
|             mGalleryRecycledViewPool = new RecyclerView.RecycledViewPool(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -368,8 +379,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie | ||||
|                         return VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE; | ||||
|                     case Post.GIF_TYPE: | ||||
|                     case Post.IMAGE_TYPE: | ||||
|                     case Post.GALLERY_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.NO_PREVIEW_LINK_TYPE: | ||||
|                         switch (mDefaultLinkPostLayout) { | ||||
| @@ -448,6 +460,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie | ||||
|             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) { | ||||
|             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) { | ||||
|             return new PostTextTypeViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_text, parent, false)); | ||||
|         } else if (viewType == VIEW_TYPE_POST_COMPACT) { | ||||
| @@ -781,10 +795,6 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie | ||||
|                             ((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setVisibility(View.VISIBLE); | ||||
|                             ((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) { | ||||
| @@ -801,8 +811,6 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie | ||||
|                             ((PostWithPreviewTypeViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE); | ||||
|                         } else if (post.getPostType() == Post.LINK_TYPE) { | ||||
|                             ((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)) { | ||||
|                         ((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setVisibility(View.VISIBLE); | ||||
| @@ -850,6 +858,26 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } else if (holder instanceof PostGalleryTypeViewHolder) { | ||||
|                     if (mDataSavingMode && mDisableImagePreview) { | ||||
|                         ((PostGalleryTypeViewHolder) holder).binding.noPreviewImageViewItemPostGalleryType.setVisibility(View.VISIBLE); | ||||
|                         ((PostGalleryTypeViewHolder) holder).binding.noPreviewImageViewItemPostGalleryType.setImageResource(R.drawable.ic_gallery_24dp); | ||||
|                     } else { | ||||
|                         ((PostGalleryTypeViewHolder) holder).binding.galleryRecyclerViewItemPostGalleryType.setVisibility(View.VISIBLE); | ||||
|                         Post.Preview preview = getSuitablePreview(post.getPreviews()); | ||||
|                         if (preview != null) { | ||||
|                             if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) { | ||||
|                                 ((PostGalleryTypeViewHolder) holder).adapter.setRatio(-1); | ||||
|                             } else { | ||||
|                                 ((PostGalleryTypeViewHolder) holder).adapter.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth()); | ||||
|                             } | ||||
|                         } else { | ||||
|                             ((PostGalleryTypeViewHolder) holder).adapter.setRatio(-1); | ||||
|                         } | ||||
|                         ((PostGalleryTypeViewHolder) holder).adapter.setGalleryImages(post.getGallery()); | ||||
|                         ((PostGalleryTypeViewHolder) holder).adapter.setBlurImage( | ||||
|                                 (post.isNSFW() && mNeedBlurNsfw && !(mDoNotBlurNsfwInNsfwSubreddits && mFragment != null && mFragment.getIsNsfwSubreddit())) || (post.isSpoiler() && mNeedBlurSpoiler)); | ||||
|                     } | ||||
|                 } else if (holder instanceof PostTextTypeViewHolder) { | ||||
|                     if (!mHideTextPostContent && !post.isSpoiler() && post.getSelfTextPlainTrimmed() != null && !post.getSelfTextPlainTrimmed().equals("")) { | ||||
|                         ((PostTextTypeViewHolder) holder).contentTextView.setVisibility(View.VISIBLE); | ||||
| @@ -1861,6 +1889,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie | ||||
|                 ((PostWithPreviewTypeViewHolder) holder).progressBar.setVisibility(View.GONE); | ||||
|                 ((PostWithPreviewTypeViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.GONE); | ||||
|                 ((PostWithPreviewTypeViewHolder) holder).linkTextView.setVisibility(View.GONE); | ||||
|             } else if (holder instanceof PostGalleryTypeViewHolder) { | ||||
|                 ((PostGalleryTypeViewHolder) holder).binding.galleryRecyclerViewItemPostGalleryType.setVisibility(View.GONE); | ||||
|                 ((PostGalleryTypeViewHolder) holder).binding.noPreviewImageViewItemPostGalleryType.setVisibility(View.GONE); | ||||
|             } else if (holder instanceof PostTextTypeViewHolder) { | ||||
|                 ((PostTextTypeViewHolder) holder).contentTextView.setText(""); | ||||
|                 ((PostTextTypeViewHolder) holder).contentTextView.setTextColor(mPostContentColor); | ||||
| @@ -2032,6 +2063,10 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie | ||||
|     } | ||||
|  | ||||
|     private void openMedia(Post post) { | ||||
|         openMedia(post, 0); | ||||
|     } | ||||
|  | ||||
|     private void openMedia(Post post, int galleryItemIndex) { | ||||
|         if (canStartActivity) { | ||||
|             canStartActivity = false; | ||||
|             if (post.getPostType() == Post.VIDEO_TYPE) { | ||||
| @@ -2086,6 +2121,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie | ||||
|                 intent.putParcelableArrayListExtra(ViewRedditGalleryActivity.EXTRA_REDDIT_GALLERY, post.getGallery()); | ||||
|                 intent.putExtra(ViewRedditGalleryActivity.EXTRA_SUBREDDIT_NAME, post.getSubredditName()); | ||||
|                 intent.putExtra(ViewRedditGalleryActivity.EXTRA_IS_NSFW, post.isNSFW()); | ||||
|                 intent.putExtra(ViewRedditGalleryActivity.EXTRA_GALLERY_ITEM_INDEX, galleryItemIndex); | ||||
|                 mActivity.startActivity(intent); | ||||
|             } | ||||
|         } | ||||
| @@ -3067,6 +3103,100 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public class PostGalleryTypeViewHolder extends PostBaseViewHolder { | ||||
|         ItemPostGalleryTypeBinding binding; | ||||
|         PostGalleryTypeImageRecyclerViewAdapter adapter; | ||||
|         private boolean swipeLocked; | ||||
|  | ||||
|         PostGalleryTypeViewHolder(ItemPostGalleryTypeBinding binding) { | ||||
|             super(binding.getRoot()); | ||||
|             this.binding = binding; | ||||
|             setBaseView( | ||||
|                     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.bottomConstraintLayoutItemPostGalleryType, | ||||
|                     binding.upvoteButtonItemPostGalleryType, | ||||
|                     binding.scoreTextViewItemPostGalleryType, | ||||
|                     binding.downvoteButtonItemPostGalleryType, | ||||
|                     binding.commentsCountTextViewItemPostGalleryType, | ||||
|                     binding.saveButtonItemPostGalleryType, | ||||
|                     binding.shareButtonItemPostGalleryType); | ||||
|  | ||||
|             adapter = new PostGalleryTypeImageRecyclerViewAdapter(mGlide, mActivity.typeface, | ||||
|                     mSaveMemoryCenterInsideDownsampleStrategy, mColorAccent, mPrimaryTextColor, mScale, | ||||
|                     galleryItemIndex -> { | ||||
|                         int position = getBindingAdapterPosition(); | ||||
|                         if (position < 0) { | ||||
|                             return; | ||||
|                         } | ||||
|                         if (post != null) { | ||||
|                             markPostRead(post, true); | ||||
|                             openMedia(post, galleryItemIndex); | ||||
|                         } | ||||
|                     }); | ||||
|             binding.galleryRecyclerViewItemPostGalleryType.setAdapter(adapter); | ||||
|             new PagerSnapHelper().attachToRecyclerView(binding.galleryRecyclerViewItemPostGalleryType); | ||||
|             binding.galleryRecyclerViewItemPostGalleryType.setRecycledViewPool(mGalleryRecycledViewPool); | ||||
|             binding.galleryRecyclerViewItemPostGalleryType.setLayoutManager(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) { | ||||
|                     PostGalleryTypeViewHolder.this.swipeLocked = swipeLocked; | ||||
|                 } | ||||
|             })); | ||||
|             binding.getRoot().setOnTouchListener((view, motionEvent) -> { | ||||
|                 swipeLocked = false; | ||||
|                 return false; | ||||
|             }); | ||||
|             binding.bottomConstraintLayoutItemPostGalleryType.setOnTouchListener(new View.OnTouchListener() { | ||||
|                 @Override | ||||
|                 public boolean onTouch(View view, MotionEvent motionEvent) { | ||||
|                     swipeLocked = false; | ||||
|                     return false; | ||||
|                 } | ||||
|             }); | ||||
|  | ||||
|             binding.noPreviewImageViewItemPostGalleryType.setOnClickListener(view -> { | ||||
|                 int position = getBindingAdapterPosition(); | ||||
|                 if (position < 0) { | ||||
|                     return; | ||||
|                 } | ||||
|                 if (post != null) { | ||||
|                     markPostRead(post, true); | ||||
|                     openMedia(post, 0); | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|  | ||||
|         public boolean isSwipeLocked() { | ||||
|             return swipeLocked; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     class PostTextTypeViewHolder extends PostBaseViewHolder { | ||||
|         @BindView(R.id.icon_gif_image_view_item_post_text_type) | ||||
|         AspectRatioGifImageView iconGifImageView; | ||||
|   | ||||
| @@ -31,11 +31,9 @@ import ml.docilealligator.infinityforreddit.activities.BaseActivity; | ||||
| import ml.docilealligator.infinityforreddit.activities.LinkResolverActivity; | ||||
| import ml.docilealligator.infinityforreddit.bottomsheetfragments.UrlMenuBottomSheetFragment; | ||||
| import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; | ||||
| import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; | ||||
| import ml.docilealligator.infinityforreddit.customviews.MarkwonLinearLayoutManager; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockScrollView; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockInterface; | ||||
| import ml.docilealligator.infinityforreddit.customviews.SwipeLockLinearLayoutManager; | ||||
| import ml.docilealligator.infinityforreddit.markdown.MarkdownUtils; | ||||
| import ml.docilealligator.infinityforreddit.utils.Utils; | ||||
|  | ||||
| public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecyclerViewAdapter.RuleViewHolder> { | ||||
|     private BaseActivity activity; | ||||
| @@ -140,8 +138,8 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler | ||||
|                 shortNameTextView.setTypeface(activity.typeface); | ||||
|             } | ||||
|             markwonAdapter = MarkdownUtils.createTablesAdapter(); | ||||
|             LinearLayoutManagerBugFixed linearLayoutManager = new MarkwonLinearLayoutManager(activity, | ||||
|                     new SwipeLockScrollView.SwipeLockInterface() { | ||||
|             SwipeLockLinearLayoutManager swipeLockLinearLayoutManager = new SwipeLockLinearLayoutManager(activity, | ||||
|                     new SwipeLockInterface() { | ||||
|                 @Override | ||||
|                 public void lockSwipe() { | ||||
|                     if (slidrInterface != null) { | ||||
| @@ -156,7 +154,7 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler | ||||
|                     } | ||||
|                 } | ||||
|             }); | ||||
|             descriptionMarkwonView.setLayoutManager(linearLayoutManager); | ||||
|             descriptionMarkwonView.setLayoutManager(swipeLockLinearLayoutManager); | ||||
|             descriptionMarkwonView.setAdapter(markwonAdapter); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -1,26 +0,0 @@ | ||||
| package ml.docilealligator.infinityforreddit.customviews; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.view.View; | ||||
|  | ||||
| import androidx.annotation.Nullable; | ||||
|  | ||||
| public class MarkwonLinearLayoutManager extends LinearLayoutManagerBugFixed { | ||||
|  | ||||
|     @Nullable | ||||
|     private final SwipeLockScrollView.SwipeLockInterface swipeLockInterface; | ||||
|  | ||||
|     public MarkwonLinearLayoutManager(Context context, | ||||
|                                       @Nullable SwipeLockScrollView.SwipeLockInterface swipeLockInterface) { | ||||
|         super(context); | ||||
|         this.swipeLockInterface = swipeLockInterface; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void addView(View child) { | ||||
|         super.addView(child); | ||||
|         if (child instanceof SwipeLockScrollView) { | ||||
|             ((SwipeLockScrollView) child).setSwipeLockInterface(swipeLockInterface); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,76 @@ | ||||
| package ml.docilealligator.infinityforreddit.customviews; | ||||
|  | ||||
| import android.annotation.SuppressLint; | ||||
| import android.content.Context; | ||||
| import android.util.AttributeSet; | ||||
| import android.view.MotionEvent; | ||||
| import android.widget.FrameLayout; | ||||
|  | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
|  | ||||
| public class SwipeLockFrameLayout extends FrameLayout implements SwipeLockView { | ||||
|     @Nullable | ||||
|     private SwipeLockInterface swipeLockInterface = null; | ||||
|     private boolean locked = false; | ||||
|  | ||||
|     public SwipeLockFrameLayout(@NonNull Context context) { | ||||
|         super(context); | ||||
|     } | ||||
|  | ||||
|     public SwipeLockFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs) { | ||||
|         super(context, attrs); | ||||
|     } | ||||
|  | ||||
|     public SwipeLockFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { | ||||
|         super(context, attrs, defStyleAttr); | ||||
|     } | ||||
|  | ||||
|     public SwipeLockFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { | ||||
|         super(context, attrs, defStyleAttr, defStyleRes); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setSwipeLockInterface(@Nullable SwipeLockInterface swipeLockInterface) { | ||||
|         this.swipeLockInterface = swipeLockInterface; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean onInterceptTouchEvent(MotionEvent ev) { | ||||
|         updateSwipeLock(ev); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @SuppressLint("ClickableViewAccessibility") // we are just listening to touch events | ||||
|     @Override | ||||
|     public boolean onTouchEvent(MotionEvent ev) { | ||||
|         updateSwipeLock(ev); | ||||
|         return super.onTouchEvent(ev); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Unlocks swipe if the view cannot be scrolled right anymore or if {@code ev} is | ||||
|      * {@link MotionEvent#ACTION_UP} or {@link MotionEvent#ACTION_CANCEL} | ||||
|      */ | ||||
|     private void updateSwipeLock(MotionEvent ev) { | ||||
|         if (swipeLockInterface != null) { | ||||
|             int action = ev.getAction(); | ||||
|             if (action == MotionEvent.ACTION_UP || | ||||
|                     action == MotionEvent.ACTION_CANCEL) { | ||||
|                 // calling SlidrInterface#unlock aborts the swipe | ||||
|                 // so don't call unlock if it is already unlocked | ||||
|                 if (locked) { | ||||
|                     swipeLockInterface.unlockSwipe(); | ||||
|                     locked = false; | ||||
|                 } | ||||
|             } else { | ||||
|                 if (!locked) { | ||||
|                     swipeLockInterface.lockSwipe(); | ||||
|                     locked = true; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             swipeLockInterface.setSwipeLocked(locked); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,7 @@ | ||||
| package ml.docilealligator.infinityforreddit.customviews; | ||||
|  | ||||
| public interface SwipeLockInterface { | ||||
|     void lockSwipe(); | ||||
|     void unlockSwipe(); | ||||
|     default void setSwipeLocked(boolean swipeLocked) {} | ||||
| } | ||||
| @@ -0,0 +1,31 @@ | ||||
| package ml.docilealligator.infinityforreddit.customviews; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.view.View; | ||||
|  | ||||
| import androidx.annotation.Nullable; | ||||
|  | ||||
| public class SwipeLockLinearLayoutManager extends LinearLayoutManagerBugFixed { | ||||
|  | ||||
|     @Nullable | ||||
|     private final SwipeLockInterface swipeLockInterface; | ||||
|  | ||||
|     public SwipeLockLinearLayoutManager(Context context, | ||||
|                                         @Nullable SwipeLockInterface swipeLockInterface) { | ||||
|         super(context); | ||||
|         this.swipeLockInterface = swipeLockInterface; | ||||
|     } | ||||
|  | ||||
|     public SwipeLockLinearLayoutManager(Context context, int orientation, boolean reverseLayout, @Nullable SwipeLockInterface swipeLockInterface) { | ||||
|         super(context, orientation, reverseLayout); | ||||
|         this.swipeLockInterface = swipeLockInterface; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void addView(View child) { | ||||
|         super.addView(child); | ||||
|         if (child instanceof SwipeLockView) { | ||||
|             ((SwipeLockView) child).setSwipeLockInterface(swipeLockInterface); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -12,7 +12,7 @@ import androidx.annotation.Nullable; | ||||
|  * if it can be scrolled to the right. {@link SwipeLockInterface} must be set for | ||||
|  * locking to work. | ||||
|  */ | ||||
| public class SwipeLockScrollView extends HorizontalScrollView { | ||||
| public class SwipeLockScrollView extends HorizontalScrollView implements SwipeLockView { | ||||
|     @Nullable | ||||
|     private SwipeLockInterface swipeLockInterface = null; | ||||
|     private boolean locked = false; | ||||
| @@ -29,6 +29,7 @@ public class SwipeLockScrollView extends HorizontalScrollView { | ||||
|         super(context, attrs, defStyleAttr); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setSwipeLockInterface(@Nullable SwipeLockInterface swipeLockInterface) { | ||||
|         this.swipeLockInterface = swipeLockInterface; | ||||
|     } | ||||
| @@ -54,8 +55,7 @@ public class SwipeLockScrollView extends HorizontalScrollView { | ||||
|         if (swipeLockInterface != null) { | ||||
|             int action = ev.getAction(); | ||||
|             if (action == MotionEvent.ACTION_UP || | ||||
|                     action == MotionEvent.ACTION_CANCEL || | ||||
|                     getScrollX() == 0) { | ||||
|                     action == MotionEvent.ACTION_CANCEL) { | ||||
|                 // calling SlidrInterface#unlock aborts the swipe | ||||
|                 // so don't call unlock if it is already unlocked | ||||
|                 if (locked) { | ||||
| @@ -70,9 +70,4 @@ public class SwipeLockScrollView extends HorizontalScrollView { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public interface SwipeLockInterface { | ||||
|         void lockSwipe(); | ||||
|         void unlockSwipe(); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,7 @@ | ||||
| package ml.docilealligator.infinityforreddit.customviews; | ||||
|  | ||||
| import androidx.annotation.Nullable; | ||||
|  | ||||
| public interface SwipeLockView { | ||||
|     void setSwipeLockInterface(@Nullable SwipeLockInterface swipeLockInterface); | ||||
| } | ||||
| @@ -1057,6 +1057,11 @@ public class PostFragment extends Fragment implements FragmentCommunicator { | ||||
|                 if (!(viewHolder instanceof PostRecyclerViewAdapter.PostBaseViewHolder) && | ||||
|                         !(viewHolder instanceof PostRecyclerViewAdapter.PostCompactBaseViewHolder)) { | ||||
|                     return makeMovementFlags(0, 0); | ||||
|                 } else if (viewHolder instanceof PostRecyclerViewAdapter.PostGalleryTypeViewHolder) { | ||||
|                     if (((PostRecyclerViewAdapter.PostGalleryTypeViewHolder) viewHolder).isSwipeLocked()) { | ||||
|                         return makeMovementFlags(0, 0); | ||||
|                     } | ||||
|  | ||||
|                 } | ||||
|                 int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; | ||||
|                 return makeMovementFlags(0, swipeFlags); | ||||
| @@ -1139,13 +1144,11 @@ public class PostFragment extends Fragment implements FragmentCommunicator { | ||||
|                         exceedThreshold = false; | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|  | ||||
|             } | ||||
|  | ||||
|             @Override | ||||
|             public float getSwipeThreshold(@NonNull RecyclerView.ViewHolder viewHolder) { | ||||
|                 return 100; | ||||
|                 return 1; | ||||
|             } | ||||
|         }); | ||||
|  | ||||
|   | ||||
| @@ -3,7 +3,6 @@ package ml.docilealligator.infinityforreddit.settings; | ||||
| import android.content.SharedPreferences; | ||||
| import android.os.Bundle; | ||||
|  | ||||
| import androidx.preference.Preference; | ||||
| import androidx.preference.SeekBarPreference; | ||||
|  | ||||
| import javax.inject.Inject; | ||||
| @@ -31,7 +30,7 @@ public class CommentPreferenceFragment extends CustomFontPreferenceFragmentCompa | ||||
|         if (showFewerToolbarOptionsThresholdSeekBarPreference != null) { | ||||
|             showFewerToolbarOptionsThresholdSeekBarPreference.setSummary(getString(R.string.settings_show_fewer_toolbar_options_threshold_summary, sharedPreferences.getInt(SharedPreferencesUtils.SHOW_FEWER_TOOLBAR_OPTIONS_THRESHOLD, 5))); | ||||
|  | ||||
|             showFewerToolbarOptionsThresholdSeekBarPreference.setOnPreferenceChangeListener((Preference.OnPreferenceChangeListener) (preference, newValue) -> { | ||||
|             showFewerToolbarOptionsThresholdSeekBarPreference.setOnPreferenceChangeListener((preference, newValue) -> { | ||||
|                 showFewerToolbarOptionsThresholdSeekBarPreference.setSummary( | ||||
|                         getString(R.string.settings_show_fewer_toolbar_options_threshold_summary, (Integer) newValue)); | ||||
|                 return true; | ||||
|   | ||||
							
								
								
									
										30
									
								
								app/src/main/res/layout/item_gallery_image_in_post_feed.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								app/src/main/res/layout/item_gallery_image_in_post_feed.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <ml.docilealligator.infinityforreddit.customviews.SwipeLockFrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="wrap_content"> | ||||
|  | ||||
|     <ml.docilealligator.infinityforreddit.customviews.AspectRatioGifImageView | ||||
|         android:id="@+id/image_view_item_gallery_image_in_post_feed" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:adjustViewBounds="true" /> | ||||
|  | ||||
|     <ProgressBar | ||||
|         android:id="@+id/progress_bar_item_gallery_image_in_post_feed" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_gravity="center" /> | ||||
|  | ||||
|     <TextView | ||||
|         android:id="@+id/error_text_view_item_gallery_image_in_post_feed" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:drawableTop="@drawable/ic_error_outline_black_24dp" | ||||
|         android:layout_gravity="center" | ||||
|         android:gravity="center" | ||||
|         android:text="@string/error_loading_image_tap_to_retry" | ||||
|         android:textSize="?attr/font_default" | ||||
|         android:fontFamily="?attr/font_family" | ||||
|         android:visibility="gone" /> | ||||
|  | ||||
| </ml.docilealligator.infinityforreddit.customviews.SwipeLockFrameLayout> | ||||
							
								
								
									
										302
									
								
								app/src/main/res/layout/item_post_gallery_type.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										302
									
								
								app/src/main/res/layout/item_post_gallery_type.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,302 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="wrap_content" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:layout_marginTop="8dp" | ||||
|     android:layout_marginBottom="8dp" | ||||
|     app:cardElevation="2dp" | ||||
|     app:cardCornerRadius="16dp" | ||||
|     style="?attr/materialCardViewElevatedStyle"> | ||||
|  | ||||
|     <LinearLayout | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:orientation="vertical"> | ||||
|  | ||||
|         <androidx.constraintlayout.widget.ConstraintLayout | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:padding="16dp"> | ||||
|  | ||||
|             <ml.docilealligator.infinityforreddit.customviews.AspectRatioGifImageView | ||||
|                 android:id="@+id/icon_gif_image_view_item_post_gallery_type" | ||||
|                 android:layout_width="24dp" | ||||
|                 android:layout_height="24dp" | ||||
|                 android:layout_gravity="center" | ||||
|                 app:layout_constraintBottom_toBottomOf="parent" | ||||
|                 app:layout_constraintStart_toStartOf="parent" | ||||
|                 app:layout_constraintTop_toTopOf="parent"/> | ||||
|  | ||||
|             <TextView | ||||
|                 android:id="@+id/subreddit_name_text_view_item_post_gallery_type" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:layout_gravity="center" | ||||
|                 android:layout_marginStart="16dp" | ||||
|                 android:layout_marginEnd="8dp" | ||||
|                 android:textSize="?attr/font_default" | ||||
|                 android:fontFamily="?attr/font_family" | ||||
|                 app:layout_constraintBottom_toTopOf="@id/user_text_view_item_post_gallery_type" | ||||
|                 app:layout_constraintStart_toEndOf="@id/icon_gif_image_view_item_post_gallery_type" | ||||
|                 app:layout_constraintEnd_toStartOf="@id/stickied_post_image_view_item_post_gallery_type" | ||||
|                 app:layout_constraintTop_toTopOf="parent" | ||||
|                 app:layout_constrainedWidth="true" | ||||
|                 app:layout_constraintHorizontal_bias="0"/> | ||||
|  | ||||
|             <TextView | ||||
|                 android:id="@+id/user_text_view_item_post_gallery_type" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:layout_marginStart="16dp" | ||||
|                 android:layout_marginEnd="8dp" | ||||
|                 android:textSize="?attr/font_default" | ||||
|                 android:fontFamily="?attr/font_family" | ||||
|                 app:layout_constraintBottom_toBottomOf="parent" | ||||
|                 app:layout_constraintStart_toEndOf="@+id/icon_gif_image_view_item_post_gallery_type" | ||||
|                 app:layout_constraintEnd_toStartOf="@id/stickied_post_image_view_item_post_gallery_type" | ||||
|                 app:layout_constraintTop_toBottomOf="@+id/subreddit_name_text_view_item_post_gallery_type" | ||||
|                 app:layout_constraintHorizontal_bias="0" | ||||
|                 app:layout_constrainedWidth="true" /> | ||||
|  | ||||
|             <ImageView | ||||
|                 android:id="@+id/stickied_post_image_view_item_post_gallery_type" | ||||
|                 android:layout_width="24dp" | ||||
|                 android:layout_height="24dp" | ||||
|                 android:layout_marginEnd="8dp" | ||||
|                 android:visibility="gone" | ||||
|                 app:layout_constraintBottom_toBottomOf="parent" | ||||
|                 app:layout_constraintEnd_toStartOf="@+id/guideline2" | ||||
|                 app:layout_constraintTop_toTopOf="parent" | ||||
|                 tools:visibility="visible" /> | ||||
|  | ||||
|             <TextView | ||||
|                 android:id="@+id/post_time_text_view_item_post_gallery_type" | ||||
|                 android:layout_width="0dp" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:gravity="end" | ||||
|                 android:textSize="?attr/font_default" | ||||
|                 android:fontFamily="?attr/font_family" | ||||
|                 app:layout_constraintBottom_toBottomOf="parent" | ||||
|                 app:layout_constraintEnd_toEndOf="parent" | ||||
|                 app:layout_constraintStart_toEndOf="@id/guideline2" | ||||
|                 app:layout_constraintTop_toTopOf="parent" /> | ||||
|  | ||||
|             <androidx.constraintlayout.widget.Guideline | ||||
|                 android:id="@+id/guideline2" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:orientation="vertical" | ||||
|                 app:layout_constraintGuide_percent="0.6" /> | ||||
|  | ||||
|         </androidx.constraintlayout.widget.ConstraintLayout> | ||||
|  | ||||
|         <TextView | ||||
|             android:id="@+id/title_text_view_item_post_gallery_type" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:paddingStart="16dp" | ||||
|             android:paddingEnd="16dp" | ||||
|             android:textSize="?attr/title_font_18" | ||||
|             android:fontFamily="?attr/title_font_family" /> | ||||
|  | ||||
|         <com.nex3z.flowlayout.FlowLayout | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:padding="16dp" | ||||
|             app:flChildSpacing="16dp" | ||||
|             app:flChildSpacingForLastRow="align" | ||||
|             app:flRowSpacing="8dp"> | ||||
|  | ||||
|             <com.libRG.CustomTextView | ||||
|                 android:id="@+id/type_text_view_item_post_gallery_type" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:padding="4dp" | ||||
|                 android:text="@string/gallery" | ||||
|                 android:textSize="?attr/font_12" | ||||
|                 android:fontFamily="?attr/font_family" | ||||
|                 app:lib_setRadius="6dp" | ||||
|                 app:lib_setRoundedView="true" | ||||
|                 app:lib_setShape="rectangle" /> | ||||
|  | ||||
|             <com.libRG.CustomTextView | ||||
|                 android:id="@+id/spoiler_text_view_item_post_gallery_type" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:layout_gravity="center" | ||||
|                 android:text="@string/spoiler" | ||||
|                 android:textSize="?attr/font_12" | ||||
|                 android:fontFamily="?attr/font_family" | ||||
|                 android:padding="4dp" | ||||
|                 android:visibility="gone" | ||||
|                 app:lib_setRadius="6dp" | ||||
|                 app:lib_setRoundedView="true" | ||||
|                 app:lib_setShape="rectangle" /> | ||||
|  | ||||
|             <com.libRG.CustomTextView | ||||
|                 android:id="@+id/nsfw_text_view_item_post_gallery_type" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:padding="4dp" | ||||
|                 android:text="@string/nsfw" | ||||
|                 android:textSize="?attr/font_12" | ||||
|                 android:fontFamily="?attr/font_family" | ||||
|                 android:visibility="gone" | ||||
|                 app:lib_setRadius="6dp" | ||||
|                 app:lib_setRoundedView="true" | ||||
|                 app:lib_setShape="rectangle" /> | ||||
|  | ||||
|             <com.libRG.CustomTextView | ||||
|                 android:id="@+id/flair_text_view_item_post_gallery_type" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:layout_gravity="center" | ||||
|                 android:textSize="?attr/font_12" | ||||
|                 android:fontFamily="?attr/font_family" | ||||
|                 android:padding="4dp" | ||||
|                 android:visibility="gone" | ||||
|                 app:lib_setRadius="6dp" | ||||
|                 app:lib_setRoundedView="true" | ||||
|                 app:lib_setShape="rectangle" /> | ||||
|  | ||||
|             <com.libRG.CustomTextView | ||||
|                 android:id="@+id/awards_text_view_item_post_gallery_type" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:padding="4dp" | ||||
|                 android:textSize="?attr/font_12" | ||||
|                 android:fontFamily="?attr/font_family" | ||||
|                 android:visibility="gone" | ||||
|                 app:lib_setRadius="6dp" | ||||
|                 app:lib_setRoundedView="true" | ||||
|                 app:lib_setShape="rectangle" /> | ||||
|  | ||||
|             <ImageView | ||||
|                 android:id="@+id/archived_image_view_item_post_gallery_type" | ||||
|                 android:layout_width="24dp" | ||||
|                 android:layout_height="24dp" | ||||
|                 android:src="@drawable/ic_archive_outline" | ||||
|                 android:visibility="gone" /> | ||||
|  | ||||
|             <ImageView | ||||
|                 android:id="@+id/locked_image_view_item_post_gallery_type" | ||||
|                 android:layout_width="24dp" | ||||
|                 android:layout_height="24dp" | ||||
|                 android:src="@drawable/ic_outline_lock_24dp" | ||||
|                 android:visibility="gone" /> | ||||
|  | ||||
|             <ImageView | ||||
|                 android:id="@+id/crosspost_image_view_item_post_gallery_type" | ||||
|                 android:layout_width="24dp" | ||||
|                 android:layout_height="24dp" | ||||
|                 android:src="@drawable/crosspost" | ||||
|                 android:visibility="gone" /> | ||||
|  | ||||
|         </com.nex3z.flowlayout.FlowLayout> | ||||
|  | ||||
|         <androidx.recyclerview.widget.RecyclerView | ||||
|             android:id="@+id/gallery_recycler_view_item_post_gallery_type" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:orientation="horizontal" /> | ||||
|  | ||||
|         <ImageView | ||||
|             android:id="@+id/no_preview_image_view_item_post_gallery_type" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="150dp" | ||||
|             android:src="@drawable/ic_gallery_24dp" | ||||
|             android:scaleType="center" | ||||
|             android:visibility="gone" /> | ||||
|  | ||||
|         <androidx.constraintlayout.widget.ConstraintLayout | ||||
|             android:id="@+id/bottom_constraint_layout_item_post_gallery_type" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content"> | ||||
|  | ||||
|             <ImageView | ||||
|                 android:id="@+id/upvote_button_item_post_gallery_type" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:padding="12dp" | ||||
|                 android:src="@drawable/ic_arrow_upward_grey_24dp" | ||||
|                 android:background="?actionBarItemBackground" | ||||
|                 android:clickable="true" | ||||
|                 android:focusable="true" | ||||
|                 app:layout_constraintTop_toTopOf="parent" | ||||
|                 app:layout_constraintBottom_toBottomOf="parent" | ||||
|                 app:layout_constraintStart_toStartOf="parent" /> | ||||
|  | ||||
|             <TextView | ||||
|                 android:id="@+id/score_text_view_item_post_gallery_type" | ||||
|                 android:layout_width="64dp" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:gravity="center" | ||||
|                 android:textSize="?attr/font_12" | ||||
|                 android:textStyle="bold" | ||||
|                 android:fontFamily="?attr/font_family" | ||||
|                 app:layout_constraintTop_toTopOf="parent" | ||||
|                 app:layout_constraintBottom_toBottomOf="parent" | ||||
|                 app:layout_constraintStart_toEndOf="@id/upvote_button_item_post_gallery_type" /> | ||||
|  | ||||
|             <ImageView | ||||
|                 android:id="@+id/downvote_button_item_post_gallery_type" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:padding="12dp" | ||||
|                 android:src="@drawable/ic_arrow_downward_grey_24dp" | ||||
|                 android:background="?actionBarItemBackground" | ||||
|                 android:clickable="true" | ||||
|                 android:focusable="true" | ||||
|                 app:layout_constraintTop_toTopOf="parent" | ||||
|                 app:layout_constraintBottom_toBottomOf="parent" | ||||
|                 app:layout_constraintStart_toEndOf="@id/score_text_view_item_post_gallery_type" /> | ||||
|  | ||||
|             <TextView | ||||
|                 android:id="@+id/comments_count_text_view_item_post_gallery_type" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:padding="12dp" | ||||
|                 android:gravity="center_vertical" | ||||
|                 android:textSize="?attr/font_12" | ||||
|                 android:textStyle="bold" | ||||
|                 android:fontFamily="?attr/font_family" | ||||
|                 android:drawableStart="@drawable/ic_comment_grey_24dp" | ||||
|                 android:drawablePadding="12dp" | ||||
|                 app:layout_constraintTop_toTopOf="parent" | ||||
|                 app:layout_constraintBottom_toBottomOf="parent" | ||||
|                 app:layout_constraintStart_toEndOf="@id/downvote_button_item_post_gallery_type" /> | ||||
|  | ||||
|             <ImageView | ||||
|                 android:id="@+id/save_button_item_post_gallery_type" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:padding="12dp" | ||||
|                 android:background="?actionBarItemBackground" | ||||
|                 android:clickable="true" | ||||
|                 android:focusable="true" | ||||
|                 app:layout_constraintHorizontal_bias="1" | ||||
|                 app:layout_constraintTop_toTopOf="parent" | ||||
|                 app:layout_constraintBottom_toBottomOf="parent" | ||||
|                 app:layout_constraintStart_toEndOf="@id/comments_count_text_view_item_post_gallery_type" | ||||
|                 app:layout_constraintEnd_toStartOf="@id/share_button_item_post_gallery_type" /> | ||||
|  | ||||
|             <ImageView | ||||
|                 android:id="@+id/share_button_item_post_gallery_type" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:padding="12dp" | ||||
|                 android:src="@drawable/ic_share_grey_24dp" | ||||
|                 android:background="?actionBarItemBackground" | ||||
|                 android:clickable="true" | ||||
|                 android:focusable="true" | ||||
|                 app:layout_constraintTop_toTopOf="parent" | ||||
|                 app:layout_constraintBottom_toBottomOf="parent" | ||||
|                 app:layout_constraintEnd_toEndOf="parent" /> | ||||
|  | ||||
|         </androidx.constraintlayout.widget.ConstraintLayout> | ||||
|  | ||||
|     </LinearLayout> | ||||
|  | ||||
| </com.google.android.material.card.MaterialCardView> | ||||
		Reference in New Issue
	
	Block a user