Skip to content

Commit 0e379c5

Browse files
committed
Media: show audio in LocalMediaView (as a file for now...)
1 parent e9a34eb commit 0e379c5

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import io.element.android.features.messages.impl.media.viewer.MediaViewerNode
4141
import io.element.android.features.messages.impl.report.ReportMessageNode
4242
import io.element.android.features.messages.impl.timeline.debug.EventDebugInfoNode
4343
import io.element.android.features.messages.impl.timeline.model.TimelineItem
44+
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemAudioContent
4445
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemFileContent
4546
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemImageContent
4647
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLocationContent
@@ -224,6 +225,20 @@ class MessagesFlowNode @AssistedInject constructor(
224225
)
225226
backstack.push(navTarget)
226227
}
228+
is TimelineItemAudioContent -> {
229+
val mediaSource = event.content.audioSource
230+
val navTarget = NavTarget.MediaViewer(
231+
mediaInfo = MediaInfo(
232+
name = event.content.body,
233+
mimeType = event.content.mimeType,
234+
formattedFileSize = event.content.formattedFileSize,
235+
fileExtension = event.content.fileExtension
236+
),
237+
mediaSource = mediaSource,
238+
thumbnailSource = null,
239+
)
240+
backstack.push(navTarget)
241+
}
227242
is TimelineItemLocationContent -> {
228243
val navTarget = NavTarget.LocationViewer(
229244
location = event.content.location,

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/local/LocalMediaView.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import androidx.compose.foundation.layout.size
3232
import androidx.compose.foundation.shape.CircleShape
3333
import androidx.compose.material.icons.Icons
3434
import androidx.compose.material.icons.outlined.Attachment
35+
import androidx.compose.material.icons.outlined.GraphicEq
3536
import androidx.compose.material3.MaterialTheme
3637
import androidx.compose.runtime.Composable
3738
import androidx.compose.runtime.LaunchedEffect
@@ -47,7 +48,6 @@ import androidx.compose.ui.res.painterResource
4748
import androidx.compose.ui.text.style.TextAlign
4849
import androidx.compose.ui.text.style.TextOverflow
4950
import androidx.compose.ui.unit.dp
50-
import androidx.compose.ui.unit.sp
5151
import androidx.compose.ui.viewinterop.AndroidView
5252
import androidx.lifecycle.Lifecycle
5353
import androidx.media3.common.MediaItem
@@ -59,7 +59,9 @@ import io.element.android.features.messages.impl.media.helper.formatFileExtensio
5959
import io.element.android.features.messages.impl.media.local.exoplayer.ExoPlayerWrapper
6060
import io.element.android.features.messages.impl.media.local.pdf.PdfViewer
6161
import io.element.android.features.messages.impl.media.local.pdf.rememberPdfViewerState
62+
import io.element.android.libraries.core.bool.orFalse
6263
import io.element.android.libraries.core.mimetype.MimeTypes
64+
import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeAudio
6365
import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeImage
6466
import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeVideo
6567
import io.element.android.libraries.designsystem.R
@@ -103,6 +105,7 @@ fun LocalMediaView(
103105
zoomableState = zoomableState,
104106
modifier = modifier
105107
)
108+
//TODO handle audio with exoplayer
106109
else -> MediaFileView(
107110
localMediaViewState = localMediaViewState,
108111
uri = localMedia?.uri,
@@ -215,6 +218,7 @@ fun MediaFileView(
215218
info: MediaInfo?,
216219
modifier: Modifier = Modifier,
217220
) {
221+
val isAudio = info?.mimeType.isMimeTypeAudio().orFalse()
218222
localMediaViewState.isReady = uri != null
219223
Box(modifier = modifier.padding(horizontal = 8.dp), contentAlignment = Alignment.Center) {
220224
Column(horizontalAlignment = Alignment.CenterHorizontally) {
@@ -226,12 +230,12 @@ fun MediaFileView(
226230
contentAlignment = Alignment.Center,
227231
) {
228232
Icon(
229-
imageVector = Icons.Outlined.Attachment,
233+
imageVector = if (isAudio) Icons.Outlined.GraphicEq else Icons.Outlined.Attachment,
230234
contentDescription = null,
231235
tint = MaterialTheme.colorScheme.background,
232236
modifier = Modifier
233237
.size(32.dp)
234-
.rotate(-45f),
238+
.rotate(if (isAudio) 0f else -45f),
235239
)
236240
}
237241
if (info != null) {

0 commit comments

Comments
 (0)