From a8aa3be08a1f96199f8a548d3f5379b20696fcdf Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 15 Nov 2023 11:53:39 +0100 Subject: [PATCH] Added layout for not downloaded file --- .../ui/main/chat/model/ChatMessageModel.kt | 23 +++++++++++------ .../linphone/ui/main/chat/model/FileModel.kt | 25 +++++++++++++------ .../SendMessageInConversationViewModel.kt | 2 +- .../layout/chat_bubble_content_grid_cell.xml | 4 +-- .../main/res/layout/chat_bubble_outgoing.xml | 2 +- 5 files changed, 37 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/ChatMessageModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/ChatMessageModel.kt index 97d11495d..e86f6f3b0 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/ChatMessageModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/ChatMessageModel.kt @@ -53,7 +53,6 @@ import org.linphone.ui.main.contacts.model.ContactAvatarModel import org.linphone.utils.AppUtils import org.linphone.utils.AudioRouteUtils import org.linphone.utils.Event -import org.linphone.utils.FileUtils import org.linphone.utils.LinphoneUtils import org.linphone.utils.PatternClickableSpan import org.linphone.utils.SpannableClickedListener @@ -199,7 +198,7 @@ class ChatMessageModel @WorkerThread constructor( ) when (content.type) { "image", "video" -> { - val fileModel = FileModel(path, "") { file -> + val fileModel = FileModel(path, content.fileSize.toLong()) { file -> onContentClicked?.invoke(file) } filesPath.add(fileModel) @@ -223,10 +222,7 @@ class ChatMessageModel @WorkerThread constructor( displayableContentFound = true } else -> { - val size = FileUtils.bytesToDisplayableSize( - content.fileSize.toLong() - ) - val fileModel = FileModel(path, size) { file -> + val fileModel = FileModel(path, content.fileSize.toLong()) { file -> onContentClicked?.invoke(file) } filesPath.add(fileModel) @@ -235,8 +231,19 @@ class ChatMessageModel @WorkerThread constructor( } } } else { - Log.i("$TAG Content path is empty : have to download it first") - // TODO: download it + Log.e("$TAG No path found for File Content!") + } + } else if (content.isFileTransfer) { + val name = content.name ?: "" + if (name.isNotEmpty()) { + val fileModel = FileModel(name, content.fileSize.toLong(), true) { file -> + onContentClicked?.invoke(file) + } + filesPath.add(fileModel) + + displayableContentFound = true + } else { + Log.e("$TAG No name found for FileTransfer Content!") } } else { Log.i("$TAG Content is not a File") diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/FileModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/FileModel.kt index 529d72f3d..651a70593 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/FileModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/FileModel.kt @@ -9,7 +9,8 @@ import org.linphone.utils.FileUtils class FileModel @AnyThread constructor( val file: String, - val fileSize: String, + fileSize: Long, + val isWaitingToBeDownloaded: Boolean = false, private val onClicked: ((file: String) -> Unit)? = null ) { companion object { @@ -18,6 +19,8 @@ class FileModel @AnyThread constructor( val fileName: String = FileUtils.getNameFromFilePath(file) + val formattedFileSize = MutableLiveData() + val path = MutableLiveData() val mimeType: FileUtils.MimeType @@ -30,14 +33,22 @@ class FileModel @AnyThread constructor( init { path.postValue(file) + formattedFileSize.postValue(FileUtils.bytesToDisplayableSize(fileSize)) - val extension = FileUtils.getExtensionFromFileName(file) - isPdf = extension == "pdf" + if (!isWaitingToBeDownloaded) { + val extension = FileUtils.getExtensionFromFileName(file) + isPdf = extension == "pdf" - val mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) - mimeType = FileUtils.getMimeType(mime) - isImage = mimeType == FileUtils.MimeType.Image - isVideoPreview = mimeType == FileUtils.MimeType.Video + val mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) + mimeType = FileUtils.getMimeType(mime) + isImage = mimeType == FileUtils.MimeType.Image + isVideoPreview = mimeType == FileUtils.MimeType.Video + } else { + mimeType = FileUtils.MimeType.Unknown + isPdf = false + isImage = false + isVideoPreview = false + } } @UiThread diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt index f5892ae8a..ae54b8a42 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt @@ -300,7 +300,7 @@ class SendMessageInConversationViewModel @UiThread constructor() : ViewModel() { fun addAttachment(file: String) { val list = arrayListOf() list.addAll(attachments.value.orEmpty()) - val model = FileModel(file, "") { file -> + val model = FileModel(file, 0) { file -> removeAttachment(file) } list.add(model) diff --git a/app/src/main/res/layout/chat_bubble_content_grid_cell.xml b/app/src/main/res/layout/chat_bubble_content_grid_cell.xml index 3c99c7a07..dc81052ab 100644 --- a/app/src/main/res/layout/chat_bubble_content_grid_cell.xml +++ b/app/src/main/res/layout/chat_bubble_content_grid_cell.xml @@ -52,7 +52,7 @@ android:layout_height="@dimen/chat_bubble_grid_image_size" android:adjustViewBounds="true" android:padding="18dp" - android:src="@{model.isPdf ? @drawable/file_pdf : @drawable/file, default=@drawable/file_pdf}" + android:src="@{model.isWaitingToBeDownloaded ? @drawable/download_simple : model.isPdf ? @drawable/file_pdf : @drawable/file, default=@drawable/file_pdf}" android:background="@drawable/shape_squircle_main2_200_left" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" @@ -93,7 +93,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="16dp" - android:text="@{model.fileSize, default=`42 kb`}" + android:text="@{model.formattedFileSize, default=`42 kb`}" android:textColor="@color/gray_main2_600" android:textSize="12sp" android:maxLines="1" diff --git a/app/src/main/res/layout/chat_bubble_outgoing.xml b/app/src/main/res/layout/chat_bubble_outgoing.xml index ba59b12a3..c53c6c3ef 100644 --- a/app/src/main/res/layout/chat_bubble_outgoing.xml +++ b/app/src/main/res/layout/chat_bubble_outgoing.xml @@ -110,7 +110,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:onLongClick="@{onLongClickListener}" - android:visibility="@{model.filesList.size() >= 2 ? View.VISIBLE : View.GONE, default=gone}" + android:visibility="@{model.filesList.size() >= 2 || (model.filesList.size() >= 1 && model.firstImage.path.length() == 0) ? View.VISIBLE : View.GONE, default=gone}" app:alignItems="center" app:flexWrap="wrap" app:justifyContent="@{model.outgoing ? JustifyContent.FLEX_END : JustifyContent.FLEX_START}"