diff --git a/app/src/main/java/ani/dantotsu/Functions.kt b/app/src/main/java/ani/dantotsu/Functions.kt index cab610ec..13b06758 100644 --- a/app/src/main/java/ani/dantotsu/Functions.kt +++ b/app/src/main/java/ani/dantotsu/Functions.kt @@ -92,6 +92,7 @@ import ani.dantotsu.connections.anilist.api.FuzzyDate import ani.dantotsu.connections.crashlytics.CrashlyticsInterface import ani.dantotsu.databinding.ItemCountDownBinding import ani.dantotsu.media.Media +import ani.dantotsu.others.SpoilerPlugin import ani.dantotsu.parsers.ShowResponse import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefName @@ -1247,6 +1248,7 @@ fun buildMarkwon( .usePlugin(StrikethroughPlugin.create()) .usePlugin(TablePlugin.create(activity)) .usePlugin(TaskListPlugin.create(activity)) + .usePlugin(SpoilerPlugin()) .usePlugin(HtmlPlugin.create { plugin -> if (userInputContent) { plugin.addHandler( diff --git a/app/src/main/java/ani/dantotsu/media/CharacterDetailsAdapter.kt b/app/src/main/java/ani/dantotsu/media/CharacterDetailsAdapter.kt index 15781d8b..2e419492 100644 --- a/app/src/main/java/ani/dantotsu/media/CharacterDetailsAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/CharacterDetailsAdapter.kt @@ -35,7 +35,7 @@ class CharacterDetailsAdapter(private val character: Character, private val acti binding.characterDesc.isTextSelectable val markWon = Markwon.builder(activity).usePlugin(SoftBreakAddsNewLinePlugin.create()) .usePlugin(SpoilerPlugin()).build() - markWon.setMarkdown(binding.characterDesc, desc) + markWon.setMarkdown(binding.characterDesc, desc.replace("~!", "||").replace("!~", "||")) } diff --git a/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt b/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt index 4bd541f7..577e92a0 100644 --- a/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt +++ b/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt @@ -59,10 +59,8 @@ class CommentItem(val comment: Comment, viewBinding.commentRepliesList.layoutManager = LinearLayoutManager(commentsFragment.activity) viewBinding.commentRepliesList.adapter = adapter val isUserComment = CommentsAPI.userId == comment.userId - val node = markwon.parse(comment.content) - val spanned = markwon.render(node) val levelColor = getAvatarColor(comment.totalVotes, backgroundColor) - markwon.setParsedMarkdown(viewBinding.commentText, viewBinding.commentText.setSpoilerText(spanned, markwon)) + markwon.setMarkdown(viewBinding.commentText, comment.content) viewBinding.commentDelete.visibility = if (isUserComment || CommentsAPI.isAdmin || CommentsAPI.isMod) View.VISIBLE else View.GONE viewBinding.commentBanUser.visibility = if ((CommentsAPI.isAdmin || CommentsAPI.isMod) && !isUserComment) View.VISIBLE else View.GONE viewBinding.commentReport.visibility = if (!isUserComment) View.VISIBLE else View.GONE diff --git a/app/src/main/java/ani/dantotsu/media/comments/SpoilerTextView.kt b/app/src/main/java/ani/dantotsu/media/comments/SpoilerTextView.kt deleted file mode 100644 index 832330fc..00000000 --- a/app/src/main/java/ani/dantotsu/media/comments/SpoilerTextView.kt +++ /dev/null @@ -1,59 +0,0 @@ -package ani.dantotsu.media.comments - -import android.content.Context -import android.text.SpannableString -import android.text.SpannableStringBuilder -import android.text.Spanned -import android.text.method.LinkMovementMethod -import android.text.style.ClickableSpan -import android.util.AttributeSet -import android.view.View -import androidx.appcompat.widget.AppCompatTextView -import io.noties.markwon.Markwon - -class SpoilerTextView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0 -) : AppCompatTextView(context, attrs, defStyleAttr) { - - private val replaceWith = "▓" - private var originalSpanned: SpannableStringBuilder? = null - - fun setSpoilerText(text: Spanned, markwon: Markwon) : Spanned { - val pattern = Regex("\\|\\|(.*?)\\|\\|") - val matcher = pattern.toPattern().matcher(text) - val spannableBuilder = SpannableStringBuilder(text) - //remove the "||" from the text - val originalBuilder = SpannableStringBuilder(text) - originalSpanned = originalBuilder - - val map = mutableMapOf() - while (matcher.find()) { - val start = matcher.start() - val end = matcher.end() - map[start] = end - } - - map.forEach { (start, end) -> - val replacement = replaceWith.repeat(end - start) - spannableBuilder.replace(start, end, replacement) - } - val spannableString = SpannableString(spannableBuilder) - map.forEach { (start, end) -> - val clickableSpan = object : ClickableSpan() { - override fun onClick(widget: View) { - markwon.setParsedMarkdown(this@SpoilerTextView, originalSpanned!!.delete(end - 2, end).delete(start, start + 2)) - } - } - spannableString.setSpan( - clickableSpan, - start, - end, - SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE - ) - } - movementMethod = LinkMovementMethod.getInstance() - return spannableString - } -} \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/others/SpoilerPlugin.kt b/app/src/main/java/ani/dantotsu/others/SpoilerPlugin.kt index fd746664..79b6138a 100644 --- a/app/src/main/java/ani/dantotsu/others/SpoilerPlugin.kt +++ b/app/src/main/java/ani/dantotsu/others/SpoilerPlugin.kt @@ -44,7 +44,7 @@ class SpoilerPlugin : AbstractMarkwonPlugin() { } companion object { - private val RE = Pattern.compile("~!.+?!~") + private val RE = Pattern.compile("\\|\\|.+?\\|\\|") private fun applySpoilerSpans(spannable: Spannable) { val text = spannable.toString() val matcher = RE.matcher(text) diff --git a/app/src/main/res/layout/item_comments.xml b/app/src/main/res/layout/item_comments.xml index 213cdc01..2bc15c09 100644 --- a/app/src/main/res/layout/item_comments.xml +++ b/app/src/main/res/layout/item_comments.xml @@ -148,7 +148,7 @@ tools:ignore="ContentDescription,RtlSymmetry" /> -