diff options
author | Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com> | 2024-05-23 03:49:40 +0000 |
---|---|---|
committer | Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com> | 2024-05-23 03:49:40 +0000 |
commit | 5d050204e7f533958215004c0cdf24ec664c8437 (patch) | |
tree | 80239568781b0428b128031fedb5a9815b9961ee | |
parent | f6474881a0983d954e0b246f7f03cb92d9f69654 (diff) | |
download | infinity-for-reddit-5d050204e7f533958215004c0cdf24ec664c8437.tar infinity-for-reddit-5d050204e7f533958215004c0cdf24ec664c8437.tar.gz infinity-for-reddit-5d050204e7f533958215004c0cdf24ec664c8437.tar.bz2 infinity-for-reddit-5d050204e7f533958215004c0cdf24ec664c8437.tar.lz infinity-for-reddit-5d050204e7f533958215004c0cdf24ec664c8437.tar.xz infinity-for-reddit-5d050204e7f533958215004c0cdf24ec664c8437.tar.zst infinity-for-reddit-5d050204e7f533958215004c0cdf24ec664c8437.zip |
Fix https://github.com/Docile-Alligator/Infinity-For-Reddit/issues/1625
13 files changed, 66 insertions, 92 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java index af4ec114..fab5e216 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java @@ -240,7 +240,7 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA Markwon postBodyMarkwon = MarkdownUtils.createFullRedditMarkwon(this, miscPlugin, emoteCloseBracketInlineProcessor, emotePlugin, imageAndGifPlugin, parentTextColor, parentSpoilerBackgroundColor, null); - CustomMarkwonAdapter markwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(imageAndGifEntry); + CustomMarkwonAdapter markwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(this, imageAndGifEntry); markwonAdapter.setOnLongClickListener(view -> { Utils.hideKeyboard(CommentActivity.this); CopyTextBottomSheetFragment.show(getSupportFragmentManager(), diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/FullMarkdownActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/FullMarkdownActivity.java index 5fea5dae..2b744929 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/FullMarkdownActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/FullMarkdownActivity.java @@ -125,7 +125,7 @@ public class FullMarkdownActivity extends BaseActivity { Markwon markwon = MarkdownUtils.createContentPreviewRedditMarkwon(this, miscPlugin, markdownColor, markdownColor | 0xFF000000); - CustomMarkwonAdapter markwonAdapter = MarkdownUtils.createCustomTablesAdapter(); + CustomMarkwonAdapter markwonAdapter = MarkdownUtils.createCustomTablesAdapter(this); LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(this, new SwipeLockInterface() { @Override public void lockSwipe() { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java index 3b14e50a..fede7776 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java @@ -189,7 +189,7 @@ public class WikiActivity extends BaseActivity { markwon = MarkdownUtils.createFullRedditMarkwon(this, miscPlugin, emoteCloseBracketInlineProcessor, emotePlugin, imageAndGifPlugin, markdownColor, spoilerBackgroundColor, onLinkLongClickListener); - markwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(imageAndGifEntry); + markwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(this, imageAndGifEntry); LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(this, new SwipeLockInterface() { @Override public void lockSwipe() { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsListingRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsListingRecyclerViewAdapter.java index 567af63e..296bb8a3 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsListingRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsListingRecyclerViewAdapter.java @@ -560,7 +560,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment } }); commentMarkdownView.setLayoutManager(linearLayoutManager); - markwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(mImageAndGifEntry); + markwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(mActivity, mImageAndGifEntry); markwonAdapter.setOnClickListener(view -> { if (view instanceof SpoilerOnClickTextView) { if (((SpoilerOnClickTextView) view).isSpoilerOnClick()) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java index 8cb5bc4f..dd6b9c91 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java @@ -1361,7 +1361,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi } }); commentMarkdownView.setLayoutManager(linearLayoutManager); - mMarkwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(mImageAndGifEntry); + mMarkwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(mActivity, mImageAndGifEntry); commentMarkdownView.setAdapter(mMarkwonAdapter); itemView.setBackgroundColor(mCommentBackgroundColor); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java index 0ee06061..c51cfab8 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java @@ -421,7 +421,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler activity.startActivity(intent); } }); - mMarkwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(mImageAndGifEntry); + mMarkwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(mActivity, mImageAndGifEntry); } public void setCanStartActivity(boolean canStartActivity) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RulesRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RulesRecyclerViewAdapter.java index 02600b27..6170d7dd 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RulesRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RulesRecyclerViewAdapter.java @@ -172,7 +172,7 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler if (activity.typeface != null) { binding.shortNameTextViewItemRule.setTypeface(activity.typeface); } - markwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(imageAndGifEntry); + markwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(activity, imageAndGifEntry); SwipeLockLinearLayoutManager swipeLockLinearLayoutManager = new SwipeLockLinearLayoutManager(activity, new SwipeLockInterface() { @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/SwipeLockScrollView.java b/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/SwipeLockScrollView.java deleted file mode 100644 index 557a26f0..00000000 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/SwipeLockScrollView.java +++ /dev/null @@ -1,73 +0,0 @@ -package ml.docilealligator.infinityforreddit.customviews; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.widget.HorizontalScrollView; - -import androidx.annotation.Nullable; - -/** {@link HorizontalScrollView} that listens for touch events and locks swipes - * if it can be scrolled to the right. {@link SwipeLockInterface} must be set for - * locking to work. - */ -public class SwipeLockScrollView extends HorizontalScrollView implements SwipeLockView { - @Nullable - private SwipeLockInterface swipeLockInterface = null; - private boolean locked = false; - - public SwipeLockScrollView(Context context) { - super(context); - } - - public SwipeLockScrollView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public SwipeLockScrollView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - public void setSwipeLockInterface(@Nullable SwipeLockInterface swipeLockInterface) { - this.swipeLockInterface = swipeLockInterface; - } - - @Override - public boolean onInterceptTouchEvent(MotionEvent ev) { - updateSwipeLock(ev); - return super.onInterceptTouchEvent(ev); - } - - @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; - } - } - } - } -} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/slidr/widget/SliderPanel.java b/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/slidr/widget/SliderPanel.java index 831e896d..e4cb842b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/slidr/widget/SliderPanel.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/slidr/widget/SliderPanel.java @@ -123,6 +123,10 @@ public class SliderPanel extends FrameLayout { return defaultSlidrInterface; } + public boolean isLocked() { + return isLocked; + } + private final SlidrInterface defaultSlidrInterface = new SlidrInterface() { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SidebarFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SidebarFragment.java index 5c0f6808..11b9dae3 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SidebarFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SidebarFragment.java @@ -177,7 +177,7 @@ public class SidebarFragment extends Fragment { Markwon markwon = MarkdownUtils.createFullRedditMarkwon(activity, miscPlugin, emoteCloseBracketInlineProcessor, emotePlugin, imageAndGifPlugin, markdownColor, spoilerBackgroundColor, onLinkLongClickListener); - CustomMarkwonAdapter markwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(imageAndGifEntry); + CustomMarkwonAdapter markwonAdapter = MarkdownUtils.createCustomTablesAndImagesAdapter(activity, imageAndGifEntry); markwonAdapter.setOnLongClickListener(view -> { if (sidebarDescription != null && !sidebarDescription.equals("")) { Bundle bundle = new Bundle(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/CustomMarkwonAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/CustomMarkwonAdapter.java index e83d5597..dbe4b23f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/CustomMarkwonAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/CustomMarkwonAdapter.java @@ -2,6 +2,7 @@ package ml.docilealligator.infinityforreddit.markdown; import android.util.SparseArray; import android.view.LayoutInflater; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.HorizontalScrollView; @@ -24,9 +25,11 @@ import io.noties.markwon.MarkwonReducer; import io.noties.markwon.recycler.MarkwonAdapter; import io.noties.markwon.recycler.SimpleEntry; import ml.docilealligator.infinityforreddit.R; +import ml.docilealligator.infinityforreddit.activities.BaseActivity; import ml.docilealligator.infinityforreddit.customviews.SpoilerOnClickTextView; public class CustomMarkwonAdapter extends MarkwonAdapter { + private BaseActivity activity; private final SparseArray<Entry<Node, Holder>> entries; private final Entry<Node, Holder> defaultEntry; private final MarkwonReducer reducer; @@ -43,9 +46,11 @@ public class CustomMarkwonAdapter extends MarkwonAdapter { @SuppressWarnings("WeakerAccess") CustomMarkwonAdapter( + @NonNull BaseActivity activity, @NonNull SparseArray<Entry<Node, Holder>> entries, @NonNull Entry<Node, Holder> defaultEntry, @NonNull MarkwonReducer reducer) { + this.activity = activity; this.entries = entries; this.defaultEntry = defaultEntry; this.reducer = reducer; @@ -63,16 +68,17 @@ public class CustomMarkwonAdapter extends MarkwonAdapter { @NonNull public static CustomBuilderImpl builder( + @NonNull BaseActivity activity, @LayoutRes int defaultEntryLayoutResId, @IdRes int defaultEntryTextViewResId ) { - return builder(SimpleEntry.create(defaultEntryLayoutResId, defaultEntryTextViewResId)); + return builder(activity, SimpleEntry.create(defaultEntryLayoutResId, defaultEntryTextViewResId)); } @NonNull - public static CustomBuilderImpl builder(@NonNull Entry<? extends Node, ? extends Holder> defaultEntry) { + public static CustomBuilderImpl builder(@NonNull BaseActivity activity, @NonNull Entry<? extends Node, ? extends Holder> defaultEntry) { //noinspection unchecked - return new CustomBuilderImpl((Entry<Node, Holder>) defaultEntry); + return new CustomBuilderImpl(activity, (Entry<Node, Holder>) defaultEntry); } @Override @@ -136,6 +142,39 @@ public class CustomMarkwonAdapter extends MarkwonAdapter { return false; }); } else if (holder.itemView instanceof HorizontalScrollView) { + holder.itemView.setOnTouchListener(new View.OnTouchListener() { + boolean isSliderPanelLockedAlready; + boolean isViewPager2UserInputEnabledAlready; + @Override + public boolean onTouch(View v, MotionEvent motionEvent) { + if (motionEvent.getActionMasked() == MotionEvent.ACTION_UP) { + if (activity.mSliderPanel != null) { + activity.mSliderPanel.requestDisallowInterceptTouchEvent(false); + } + + if (activity.mViewPager2 != null && isViewPager2UserInputEnabledAlready) { + activity.mViewPager2.setUserInputEnabled(true); + } + + if (!isSliderPanelLockedAlready) { + activity.unlockSwipeRightToGoBack(); + } + } else { + if (activity.mSliderPanel != null) { + isSliderPanelLockedAlready = activity.mSliderPanel.isLocked(); + activity.mSliderPanel.requestDisallowInterceptTouchEvent(true); + } + if (activity.mViewPager2 != null) { + isViewPager2UserInputEnabledAlready = activity.mViewPager2.isUserInputEnabled(); + activity.mViewPager2.setUserInputEnabled(false); + } + activity.lockSwipeRightToGoBack(); + } + + return false; + } + }); + TableLayout tableLayout = holder.itemView.findViewById(R.id.table_layout); if (tableLayout != null) { for (int i = 0; i < tableLayout.getChildCount(); i++) { @@ -246,13 +285,16 @@ public class CustomMarkwonAdapter extends MarkwonAdapter { public static class CustomBuilderImpl implements Builder { + private final BaseActivity activity; + private final SparseArray<Entry<Node, Holder>> entries = new SparseArray<>(3); private final Entry<Node, Holder> defaultEntry; private MarkwonReducer reducer; - CustomBuilderImpl(@NonNull Entry<Node, Holder> defaultEntry) { + CustomBuilderImpl(@NonNull BaseActivity activity, @NonNull Entry<Node, Holder> defaultEntry) { + this.activity = activity; this.defaultEntry = defaultEntry; } @@ -281,7 +323,7 @@ public class CustomMarkwonAdapter extends MarkwonAdapter { reducer = MarkwonReducer.directChildren(); } - return new CustomMarkwonAdapter(entries, defaultEntry, reducer); + return new CustomMarkwonAdapter(activity, entries, defaultEntry, reducer); } } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/MarkdownUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/MarkdownUtils.java index 4c3fd287..1421a00f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/MarkdownUtils.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/MarkdownUtils.java @@ -20,6 +20,7 @@ import io.noties.markwon.movement.MovementMethodPlugin; import io.noties.markwon.recycler.table.TableEntry; import io.noties.markwon.recycler.table.TableEntryPlugin; import ml.docilealligator.infinityforreddit.R; +import ml.docilealligator.infinityforreddit.activities.BaseActivity; public class MarkdownUtils { /** @@ -138,8 +139,8 @@ public class MarkdownUtils { * Creates a CustomMarkwonAdapter configured with support for tables and images. */ @NonNull - public static CustomMarkwonAdapter createCustomTablesAndImagesAdapter(ImageAndGifEntry imageAndGifEntry) { - return CustomMarkwonAdapter.builder(R.layout.adapter_default_entry, R.id.text) + public static CustomMarkwonAdapter createCustomTablesAndImagesAdapter(@NonNull BaseActivity activity, ImageAndGifEntry imageAndGifEntry) { + return CustomMarkwonAdapter.builder(activity, R.layout.adapter_default_entry, R.id.text) .include(TableBlock.class, TableEntry.create(builder -> builder .tableLayout(R.layout.adapter_table_block, R.id.table_layout) .textLayoutIsRoot(R.layout.view_table_entry_cell))) @@ -148,8 +149,8 @@ public class MarkdownUtils { } @NonNull - public static CustomMarkwonAdapter createCustomTablesAdapter() { - return CustomMarkwonAdapter.builder(R.layout.adapter_default_entry, R.id.text) + public static CustomMarkwonAdapter createCustomTablesAdapter(@NonNull BaseActivity activity) { + return CustomMarkwonAdapter.builder(activity, R.layout.adapter_default_entry, R.id.text) .include(TableBlock.class, TableEntry.create(builder -> builder .tableLayout(R.layout.adapter_table_block, R.id.table_layout) .textLayoutIsRoot(R.layout.view_table_entry_cell))) diff --git a/app/src/main/res/layout/adapter_table_block.xml b/app/src/main/res/layout/adapter_table_block.xml index a4adce5f..e924f89e 100644 --- a/app/src/main/res/layout/adapter_table_block.xml +++ b/app/src/main/res/layout/adapter_table_block.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<ml.docilealligator.infinityforreddit.customviews.SwipeLockScrollView +<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -13,4 +13,4 @@ android:layout_height="wrap_content" android:stretchColumns="*" /> -</ml.docilealligator.infinityforreddit.customviews.SwipeLockScrollView> +</HorizontalScrollView> |