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
|
return
|
||||||
}
|
}
|
||||||
urlClickEvent.value = Event(url)
|
val urlWithScheme = if (!url.startsWith("http")) "http://$url" else url
|
||||||
|
urlClickEvent.value = Event(urlWithScheme)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSipAddressClicked(sipUri: String) {
|
override fun onSipAddressClicked(sipUri: String) {
|
||||||
|
@ -137,6 +138,17 @@ class ChatMessagesListAdapter(
|
||||||
sipUriClickedEvent.value = Event(sipUri)
|
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?) {
|
override fun onCallConference(address: String, subject: String?) {
|
||||||
callConferenceEvent.value = Event(Pair(address, subject))
|
callConferenceEvent.value = Event(Pair(address, subject))
|
||||||
}
|
}
|
||||||
|
|
|
@ -515,6 +515,8 @@ interface OnContentClickedListener {
|
||||||
|
|
||||||
fun onSipAddressClicked(sipUri: String)
|
fun onSipAddressClicked(sipUri: String)
|
||||||
|
|
||||||
|
fun onEmailAddressClicked(email: String)
|
||||||
|
|
||||||
fun onWebUrlClicked(url: String)
|
fun onWebUrlClicked(url: String)
|
||||||
|
|
||||||
fun onCallConference(address: String, subject: String?)
|
fun onCallConference(address: String, subject: String?)
|
||||||
|
|
|
@ -218,7 +218,7 @@ class ChatMessageData(val chatMessage: ChatMessage) : GenericContactData(chatMes
|
||||||
text.value = PatternClickableSpan()
|
text.value = PatternClickableSpan()
|
||||||
.add(
|
.add(
|
||||||
Pattern.compile(
|
Pattern.compile(
|
||||||
"(?:<?sips?:)?[a-zA-Z0-9+_.\\-]+(?:@([a-zA-Z0-9+_.\\-;=~]+))+(>)?"
|
"(?:<?sips?:)[a-zA-Z0-9+_.\\-]+(?:@([a-zA-Z0-9+_.\\-;=~]+))+(>)?"
|
||||||
),
|
),
|
||||||
object : PatternClickableSpan.SpannableClickedListener {
|
object : PatternClickableSpan.SpannableClickedListener {
|
||||||
override fun onSpanClicked(text: String) {
|
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(
|
.add(
|
||||||
Patterns.WEB_URL,
|
Patterns.WEB_URL,
|
||||||
object : PatternClickableSpan.SpannableClickedListener {
|
object : PatternClickableSpan.SpannableClickedListener {
|
||||||
|
@ -235,15 +253,6 @@ class ChatMessageData(val chatMessage: ChatMessage) : GenericContactData(chatMes
|
||||||
contentListener?.onWebUrlClicked(text)
|
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)
|
).build(spannable)
|
||||||
isTextEmoji.value = AppUtils.isTextOnlyContainingEmoji(textContent)
|
isTextEmoji.value = AppUtils.isTextOnlyContainingEmoji(textContent)
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue