Fixed chat display issue with auto download

This commit is contained in:
Sylvain Berfini 2020-09-03 11:09:00 +02:00
parent 318dafaa00
commit 3e61773f53
4 changed files with 20 additions and 27 deletions

View file

@ -237,8 +237,7 @@ class ChatMessagesListAdapter(
private fun resendMessage() {
val chatMessage = binding.viewModel?.chatMessage
if (chatMessage != null) {
val viewHolder = binding.lifecycleOwner as ChatMessageViewHolder
chatMessage.userData = viewHolder.adapterPosition
chatMessage.userData = adapterPosition
resendMessageEvent.value = Event(chatMessage)
}
}
@ -269,8 +268,7 @@ class ChatMessagesListAdapter(
private fun deleteMessage() {
val chatMessage = binding.viewModel?.chatMessage
if (chatMessage != null) {
val viewHolder = binding.lifecycleOwner as ChatMessageViewHolder
chatMessage.userData = viewHolder.adapterPosition
chatMessage.userData = adapterPosition
deleteMessageEvent.value = Event(chatMessage)
}
}

View file

@ -79,13 +79,17 @@ class ChatMessageContentViewModel(
isVideo.value = false
}
} else {
Log.i("[Content] Found downloadable content: ${content.name}")
if (chatMessage.isFileTransferInProgress) {
Log.i("[Content] Found content currently being downloaded: ${content.name}")
downloadEnabled.value = false
} else {
Log.i("[Content] Found downloadable content: ${content.name}")
downloadEnabled.value = true
}
downloadable.value = true
isImage.value = false
isVideo.value = false
}
downloadEnabled.value = downloadable.value
}
fun download() {

View file

@ -58,30 +58,22 @@ class ChatMessagesListViewModel(private val chatRoom: ChatRoom) : ViewModel() {
MutableLiveData<Event<Boolean>>()
}
private val chatMessageListener: ChatMessageListenerStub = object : ChatMessageListenerStub() {
override fun onMsgStateChanged(message: ChatMessage, state: ChatMessage.State) {
if (state == ChatMessage.State.Displayed) {
message.removeListener(this)
}
val position: Int? = message.userData as? Int?
if (position != null) {
messageUpdatedEvent.value = Event(position)
}
}
}
private val chatRoomListener: ChatRoomListenerStub = object : ChatRoomListenerStub() {
override fun onChatMessageReceived(chatRoom: ChatRoom, eventLog: EventLog) {
chatRoom.markAsRead()
val position = events.value?.size ?: 0
if (eventLog.type == EventLog.Type.ConferenceChatMessage) {
val chatMessage = eventLog.chatMessage
chatMessage ?: return
chatMessage.userData = position
chatMessage.addListener(chatMessageListener)
chatMessage.userData = events.value.orEmpty().size
val existingEvent = events.value.orEmpty().find {
it.type == EventLog.Type.ConferenceChatMessage && it.chatMessage == chatMessage
}
if (existingEvent != null) {
Log.w("[Chat Messages] Found already present chat message, don't add it it's probably the result of an auto download")
return
}
if (Version.sdkStrictlyBelow(Version.API29_ANDROID_10) && !PermissionHelper.get().hasWriteExternalStorage()) {
for (content in chatMessage.contents) {
@ -98,13 +90,12 @@ class ChatMessagesListViewModel(private val chatRoom: ChatRoom) : ViewModel() {
}
override fun onChatMessageSent(chatRoom: ChatRoom, eventLog: EventLog) {
val position = events.value?.size ?: 0
val position = events.value.orEmpty().size
if (eventLog.type == EventLog.Type.ConferenceChatMessage) {
val chatMessage = eventLog.chatMessage
chatMessage ?: return
chatMessage.userData = position
chatMessage.addListener(chatMessageListener)
}
addEvent(eventLog)

View file

@ -123,7 +123,7 @@ class NotificationsManager(private val context: Context) {
Call.State.End, Call.State.Error -> dismissCallNotification(call)
Call.State.Released -> {
if (call.callLog.status == Call.Status.Missed ||
call.callLog.status == Call.Status.Aborted ||
call.callLog.status == Call.Status.Aborted ||
call.callLog.status == Call.Status.EarlyAborted) {
displayMissedCallNotification(call)
}