Properly update last chat room message for when going back to chat rooms list

This commit is contained in:
Sylvain Berfini 2022-01-11 15:40:29 +01:00
parent dabecf1077
commit 891be0eb9b
5 changed files with 27 additions and 8 deletions

View file

@ -451,12 +451,18 @@ private class ChatMessageDiffCallback : DiffUtil.ItemCallback<EventLogData>() {
oldItem: EventLogData,
newItem: EventLogData
): Boolean {
return if (newItem.eventLog.type == EventLog.Type.ConferenceChatMessage) {
return if (oldItem.eventLog.type == EventLog.Type.ConferenceChatMessage &&
newItem.eventLog.type == EventLog.Type.ConferenceChatMessage
) {
val oldData = (oldItem.data as ChatMessageData)
val newData = (newItem.data as ChatMessageData)
val previous = oldData.hasPreviousMessage == newData.hasPreviousMessage
val next = oldData.hasNextMessage == newData.hasNextMessage
newItem.eventLog.chatMessage?.state == ChatMessage.State.Displayed && previous && next
} else true
} else {
oldItem.eventLog.type != EventLog.Type.ConferenceChatMessage &&
newItem.eventLog.type != EventLog.Type.ConferenceChatMessage
}
}
}

View file

@ -175,10 +175,20 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
isSecure = chatRoom.currentParams.isEncryptionEnabled
viewModel = ViewModelProvider(
val chatRoomsListViewModel: ChatRoomsListViewModel = requireActivity().run {
ViewModelProvider(this)[ChatRoomsListViewModel::class.java]
}
val chatRoomViewModel = chatRoomsListViewModel.chatRooms.value.orEmpty().find {
it.chatRoom == chatRoom
}
if (chatRoomViewModel == null) {
Log.w("[Chat Room] Couldn't find existing view model, will create a new one!")
}
viewModel = chatRoomViewModel ?: ViewModelProvider(
this,
ChatRoomViewModelFactory(chatRoom)
)[ChatRoomViewModel::class.java]
binding.viewModel = viewModel
chatSendingViewModel = ViewModelProvider(
@ -331,6 +341,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
{
it.consume { chatMessage ->
listViewModel.deleteMessage(chatMessage)
viewModel.updateLastMessageToDisplay()
}
}
)
@ -607,6 +618,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
list.add(eventLog)
}
listViewModel.deleteEventLogs(list)
viewModel.updateLastMessageToDisplay()
}
override fun onRequestPermissionsResult(
@ -849,6 +861,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
Log.i("[Chat Room] Deleting event $eventLog at position $position")
listViewModel.deleteEventLogs(arrayListOf(eventLog))
}
viewModel.updateLastMessageToDisplay()
}
}
}

View file

@ -98,7 +98,9 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
isSecure = true
binding.lifecycleOwner = viewLifecycleOwner
listViewModel = ViewModelProvider(this)[ChatRoomsListViewModel::class.java]
listViewModel = requireActivity().run {
ViewModelProvider(this)[ChatRoomsListViewModel::class.java]
}
binding.viewModel = listViewModel
/* Shared view model & sliding pane related */

View file

@ -276,7 +276,7 @@ class ChatRoomViewModel(val chatRoom: ChatRoom) : ViewModel(), ContactDataInterf
}
}
private fun updateLastMessageToDisplay() {
fun updateLastMessageToDisplay() {
lastMessageText.value = formatLastMessage(chatRoom.lastMessageInHistory)
}

View file

@ -142,9 +142,7 @@ class ChatRoomsListViewModel : ErrorReportingViewModel() {
}
private fun updateChatRooms() {
for (chatRoomViewModel in chatRooms.value.orEmpty()) {
chatRoomViewModel.destroy()
}
chatRooms.value.orEmpty().forEach(ChatRoomViewModel::destroy)
val list = arrayListOf<ChatRoomViewModel>()
for (chatRoom in coreContext.core.chatRooms) {