Improved patterns & URI click handling in chat messages
This commit is contained in:
parent
0733ced356
commit
48fb7dfa92
3 changed files with 34 additions and 11 deletions
|
@ -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))
|
||||
}
|
||||
|
|
|
@ -515,6 +515,8 @@ interface OnContentClickedListener {
|
|||
|
||||
fun onSipAddressClicked(sipUri: String)
|
||||
|
||||
fun onEmailAddressClicked(email: String)
|
||||
|
||||
fun onWebUrlClicked(url: String)
|
||||
|
||||
fun onCallConference(address: String, subject: String?)
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue