Merge pull request #3823 from nextcloud/bugfix/noid/fixClickOnFederatedUser

avoid error when clicking on federated user
This commit is contained in:
Marcel Hibbe 2024-04-15 14:32:29 +02:00 committed by GitHub
commit 4c96f511c8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 18 additions and 11 deletions

View File

@ -132,7 +132,7 @@ class IncomingLinkPreviewMessageViewHolder(incomingView: View, payload: Any) :
binding.messageAuthor.visibility = View.VISIBLE binding.messageAuthor.visibility = View.VISIBLE
binding.messageAuthor.text = author binding.messageAuthor.text = author
binding.messageUserAvatar.setOnClickListener { binding.messageUserAvatar.setOnClickListener {
(payload as? MessagePayload)?.profileBottomSheet?.showFor(message.actorId!!, itemView.context) (payload as? MessagePayload)?.profileBottomSheet?.showFor(message, itemView.context)
} }
} else { } else {
binding.messageAuthor.setText(R.string.nc_nick_guest) binding.messageAuthor.setText(R.string.nc_nick_guest)

View File

@ -118,7 +118,7 @@ class IncomingLocationMessageViewHolder(incomingView: View, payload: Any) :
binding.messageAuthor.visibility = View.VISIBLE binding.messageAuthor.visibility = View.VISIBLE
binding.messageAuthor.text = author binding.messageAuthor.text = author
binding.messageUserAvatar.setOnClickListener { binding.messageUserAvatar.setOnClickListener {
(payload as? MessagePayload)?.profileBottomSheet?.showFor(message.actorId!!, itemView.context) (payload as? MessagePayload)?.profileBottomSheet?.showFor(message, itemView.context)
} }
} else { } else {
binding.messageAuthor.setText(R.string.nc_nick_guest) binding.messageAuthor.setText(R.string.nc_nick_guest)

View File

@ -140,7 +140,7 @@ class IncomingPollMessageViewHolder(incomingView: View, payload: Any) :
binding.messageAuthor.visibility = View.VISIBLE binding.messageAuthor.visibility = View.VISIBLE
binding.messageAuthor.text = author binding.messageAuthor.text = author
binding.messageUserAvatar.setOnClickListener { binding.messageUserAvatar.setOnClickListener {
(payload as? MessagePayload)?.profileBottomSheet?.showFor(message.actorId!!, itemView.context) (payload as? MessagePayload)?.profileBottomSheet?.showFor(message, itemView.context)
} }
} else { } else {
binding.messageAuthor.setText(R.string.nc_nick_guest) binding.messageAuthor.setText(R.string.nc_nick_guest)

View File

@ -140,7 +140,7 @@ class IncomingTextMessageViewHolder(itemView: View, payload: Any) :
binding.messageAuthor.visibility = View.VISIBLE binding.messageAuthor.visibility = View.VISIBLE
binding.messageAuthor.text = author binding.messageAuthor.text = author
binding.messageUserAvatar.setOnClickListener { binding.messageUserAvatar.setOnClickListener {
(payload as? MessagePayload)?.profileBottomSheet?.showFor(message.actorId!!, itemView.context) (payload as? MessagePayload)?.profileBottomSheet?.showFor(message, itemView.context)
} }
} else { } else {
binding.messageAuthor.setText(R.string.nc_nick_guest) binding.messageAuthor.setText(R.string.nc_nick_guest)

View File

@ -234,7 +234,7 @@ class IncomingVoiceMessageViewHolder(incomingView: View, payload: Any) :
binding.messageAuthor.visibility = View.VISIBLE binding.messageAuthor.visibility = View.VISIBLE
binding.messageAuthor.text = author binding.messageAuthor.text = author
binding.messageUserAvatar.setOnClickListener { binding.messageUserAvatar.setOnClickListener {
(payload as? MessagePayload)?.profileBottomSheet?.showFor(message.actorId!!, itemView.context) (payload as? MessagePayload)?.profileBottomSheet?.showFor(message, itemView.context)
} }
} else { } else {
binding.messageAuthor.setText(R.string.nc_nick_guest) binding.messageAuthor.setText(R.string.nc_nick_guest)

View File

@ -172,7 +172,7 @@ abstract class PreviewMessageViewHolder(itemView: View?, payload: Any?) :
userAvatar.setOnClickListener { v: View -> userAvatar.setOnClickListener { v: View ->
if (payload is MessagePayload) { if (payload is MessagePayload) {
(payload as MessagePayload).profileBottomSheet.showFor( (payload as MessagePayload).profileBottomSheet.showFor(
message.actorId!!, message,
v.context v.context
) )
} }

View File

@ -21,9 +21,11 @@ import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.bottomsheet.items.BasicListItemWithImage import com.nextcloud.talk.bottomsheet.items.BasicListItemWithImage
import com.nextcloud.talk.bottomsheet.items.listItemsWithImage import com.nextcloud.talk.bottomsheet.items.listItemsWithImage
import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.models.json.chat.ChatMessage
import com.nextcloud.talk.models.json.conversations.RoomOverall import com.nextcloud.talk.models.json.conversations.RoomOverall
import com.nextcloud.talk.models.json.hovercard.HoverCardAction import com.nextcloud.talk.models.json.hovercard.HoverCardAction
import com.nextcloud.talk.models.json.hovercard.HoverCardOverall import com.nextcloud.talk.models.json.hovercard.HoverCardOverall
import com.nextcloud.talk.models.json.participants.Participant
import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet.AllowedAppIds.EMAIL import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet.AllowedAppIds.EMAIL
import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet.AllowedAppIds.PROFILE import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet.AllowedAppIds.PROFILE
import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet.AllowedAppIds.SPREED import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet.AllowedAppIds.SPREED
@ -41,10 +43,15 @@ class ProfileBottomSheet(val ncApi: NcApi, val userModel: User, val viewThemeUti
private val allowedAppIds = listOf(SPREED.stringValue, PROFILE.stringValue, EMAIL.stringValue) private val allowedAppIds = listOf(SPREED.stringValue, PROFILE.stringValue, EMAIL.stringValue)
fun showFor(user: String, context: Context) { fun showFor(message: ChatMessage, context: Context) {
if (message.actorType == Participant.ActorType.FEDERATED.toString()) {
Log.d(TAG, "no actions for federated users are shown")
return
}
ncApi.hoverCard( ncApi.hoverCard(
ApiUtils.getCredentials(userModel.username, userModel.token), ApiUtils.getCredentials(userModel.username, userModel.token),
ApiUtils.getUrlForHoverCard(userModel.baseUrl!!, user) ApiUtils.getUrlForHoverCard(userModel.baseUrl!!, message.actorId!!)
).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) ).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Observer<HoverCardOverall> { .subscribe(object : Observer<HoverCardOverall> {
override fun onSubscribe(d: Disposable) { override fun onSubscribe(d: Disposable) {
@ -55,13 +62,13 @@ class ProfileBottomSheet(val ncApi: NcApi, val userModel: User, val viewThemeUti
bottomSheet( bottomSheet(
hoverCardOverall.ocs!!.data!!.actions!!, hoverCardOverall.ocs!!.data!!.actions!!,
hoverCardOverall.ocs!!.data!!.displayName!!, hoverCardOverall.ocs!!.data!!.displayName!!,
user, message.actorId!!,
context context
) )
} }
override fun onError(e: Throwable) { override fun onError(e: Throwable) {
Log.e(TAG, "Failed to get hover card for user $user", e) Log.e(TAG, "Failed to get hover card for user " + message.actorId, e)
} }
override fun onComplete() { override fun onComplete() {

View File

@ -271,7 +271,7 @@ object DisplayUtils {
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
) )
} }
if ("user" == type && conversationUser.userId != id) { if ("user" == type && conversationUser.userId != id && !isFederated) {
spannableString.setSpan(clickableSpan, start, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE) spannableString.setSpan(clickableSpan, start, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
} }
} }