diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemFileView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemFileView.kt index 159d4c9d03..36aaa27be3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemFileView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemFileView.kt @@ -18,12 +18,12 @@ package io.element.android.features.messages.impl.timeline.components.event import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Attachment import androidx.compose.material.icons.outlined.Attachment import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -35,6 +35,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import io.element.android.features.messages.impl.timeline.model.event.TimelineItemFileContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemFileContentProvider import io.element.android.libraries.designsystem.preview.ElementPreviewDark @@ -49,7 +50,6 @@ fun TimelineItemFileView( ) { Row( modifier = modifier, - verticalAlignment = Alignment.CenterVertically ) { Box( modifier = Modifier @@ -64,12 +64,18 @@ fun TimelineItemFileView( modifier = Modifier.size(16.dp).rotate(-45f), ) } - Text( - text = content.body, - modifier = Modifier.padding(horizontal = 8.dp), - maxLines = 1, - overflow = TextOverflow.Ellipsis, - ) + Column(modifier = Modifier.padding(horizontal = 8.dp),) { + Text( + text = content.body, + maxLines = 2, + fontSize = 16.sp, + overflow = TextOverflow.Ellipsis + ) + Text( + text = content.fileExtensionAndSize, + color = MaterialTheme.colorScheme.secondary, + ) + } } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt index 21a7a11e31..cc8082be62 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt @@ -24,6 +24,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.features.messages.impl.timeline.model.event.TimelineItemTextContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemUnknownContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVideoContent +import io.element.android.features.messages.impl.timeline.util.FileSizeFormatter import io.element.android.features.messages.impl.timeline.util.toHtmlDocument import io.element.android.libraries.matrix.api.timeline.item.event.EmoteMessageType import io.element.android.libraries.matrix.api.timeline.item.event.FileMessageType @@ -34,7 +35,9 @@ import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageTy import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType import javax.inject.Inject -class TimelineItemContentMessageFactory @Inject constructor() { +class TimelineItemContentMessageFactory @Inject constructor( + private val fileSizeFormatter: FileSizeFormatter +) { fun create(content: MessageContent): TimelineItemEventContent { return when (val messageType = content.type) { @@ -74,7 +77,9 @@ class TimelineItemContentMessageFactory @Inject constructor() { thumbnailSource = messageType.info?.thumbnailSource, fileSource = messageType.source, mimeType = messageType.info?.mimetype, - size = messageType.info?.size, + formattedFileSize = messageType.info?.size?.let { + fileSizeFormatter.format(it) + }, ) is NoticeMessageType -> TimelineItemNoticeContent( body = messageType.body, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContent.kt index d1fb7f0942..9307cf8a67 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContent.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContent.kt @@ -22,8 +22,17 @@ data class TimelineItemFileContent( val body: String, val fileSource: MediaSource, val thumbnailSource: MediaSource?, - val size: Long?, + val formattedFileSize: String?, val mimeType: String?, ) : TimelineItemEventContent { override val type: String = "TimelineItemFileContent" + + private val fileExtension = body.substringAfterLast('.', "").uppercase() + val fileExtensionAndSize = buildString { + append(fileExtension) + if (formattedFileSize != null) { + append(' ') + append("($formattedFileSize)") + } + } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContentProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContentProvider.kt index 1dfd87ce38..08125ea777 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContentProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContentProvider.kt @@ -25,7 +25,7 @@ open class TimelineItemFileContentProvider : PreviewParameterProvider