From 949962ee0b3f6c39c809286ad0d42102bca8afe0 Mon Sep 17 00:00:00 2001 From: Dimitry Ivanov Date: Wed, 26 Aug 2020 12:31:12 +0300 Subject: [PATCH] sample, add justify sample --- app-sample/samples.json | 22 +++++-- .../app/samples/JustifyModeSample.java | 65 +++++++++++++++++++ 2 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 app-sample/src/main/java/io/noties/markwon/app/samples/JustifyModeSample.java diff --git a/app-sample/samples.json b/app-sample/samples.json index 8b3dda40..1f2a8995 100644 --- a/app-sample/samples.json +++ b/app-sample/samples.json @@ -1,4 +1,16 @@ [ + { + "javaClassName": "io.noties.markwon.app.samples.JustifyModeSample", + "id": "20200826084338", + "title": "Justify text", + "description": "Justify text with `justificationMode` argument on Oreo (\u003e\u003d 26)", + "artifacts": [ + "CORE" + ], + "tags": [ + "rendering" + ] + }, { "javaClassName": "io.noties.markwon.app.samples.image.GlideGifImageSample", "id": "20200820071942", @@ -858,13 +870,12 @@ ] }, { - "javaClassName": "io.noties.markwon.app.samples.GithubUserIssueInlineParsingSample", + "javaClassName": "io.noties.markwon.app.samples.GithubUserIssueOnTextAddedSample", "id": "20200629162024", "title": "User mention and issue (via text)", "description": "Github-like user mention and issue rendering via `CorePlugin.OnTextAddedListener`", "artifacts": [ - "CORE", - "INLINE_PARSER" + "CORE" ], "tags": [ "parsing", @@ -873,12 +884,13 @@ ] }, { - "javaClassName": "io.noties.markwon.app.samples.GithubUserIssueOnTextAddedSample", + "javaClassName": "io.noties.markwon.app.samples.GithubUserIssueInlineParsingSample", "id": "20200629162024", "title": "User mention and issue (via text)", "description": "Github-like user mention and issue rendering via `CorePlugin.OnTextAddedListener`", "artifacts": [ - "CORE" + "CORE", + "INLINE_PARSER" ], "tags": [ "parsing", diff --git a/app-sample/src/main/java/io/noties/markwon/app/samples/JustifyModeSample.java b/app-sample/src/main/java/io/noties/markwon/app/samples/JustifyModeSample.java new file mode 100644 index 00000000..22e31add --- /dev/null +++ b/app-sample/src/main/java/io/noties/markwon/app/samples/JustifyModeSample.java @@ -0,0 +1,65 @@ +package io.noties.markwon.app.samples; + +import android.os.Build; +import android.text.Layout; +import android.text.Spanned; +import android.widget.TextView; + +import io.noties.markwon.Markwon; +import io.noties.markwon.app.sample.Tags; +import io.noties.markwon.app.sample.ui.MarkwonTextViewSample; +import io.noties.markwon.image.AsyncDrawableScheduler; +import io.noties.markwon.image.ImagesPlugin; +import io.noties.markwon.sample.annotations.MarkwonArtifact; +import io.noties.markwon.sample.annotations.MarkwonSampleInfo; + +@MarkwonSampleInfo( + id = "20200826084338", + title = "Justify text", + description = "Justify text with `justificationMode` argument on Oreo (>= 26)", + artifacts = MarkwonArtifact.CORE, + tags = Tags.rendering +) +public class JustifyModeSample extends MarkwonTextViewSample { + @Override + public void render() { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + textView.setJustificationMode(Layout.JUSTIFICATION_MODE_INTER_WORD); + } + + final String md = "" + + "# Justify\n\n" + + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis rutrum orci at aliquet dapibus. Quisque laoreet fermentum bibendum. Suspendisse euismod nisl vel sapien viverra faucibus. Nulla vel neque volutpat, egestas dui ac, consequat elit. Donec et interdum massa. Quisque porta ornare posuere. Nam at ante a felis facilisis tempus eu et erat. Curabitur auctor mauris eget purus iaculis vulputate.\n\n" + + "> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis rutrum orci at aliquet dapibus. Quisque laoreet fermentum bibendum. Suspendisse euismod nisl vel sapien viverra faucibus. Nulla vel neque volutpat, egestas dui ac, consequat elit. Donec et interdum massa. Quisque porta ornare posuere. Nam at ante a felis facilisis tempus eu et erat. Curabitur auctor mauris eget purus iaculis vulputate.\n\n" + + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis rutrum orci at aliquet dapibus. Quisque laoreet fermentum bibendum. Suspendisse euismod nisl vel sapien viverra faucibus. Nulla vel neque volutpat, egestas dui ac, consequat elit. Donec et interdum massa. **Quisque porta ornare posuere.** Nam at ante a felis facilisis tempus eu et erat. Curabitur auctor mauris eget purus iaculis vulputate.\n\n" + + ""; + + if (false) { + // specify bufferType to make justificationMode argument be ignored + // Actually just calling method with BufferType argument would make + // justification gone + textView.setText(md, TextView.BufferType.SPANNABLE); + return; + } + + final Markwon markwon = Markwon.builder(context) + .usePlugin(ImagesPlugin.create()) + .build(); + + if (true) { + final Spanned spanned = markwon.toMarkdown(md); + + // NB! the call to `setText` without arguments + textView.setText(spanned); + + // if a plugin relies on `afterSetText` then we must manually call it, + // for example images are scheduled this way: + AsyncDrawableScheduler.schedule(textView); + return; + } + + // cannot use that + markwon.setMarkdown(textView, md); + } +}