From 69e8c9143170cd857735b89740e0800b061bcf57 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Thu, 11 Apr 2024 15:09:56 +0200 Subject: [PATCH 1/2] avoid error when clicking on federated user mention chip without this, there would be the common error message shown because of a http 404 error. With this fix, nothing happens when clicking on a federated user mention chip, just like in web and iOS. Signed-off-by: Marcel Hibbe --- app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt index 46154e2b7..d26239cd9 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt @@ -271,7 +271,7 @@ object DisplayUtils { 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) } } From 52dc82703e04ad86b01480c39b20384391df3861 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Thu, 11 Apr 2024 15:37:35 +0200 Subject: [PATCH 2/2] avoid error when clicking on federated user avatar without this, there would be http 404 error (nothing was shown to user): 2024-04-11 15:34:30.612 18641-18641 ProfileBottomSheet com.nextcloud.talk2 E Failed to get hover card for user user@yourfereatedserver.dev retrofit2.adapter.rxjava2.HttpException: HTTP 404 at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:57) at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:38) at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:48) at io.reactivex.Observable.subscribe(Observable.java:12284) at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:35) at io.reactivex.Observable.subscribe(Observable.java:12284) at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96) at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:608) at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) at java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) With this fix, nothing happens when clicking on a federated user avatar, just like in web and iOS. Signed-off-by: Marcel Hibbe --- .../IncomingLinkPreviewMessageViewHolder.kt | 2 +- .../messages/IncomingLocationMessageViewHolder.kt | 2 +- .../messages/IncomingPollMessageViewHolder.kt | 2 +- .../messages/IncomingTextMessageViewHolder.kt | 2 +- .../messages/IncomingVoiceMessageViewHolder.kt | 2 +- .../adapters/messages/PreviewMessageViewHolder.kt | 2 +- .../talk/ui/bottom/sheet/ProfileBottomSheet.kt | 15 +++++++++++---- 7 files changed, 17 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLinkPreviewMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLinkPreviewMessageViewHolder.kt index bf4b1b00c..a8b47572e 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLinkPreviewMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLinkPreviewMessageViewHolder.kt @@ -132,7 +132,7 @@ class IncomingLinkPreviewMessageViewHolder(incomingView: View, payload: Any) : binding.messageAuthor.visibility = View.VISIBLE binding.messageAuthor.text = author binding.messageUserAvatar.setOnClickListener { - (payload as? MessagePayload)?.profileBottomSheet?.showFor(message.actorId!!, itemView.context) + (payload as? MessagePayload)?.profileBottomSheet?.showFor(message, itemView.context) } } else { binding.messageAuthor.setText(R.string.nc_nick_guest) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt index fdcbd46a4..f6d13bd02 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt @@ -118,7 +118,7 @@ class IncomingLocationMessageViewHolder(incomingView: View, payload: Any) : binding.messageAuthor.visibility = View.VISIBLE binding.messageAuthor.text = author binding.messageUserAvatar.setOnClickListener { - (payload as? MessagePayload)?.profileBottomSheet?.showFor(message.actorId!!, itemView.context) + (payload as? MessagePayload)?.profileBottomSheet?.showFor(message, itemView.context) } } else { binding.messageAuthor.setText(R.string.nc_nick_guest) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt index f191071aa..18cbb2c45 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt @@ -140,7 +140,7 @@ class IncomingPollMessageViewHolder(incomingView: View, payload: Any) : binding.messageAuthor.visibility = View.VISIBLE binding.messageAuthor.text = author binding.messageUserAvatar.setOnClickListener { - (payload as? MessagePayload)?.profileBottomSheet?.showFor(message.actorId!!, itemView.context) + (payload as? MessagePayload)?.profileBottomSheet?.showFor(message, itemView.context) } } else { binding.messageAuthor.setText(R.string.nc_nick_guest) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingTextMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingTextMessageViewHolder.kt index d17d61cb8..52e4f2bbc 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingTextMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingTextMessageViewHolder.kt @@ -140,7 +140,7 @@ class IncomingTextMessageViewHolder(itemView: View, payload: Any) : binding.messageAuthor.visibility = View.VISIBLE binding.messageAuthor.text = author binding.messageUserAvatar.setOnClickListener { - (payload as? MessagePayload)?.profileBottomSheet?.showFor(message.actorId!!, itemView.context) + (payload as? MessagePayload)?.profileBottomSheet?.showFor(message, itemView.context) } } else { binding.messageAuthor.setText(R.string.nc_nick_guest) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt index 67a101053..e267495af 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt @@ -234,7 +234,7 @@ class IncomingVoiceMessageViewHolder(incomingView: View, payload: Any) : binding.messageAuthor.visibility = View.VISIBLE binding.messageAuthor.text = author binding.messageUserAvatar.setOnClickListener { - (payload as? MessagePayload)?.profileBottomSheet?.showFor(message.actorId!!, itemView.context) + (payload as? MessagePayload)?.profileBottomSheet?.showFor(message, itemView.context) } } else { binding.messageAuthor.setText(R.string.nc_nick_guest) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/PreviewMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/PreviewMessageViewHolder.kt index 95e786761..7ff68e951 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/PreviewMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/PreviewMessageViewHolder.kt @@ -172,7 +172,7 @@ abstract class PreviewMessageViewHolder(itemView: View?, payload: Any?) : userAvatar.setOnClickListener { v: View -> if (payload is MessagePayload) { (payload as MessagePayload).profileBottomSheet.showFor( - message.actorId!!, + message, v.context ) } diff --git a/app/src/main/java/com/nextcloud/talk/ui/bottom/sheet/ProfileBottomSheet.kt b/app/src/main/java/com/nextcloud/talk/ui/bottom/sheet/ProfileBottomSheet.kt index a6834391a..1204d7ebb 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/bottom/sheet/ProfileBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/bottom/sheet/ProfileBottomSheet.kt @@ -21,9 +21,11 @@ import com.nextcloud.talk.chat.ChatActivity import com.nextcloud.talk.bottomsheet.items.BasicListItemWithImage import com.nextcloud.talk.bottomsheet.items.listItemsWithImage 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.hovercard.HoverCardAction 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.PROFILE 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) - 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( ApiUtils.getCredentials(userModel.username, userModel.token), - ApiUtils.getUrlForHoverCard(userModel.baseUrl!!, user) + ApiUtils.getUrlForHoverCard(userModel.baseUrl!!, message.actorId!!) ).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribe(object : Observer { override fun onSubscribe(d: Disposable) { @@ -55,13 +62,13 @@ class ProfileBottomSheet(val ncApi: NcApi, val userModel: User, val viewThemeUti bottomSheet( hoverCardOverall.ocs!!.data!!.actions!!, hoverCardOverall.ocs!!.data!!.displayName!!, - user, + message.actorId!!, context ) } 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() {