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 38503e8b1..a51cd6705 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 @@ -346,13 +346,16 @@ class ConversationFragment : SlidingPaneChildFragment() { binding.lifecycleOwner = viewLifecycleOwner - viewModel = ViewModelProvider(this)[ConversationViewModel::class.java] - sendMessageViewModel = ViewModelProvider(this)[SendMessageInConversationViewModel::class.java] - + // The following prevents re-computing conversation history + // when going back from a sub-fragment such as media grid or info + if (!::viewModel.isInitialized) { + viewModel = ViewModelProvider(this)[ConversationViewModel::class.java] + } binding.viewModel = viewModel - binding.sendMessageViewModel = sendMessageViewModel - observeToastEvents(viewModel) + + sendMessageViewModel = ViewModelProvider(this)[SendMessageInConversationViewModel::class.java] + binding.sendMessageViewModel = sendMessageViewModel observeToastEvents(sendMessageViewModel) binding.setBackClickListener { diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt index 7358c6c15..7b1ea0ffa 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt @@ -333,6 +333,10 @@ class ConversationViewModel @UiThread constructor() : AbstractConversationViewMo Log.i("$TAG Conversation found and not the same as before, configuring it...") chatRoom.addListener(chatRoomListener) configureChatRoom() + } else { + // This is required to have events displayed when fragment is recreated + // due to a rotation or theme switching between light & dark for example + updateEvents.postValue(Event(true)) } }