From 01521673cc77f098df4538570ce2a3fd7fb17c14 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 11 Jul 2025 16:01:26 +0200 Subject: [PATCH] Fixed reactions list in bottom sheet not properly updated if opened when changes happen --- .../chat/fragment/ConversationFragment.kt | 10 ++++----- .../main/chat/model/MessageReactionsModel.kt | 21 ++++++++++--------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt index 85b6caea0..bf56dbb31 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt @@ -1324,7 +1324,7 @@ open class ConversationFragment : SlidingPaneChildFragment() { val model = MessageReactionsModel(chatMessageModel.chatMessage) { reactionsModel -> coreContext.postOnMainThread { - if (reactionsModel.allReactions.isEmpty) { + if (reactionsModel.allReactions.value.orEmpty().isEmpty()) { Log.i("$TAG No reaction to display, closing bottom sheet") val bottomSheetBehavior = BottomSheetBehavior.from( binding.messageBottomSheet.root @@ -1390,7 +1390,7 @@ open class ConversationFragment : SlidingPaneChildFragment() { @UiThread private fun displayReactions(model: MessageReactionsModel) { - val totalCount = model.allReactions.size + val totalCount = model.allReactions.value.orEmpty().size val label = getString(R.string.message_reactions_info_all_title, totalCount.toString()) val tabs = binding.messageBottomSheet.tabs @@ -1400,7 +1400,7 @@ open class ConversationFragment : SlidingPaneChildFragment() { ) var index = 1 - for (reaction in model.differentReactions.value.orEmpty()) { + for (reaction in model.differentReactions) { val count = model.reactionsMap[reaction] val tabLabel = getString( R.string.message_reactions_info_emoji_title, @@ -1417,7 +1417,7 @@ open class ConversationFragment : SlidingPaneChildFragment() { override fun onTabSelected(tab: TabLayout.Tab?) { val filter = tab?.tag.toString() if (filter.isEmpty()) { - bottomSheetAdapter.submitList(model.allReactions) + bottomSheetAdapter.submitList(model.allReactions.value.orEmpty()) } else { bottomSheetAdapter.submitList(model.filterReactions(filter)) } @@ -1430,7 +1430,7 @@ open class ConversationFragment : SlidingPaneChildFragment() { } }) - val initialList = model.allReactions + val initialList = model.allReactions.value.orEmpty() bottomSheetAdapter.submitList(initialList) Log.i("$TAG Submitted [${initialList.size}] items for default reactions list") } diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/MessageReactionsModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/MessageReactionsModel.kt index 1c930d03a..a389aabb7 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/MessageReactionsModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/MessageReactionsModel.kt @@ -38,9 +38,9 @@ class MessageReactionsModel private const val TAG = "[Message Reactions Model]" } - val allReactions = arrayListOf() + val allReactions = MutableLiveData>() - val differentReactions = MutableLiveData>() + val differentReactions = arrayListOf() val reactionsMap = HashMap() @@ -71,7 +71,7 @@ class MessageReactionsModel fun filterReactions(emoji: String): ArrayList { val filteredList = arrayListOf() - for (reaction in allReactions) { + for (reaction in allReactions.value.orEmpty()) { if (reaction.value == emoji) { filteredList.add(reaction) } @@ -83,16 +83,17 @@ class MessageReactionsModel @WorkerThread private fun computeReactions() { reactionsMap.clear() - allReactions.clear() + differentReactions.clear() - val differentReactionsList = arrayListOf() + val allReactionsList = arrayListOf() for (reaction in chatMessage.reactions) { val body = reaction.body val count = reactionsMap.getOrDefault(body, 0) reactionsMap[body] = count + 1 + Log.i("$TAG Found reaction with body [$body] (count = ${count + 1}) from [${reaction.fromAddress.asStringUriOnly()}]") val isOurOwn = reaction.fromAddress.weakEqual(chatMessage.chatRoom.localAddress) - allReactions.add( + allReactionsList.add( MessageBottomSheetParticipantModel( reaction.fromAddress, reaction.body, @@ -111,15 +112,15 @@ class MessageReactionsModel } ) - if (!differentReactionsList.contains(body)) { - differentReactionsList.add(body) + if (!differentReactions.contains(body)) { + differentReactions.add(body) } } Log.i( - "$TAG [${differentReactionsList.size}] reactions found on a total of [${allReactions.size}]" + "$TAG [${differentReactions.size}] reactions found on a total of [${allReactionsList.size}]" ) - differentReactions.postValue(differentReactionsList) + allReactions.postValue(allReactionsList) onReactionsUpdated?.invoke(this) } }