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,
|
oldItem: EventLogData,
|
||||||
newItem: EventLogData
|
newItem: EventLogData
|
||||||
): Boolean {
|
): 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 oldData = (oldItem.data as ChatMessageData)
|
||||||
val newData = (newItem.data as ChatMessageData)
|
val newData = (newItem.data as ChatMessageData)
|
||||||
|
|
||||||
val previous = oldData.hasPreviousMessage == newData.hasPreviousMessage
|
val previous = oldData.hasPreviousMessage == newData.hasPreviousMessage
|
||||||
val next = oldData.hasNextMessage == newData.hasNextMessage
|
val next = oldData.hasNextMessage == newData.hasNextMessage
|
||||||
newItem.eventLog.chatMessage?.state == ChatMessage.State.Displayed && previous && next
|
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
|
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,
|
this,
|
||||||
ChatRoomViewModelFactory(chatRoom)
|
ChatRoomViewModelFactory(chatRoom)
|
||||||
)[ChatRoomViewModel::class.java]
|
)[ChatRoomViewModel::class.java]
|
||||||
|
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
||||||
chatSendingViewModel = ViewModelProvider(
|
chatSendingViewModel = ViewModelProvider(
|
||||||
|
@ -331,6 +341,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
|
||||||
{
|
{
|
||||||
it.consume { chatMessage ->
|
it.consume { chatMessage ->
|
||||||
listViewModel.deleteMessage(chatMessage)
|
listViewModel.deleteMessage(chatMessage)
|
||||||
|
viewModel.updateLastMessageToDisplay()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -607,6 +618,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
|
||||||
list.add(eventLog)
|
list.add(eventLog)
|
||||||
}
|
}
|
||||||
listViewModel.deleteEventLogs(list)
|
listViewModel.deleteEventLogs(list)
|
||||||
|
viewModel.updateLastMessageToDisplay()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onRequestPermissionsResult(
|
override fun onRequestPermissionsResult(
|
||||||
|
@ -849,6 +861,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
|
||||||
Log.i("[Chat Room] Deleting event $eventLog at position $position")
|
Log.i("[Chat Room] Deleting event $eventLog at position $position")
|
||||||
listViewModel.deleteEventLogs(arrayListOf(eventLog))
|
listViewModel.deleteEventLogs(arrayListOf(eventLog))
|
||||||
}
|
}
|
||||||
|
viewModel.updateLastMessageToDisplay()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,7 +98,9 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
|
||||||
isSecure = true
|
isSecure = true
|
||||||
binding.lifecycleOwner = viewLifecycleOwner
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
listViewModel = ViewModelProvider(this)[ChatRoomsListViewModel::class.java]
|
listViewModel = requireActivity().run {
|
||||||
|
ViewModelProvider(this)[ChatRoomsListViewModel::class.java]
|
||||||
|
}
|
||||||
binding.viewModel = listViewModel
|
binding.viewModel = listViewModel
|
||||||
|
|
||||||
/* Shared view model & sliding pane related */
|
/* 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)
|
lastMessageText.value = formatLastMessage(chatRoom.lastMessageInHistory)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -142,9 +142,7 @@ class ChatRoomsListViewModel : ErrorReportingViewModel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateChatRooms() {
|
private fun updateChatRooms() {
|
||||||
for (chatRoomViewModel in chatRooms.value.orEmpty()) {
|
chatRooms.value.orEmpty().forEach(ChatRoomViewModel::destroy)
|
||||||
chatRoomViewModel.destroy()
|
|
||||||
}
|
|
||||||
|
|
||||||
val list = arrayListOf<ChatRoomViewModel>()
|
val list = arrayListOf<ChatRoomViewModel>()
|
||||||
for (chatRoom in coreContext.core.chatRooms) {
|
for (chatRoom in coreContext.core.chatRooms) {
|
||||||
|
|
Loading…
Reference in a new issue