From 8937d0abf0d102f71c0f3f66c29855e9b5d54580 Mon Sep 17 00:00:00 2001 From: Levi Bard Date: Sun, 15 Dec 2024 20:58:19 +0100 Subject: [PATCH] Don't repeat inline tags in the trailing hashtag bar (#4811) --- .../com/keylesspalace/tusky/util/LinkHelper.kt | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.kt b/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.kt index ccb37039c..e26558284 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.kt +++ b/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.kt @@ -86,13 +86,14 @@ fun setClickableText( trailingHashtagView == null || tags.isNullOrEmpty() -> Pair(spannableContent.length, emptyList()) else -> getTrailingHashtags(spannableContent) } - var inlineHashtagSpanCount = 0 + val inlineHashtags = mutableListOf() view.text = spannableContent.apply { styleQuoteSpans(view) getSpans(0, endOfContent, URLSpan::class.java).forEach { span -> - if (get(getSpanStart(span)) == '#') { - inlineHashtagSpanCount += 1 + val start = getSpanStart(span) + if (get(start) == '#') { + inlineHashtags.add(subSequence(start + 1, getSpanEnd(span))) } setClickableText(span, this, mentions, tags, listener) } @@ -100,12 +101,18 @@ fun setClickableText( view.movementMethod = NoTrailingSpaceLinkMovementMethod - val showHashtagBar = (trailingHashtags.isNotEmpty() || inlineHashtagSpanCount != tags?.size) + val showHashtagBar = (trailingHashtags.isNotEmpty() || inlineHashtags.size != tags?.size) // I don't _love_ setting the visibility here, but the alternative is to duplicate the logic in other places trailingHashtagView?.visible(showHashtagBar) if (showHashtagBar) { - trailingHashtagView?.apply { text = buildTrailingHashtagText(tags, trailingHashtags, listener) } + trailingHashtagView?.apply { + text = buildTrailingHashtagText( + tags?.filterNot { tag -> inlineHashtags.any { it.contentEquals(tag.name, ignoreCase = true) } }, + trailingHashtags, + listener, + ) + } } }