Improved patterns & URI click handling in chat messages

This commit is contained in:
Sylvain Berfini 2023-04-25 14:02:19 +02:00
parent 0733ced356
commit 48fb7dfa92
3 changed files with 34 additions and 11 deletions

View file

@ -124,7 +124,8 @@ class ChatMessagesListAdapter(
)
return
}
urlClickEvent.value = Event(url)
val urlWithScheme = if (!url.startsWith("http")) "http://$url" else url
urlClickEvent.value = Event(urlWithScheme)
}
override fun onSipAddressClicked(sipUri: String) {
@ -137,6 +138,17 @@ class ChatMessagesListAdapter(
sipUriClickedEvent.value = Event(sipUri)
}
override fun onEmailAddressClicked(email: String) {
if (popup?.isShowing == true) {
Log.w(
"[Chat Message Data] Long press that displayed context menu detected, aborting click on email address [$email]"
)
return
}
val urlWithScheme = if (!email.startsWith("mailto:")) "mailto:$email" else email
urlClickEvent.value = Event(urlWithScheme)
}
override fun onCallConference(address: String, subject: String?) {
callConferenceEvent.value = Event(Pair(address, subject))
}

View file

@ -515,6 +515,8 @@ interface OnContentClickedListener {
fun onSipAddressClicked(sipUri: String)
fun onEmailAddressClicked(email: String)
fun onWebUrlClicked(url: String)
fun onCallConference(address: String, subject: String?)

View file

@ -218,7 +218,7 @@ class ChatMessageData(val chatMessage: ChatMessage) : GenericContactData(chatMes
text.value = PatternClickableSpan()
.add(
Pattern.compile(
"(?:<?sips?:)?[a-zA-Z0-9+_.\\-]+(?:@([a-zA-Z0-9+_.\\-;=~]+))+(>)?"
"(?:<?sips?:)[a-zA-Z0-9+_.\\-]+(?:@([a-zA-Z0-9+_.\\-;=~]+))+(>)?"
),
object : PatternClickableSpan.SpannableClickedListener {
override fun onSpanClicked(text: String) {
@ -227,6 +227,24 @@ class ChatMessageData(val chatMessage: ChatMessage) : GenericContactData(chatMes
}
}
)
.add(
Patterns.EMAIL_ADDRESS,
object : PatternClickableSpan.SpannableClickedListener {
override fun onSpanClicked(text: String) {
Log.i("[Chat Message Data] Clicked on email address: $text")
contentListener?.onEmailAddressClicked(text)
}
}
)
.add(
Patterns.PHONE,
object : PatternClickableSpan.SpannableClickedListener {
override fun onSpanClicked(text: String) {
Log.i("[Chat Message Data] Clicked on phone number: $text")
contentListener?.onSipAddressClicked(text)
}
}
)
.add(
Patterns.WEB_URL,
object : PatternClickableSpan.SpannableClickedListener {
@ -235,15 +253,6 @@ class ChatMessageData(val chatMessage: ChatMessage) : GenericContactData(chatMes
contentListener?.onWebUrlClicked(text)
}
}
)
.add(
Patterns.PHONE,
object : PatternClickableSpan.SpannableClickedListener {
override fun onSpanClicked(text: String) {
Log.i("[Chat Message Data] Clicked on phone number: $text")
contentListener?.onSipAddressClicked(text)
}
}
).build(spannable)
isTextEmoji.value = AppUtils.isTextOnlyContainingEmoji(textContent)
} else {