Properly update last chat room message for when going back to chat rooms list
This commit is contained in:
parent
dabecf1077
commit
891be0eb9b
5 changed files with 27 additions and 8 deletions
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -276,7 +276,7 @@ class ChatRoomViewModel(val chatRoom: ChatRoom) : ViewModel(), ContactDataInterf
|
|||
}
|
||||
}
|
||||
|
||||
private fun updateLastMessageToDisplay() {
|
||||
fun updateLastMessageToDisplay() {
|
||||
lastMessageText.value = formatLastMessage(chatRoom.lastMessageInHistory)
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue