diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemUtils.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemUtils.kt index 7a395978a3e..d86719f254a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemUtils.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemUtils.kt @@ -41,8 +41,20 @@ object V2ConversationItemUtils { messageBody.getSpans(0, messageBody.length, URLSpan::class.java).forEach { urlSpan -> val start = messageBody.getSpanStart(urlSpan) - val end = messageBody.getSpanEnd(urlSpan) - val span = InterceptableLongClickCopyLinkSpan(urlSpan.url, urlClickHandler) + var end = messageBody.getSpanEnd(urlSpan) + var url = urlSpan.url + + while (end < messageBody.length && messageBody[end] == '-') { + val nextCharIndex = end + 1 + if (nextCharIndex >= messageBody.length || messageBody[nextCharIndex] == ' ' || messageBody[nextCharIndex] == '\n') { + url += '-' + end++ + } else { + break + } + } + + val span = InterceptableLongClickCopyLinkSpan(url, urlClickHandler) messageBody.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) messageBody.removeSpan(urlSpan) diff --git a/app/src/test/java/org/thoughtcrime/securesms/conversation/ConversationItemTest_linkifyUrlLinks.kt b/app/src/test/java/org/thoughtcrime/securesms/conversation/ConversationItemTest_linkifyUrlLinks.kt index 1ad43c054c2..41d45b4797d 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/conversation/ConversationItemTest_linkifyUrlLinks.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/conversation/ConversationItemTest_linkifyUrlLinks.kt @@ -39,6 +39,8 @@ class ConversationItemTest_linkifyUrlLinks(private val input: String, private va arrayOf("https://www.google.com%d332", "https://www.google.com"), // arrayOf("https://www.instagram.com/tv/CfImYdngccQ/?igshid=YmMyMTA2M2Y= ", "https://www.instagram.com/tv/CfImYdngccQ/?igshid=YmMyMTA2M2Y="), arrayOf("https://www.instagram.com/tv/CfImYdngccQ/?igshid=YmMyMTA2M2Y=\n", "https://www.instagram.com/tv/CfImYdngccQ/?igshid=YmMyMTA2M2Y="), + arrayOf("https://example.com/link- word", "https://example.com/link-"), + arrayOf("https://example.com/link-\nword.", "https://example.com/link-"), // arrayOf("https://fr.ulule.com/sapins-barbus-la-bd-/ ", "https://fr.ulule.com/sapins-barbus-la-bd-/"), arrayOf("https://fr.ulule.com/sapins-barbus-la-bd-/\n", "https://fr.ulule.com/sapins-barbus-la-bd-/"), arrayOf("https://de.m.wikipedia.org/wiki/Red_Dawn_(2012)", "https://de.m.wikipedia.org/wiki/Red_Dawn_(2012)")