aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Kozelko <KozelkoS@yandex.ru>2022-09-09 05:34:00 +0000
committerGitHub <noreply@github.com>2022-09-09 05:34:00 +0000
commite0cf4ec485414ab91ed4c751743730a14ebb0ddc (patch)
treee1f8d322cba29253dd097c535170be32fad091f0
parent401dba6d83052cf0c9c60a74e8460e356f39bcb2 (diff)
downloadinfinity-for-reddit-e0cf4ec485414ab91ed4c751743730a14ebb0ddc.tar
infinity-for-reddit-e0cf4ec485414ab91ed4c751743730a14ebb0ddc.tar.gz
infinity-for-reddit-e0cf4ec485414ab91ed4c751743730a14ebb0ddc.tar.bz2
infinity-for-reddit-e0cf4ec485414ab91ed4c751743730a14ebb0ddc.tar.lz
infinity-for-reddit-e0cf4ec485414ab91ed4c751743730a14ebb0ddc.tar.xz
infinity-for-reddit-e0cf4ec485414ab91ed4c751743730a14ebb0ddc.tar.zst
infinity-for-reddit-e0cf4ec485414ab91ed4c751743730a14ebb0ddc.zip
Fix markdown in rules screen (#1050)
* Display tables in rules screen * Parse spoiler and headings in rules screen
Diffstat (limited to '')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/activities/RulesActivity.java6
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RulesRecyclerViewAdapter.java65
-rw-r--r--app/src/main/res/layout/item_rule.xml10
3 files changed, 63 insertions, 18 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/RulesActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/RulesActivity.java
index f7ab30ad..21bf5f85 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/RulesActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/RulesActivity.java
@@ -20,6 +20,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.r0adkll.slidr.Slidr;
+import com.r0adkll.slidr.model.SlidrInterface;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -87,8 +88,9 @@ public class RulesActivity extends BaseActivity {
applyCustomTheme();
+ SlidrInterface slidrInterface = null;
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.SWIPE_RIGHT_TO_GO_BACK, true)) {
- Slidr.attach(this);
+ slidrInterface = Slidr.attach(this);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@@ -119,7 +121,7 @@ public class RulesActivity extends BaseActivity {
mSubredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME);
- mAdapter = new RulesRecyclerViewAdapter(this, mCustomThemeWrapper);
+ mAdapter = new RulesRecyclerViewAdapter(this, mCustomThemeWrapper, slidrInterface);
recyclerView.setAdapter(mAdapter);
FetchRules.fetchRules(mExecutor, new Handler(), mRetrofit, mSubredditName, new FetchRules.FetchRulesListener() {
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 abbfc00c..33c3dd81 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RulesRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RulesRecyclerViewAdapter.java
@@ -11,8 +11,13 @@ import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
+import com.r0adkll.slidr.model.SlidrInterface;
+
+import org.commonmark.ext.gfm.tables.TableBlock;
+
import java.util.ArrayList;
import butterknife.BindView;
@@ -30,6 +35,9 @@ import io.noties.markwon.inlineparser.HtmlInlineProcessor;
import io.noties.markwon.inlineparser.MarkwonInlineParserPlugin;
import io.noties.markwon.linkify.LinkifyPlugin;
import io.noties.markwon.movement.MovementMethodPlugin;
+import io.noties.markwon.recycler.MarkwonAdapter;
+import io.noties.markwon.recycler.table.TableEntry;
+import io.noties.markwon.recycler.table.TableEntryPlugin;
import me.saket.bettermovementmethod.BetterLinkMovementMethod;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.Rule;
@@ -37,18 +45,28 @@ 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.markdown.RedditHeadingPlugin;
+import ml.docilealligator.infinityforreddit.markdown.SpoilerParserPlugin;
import ml.docilealligator.infinityforreddit.markdown.SuperscriptInlineProcessor;
import ml.docilealligator.infinityforreddit.utils.Utils;
public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecyclerViewAdapter.RuleViewHolder> {
private BaseActivity activity;
private Markwon markwon;
+ @Nullable
+ private final SlidrInterface slidrInterface;
private ArrayList<Rule> rules;
private int mPrimaryTextColor;
- private int mSecondaryTextColor;
- public RulesRecyclerViewAdapter(BaseActivity activity, CustomThemeWrapper customThemeWrapper) {
+ public RulesRecyclerViewAdapter(@NonNull BaseActivity activity,
+ @NonNull CustomThemeWrapper customThemeWrapper,
+ @Nullable SlidrInterface slidrInterface) {
this.activity = activity;
+ this.slidrInterface = slidrInterface;
+ mPrimaryTextColor = customThemeWrapper.getPrimaryTextColor();
+ int spoilerBackgroundColor = mPrimaryTextColor | 0xFF000000;
markwon = Markwon.builder(activity)
.usePlugin(MarkwonInlineParserPlugin.create(plugin -> {
plugin.excludeInlineProcessor(AutolinkInlineProcessor.class);
@@ -101,10 +119,11 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler
return true;
})))
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
+ .usePlugin(SpoilerParserPlugin.create(mPrimaryTextColor, spoilerBackgroundColor))
+ .usePlugin(RedditHeadingPlugin.create())
.usePlugin(StrikethroughPlugin.create())
+ .usePlugin(TableEntryPlugin.create(activity))
.build();
- mPrimaryTextColor = customThemeWrapper.getPrimaryTextColor();
- mSecondaryTextColor = customThemeWrapper.getSecondaryTextColor();
}
@NonNull
@@ -115,11 +134,14 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler
@Override
public void onBindViewHolder(@NonNull RuleViewHolder holder, int position) {
- holder.shortNameTextView.setText(rules.get(holder.getBindingAdapterPosition()).getShortName());
- if (rules.get(holder.getBindingAdapterPosition()).getDescriptionHtml() == null) {
+ Rule rule = rules.get(holder.getBindingAdapterPosition());
+ holder.shortNameTextView.setText(rule.getShortName());
+ if (rule.getDescriptionHtml() == null) {
holder.descriptionMarkwonView.setVisibility(View.GONE);
} else {
- markwon.setMarkdown(holder.descriptionMarkwonView, rules.get(holder.getBindingAdapterPosition()).getDescriptionHtml());
+ holder.markwonAdapter.setMarkdown(markwon, rule.getDescriptionHtml());
+ //noinspection NotifyDatasetChanged
+ holder.markwonAdapter.notifyDataSetChanged();
}
}
@@ -143,18 +165,41 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler
@BindView(R.id.short_name_text_view_item_rule)
TextView shortNameTextView;
@BindView(R.id.description_markwon_view_item_rule)
- TextView descriptionMarkwonView;
+ RecyclerView descriptionMarkwonView;
+ @NonNull
+ final MarkwonAdapter markwonAdapter;
RuleViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
shortNameTextView.setTextColor(mPrimaryTextColor);
- descriptionMarkwonView.setTextColor(mSecondaryTextColor);
if (activity.typeface != null) {
shortNameTextView.setTypeface(activity.typeface);
- descriptionMarkwonView.setTypeface(activity.typeface);
}
+ markwonAdapter = MarkwonAdapter.builder(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)))
+ .build();
+ LinearLayoutManagerBugFixed linearLayoutManager = new MarkwonLinearLayoutManager(activity,
+ new MarkwonLinearLayoutManager.HorizontalScrollViewScrolledListener() {
+ @Override
+ public void onScrolledLeft() {
+ if (slidrInterface != null) {
+ slidrInterface.lock();
+ }
+ }
+
+ @Override
+ public void onScrolledRight() {
+ if (slidrInterface != null) {
+ slidrInterface.unlock();
+ }
+ }
+ });
+ descriptionMarkwonView.setLayoutManager(linearLayoutManager);
+ descriptionMarkwonView.setAdapter(markwonAdapter);
}
}
}
diff --git a/app/src/main/res/layout/item_rule.xml b/app/src/main/res/layout/item_rule.xml
index 1003f6c5..e420f45d 100644
--- a/app/src/main/res/layout/item_rule.xml
+++ b/app/src/main/res/layout/item_rule.xml
@@ -11,14 +11,12 @@
android:textSize="?attr/title_font_16"
android:fontFamily="?attr/font_family" />
- <TextView
+ <androidx.recyclerview.widget.RecyclerView
android:id="@+id/description_markwon_view_item_rule"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingBottom="16dp"
- android:paddingStart="16dp"
- android:paddingEnd="16dp"
- android:textSize="?attr/content_font_default"
- android:fontFamily="?attr/font_family" />
+ android:paddingBottom="8dp"
+ android:paddingStart="8dp"
+ android:paddingEnd="8dp"/>
</LinearLayout> \ No newline at end of file