diff --git a/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageContentData.kt b/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageContentData.kt index 60d2f42dc..4761ebd85 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageContentData.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageContentData.kt @@ -66,9 +66,8 @@ class ChatMessageContentData( val filePath = MutableLiveData() val downloadable = MutableLiveData() - val downloadEnabled = MutableLiveData() - val downloadProgressInt = MutableLiveData() - val downloadProgressString = MutableLiveData() + val fileTransferProgress = MutableLiveData() + val fileTransferProgressInt = MutableLiveData() val downloadLabel = MutableLiveData() val voiceRecordDuration = MutableLiveData() @@ -118,18 +117,18 @@ class ChatMessageContentData( total: Int ) { if (c.filePath == getContent().filePath) { - val percent = offset * 100 / total - Log.d("[Content] Download progress is: $offset / $total ($percent%)") - - downloadProgressInt.value = percent - downloadProgressString.value = "$percent%" + if (fileTransferProgress.value == false) { + fileTransferProgress.value = true + } + val percent = ((offset * 100.0) / total).toInt() // Conversion from int to double and back to int is required + Log.d("[Content] Transfer progress is: $offset / $total -> $percent%") + fileTransferProgressInt.value = percent } } override fun onMsgStateChanged(message: ChatMessage, state: ChatMessage.State) { - downloadEnabled.value = state != ChatMessage.State.FileTransferInProgress - if (state == ChatMessage.State.FileTransferDone || state == ChatMessage.State.FileTransferError) { + fileTransferProgress.value = false updateContent() if (state == ChatMessage.State.FileTransferDone) { @@ -149,6 +148,8 @@ class ChatMessageContentData( isVoiceRecordPlaying.value = false voiceRecordDuration.value = 0 voiceRecordPlayingPosition.value = 0 + fileTransferProgress.value = false + fileTransferProgressInt.value = 0 updateContent() chatMessage.addListener(chatMessageListener) @@ -191,7 +192,6 @@ class ChatMessageContentData( Log.w("[Content] File path already set [$filePath] using it (auto download that failed probably)") } - downloadEnabled.value = false if (!chatMessage.downloadContent(content)) { Log.e("[Content] Failed to start content download!") } @@ -303,9 +303,6 @@ class ChatMessageContentData( } isGenericFile.value = !isPdf.value!! && !isAudio.value!! && !isVideo.value!! && !isImage.value!! && !isVoiceRecording.value!! && !isConferenceSchedule.value!! - downloadEnabled.value = !chatMessage.isFileTransferInProgress - downloadProgressInt.value = 0 - downloadProgressString.value = "0%" } private fun parseConferenceInvite(content: Content) { diff --git a/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageData.kt b/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageData.kt index 0aeee9fad..7105456c1 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageData.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageData.kt @@ -38,8 +38,6 @@ class ChatMessageData(val chatMessage: ChatMessage) : GenericContactData(chatMes val sendInProgress = MutableLiveData() - val transferInProgress = MutableLiveData() - val showImdn = MutableLiveData() val imdnIcon = MutableLiveData() @@ -157,18 +155,21 @@ class ChatMessageData(val chatMessage: ChatMessage) : GenericContactData(chatMes } private fun updateChatMessageState(state: ChatMessage.State) { - transferInProgress.value = state == ChatMessage.State.FileTransferInProgress - - sendInProgress.value = state == ChatMessage.State.InProgress || state == ChatMessage.State.FileTransferInProgress + sendInProgress.value = when (state) { + ChatMessage.State.InProgress, ChatMessage.State.FileTransferInProgress, ChatMessage.State.FileTransferDone -> true + else -> false + } showImdn.value = when (state) { - ChatMessage.State.DeliveredToUser, ChatMessage.State.Displayed, ChatMessage.State.NotDelivered -> true + ChatMessage.State.DeliveredToUser, ChatMessage.State.Displayed, + ChatMessage.State.NotDelivered, ChatMessage.State.FileTransferError -> true else -> false } imdnIcon.value = when (state) { ChatMessage.State.DeliveredToUser -> R.drawable.chat_delivered ChatMessage.State.Displayed -> R.drawable.chat_read + ChatMessage.State.FileTransferError, ChatMessage.State.NotDelivered -> R.drawable.chat_error else -> R.drawable.chat_error } diff --git a/app/src/main/res/layout/chat_message_content_cell.xml b/app/src/main/res/layout/chat_message_content_cell.xml index 710f84ed1..921b6ebac 100644 --- a/app/src/main/res/layout/chat_message_content_cell.xml +++ b/app/src/main/res/layout/chat_message_content_cell.xml @@ -90,20 +90,20 @@ + android:text="@{data.fileTransferProgressInt + `%`, default=`50%`}"/> diff --git a/app/src/main/res/layout/chat_message_list_cell.xml b/app/src/main/res/layout/chat_message_list_cell.xml index 0662dfac1..26afd8fd2 100644 --- a/app/src/main/res/layout/chat_message_list_cell.xml +++ b/app/src/main/res/layout/chat_message_list_cell.xml @@ -206,7 +206,7 @@ android:layout_alignBottom="@id/background" android:layout_toRightOf="@id/background" android:indeterminateTint="?attr/accentColor" - android:visibility="@{data.transferInProgress || data.sendInProgress ? View.VISIBLE : View.GONE}" /> + android:visibility="@{data.sendInProgress ? View.VISIBLE : View.GONE}" />