diff --git a/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/timeline/voicemessages/composer/VoiceMessageComposerStateProvider.kt b/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/timeline/voicemessages/composer/VoiceMessageComposerStateProvider.kt index b418b08726..aaba414b79 100644 --- a/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/timeline/voicemessages/composer/VoiceMessageComposerStateProvider.kt +++ b/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/timeline/voicemessages/composer/VoiceMessageComposerStateProvider.kt @@ -8,15 +8,15 @@ package io.element.android.features.messages.api.timeline.voicemessages.composer import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.libraries.designsystem.components.media.WaveFormSamples import io.element.android.libraries.designsystem.components.media.createFakeWaveform import io.element.android.libraries.textcomposer.model.VoiceMessageState -import kotlinx.collections.immutable.toImmutableList import kotlin.time.Duration.Companion.seconds open class VoiceMessageComposerStateProvider : PreviewParameterProvider { override val values: Sequence get() = sequenceOf( - aVoiceMessageComposerState(voiceMessageState = VoiceMessageState.Recording(duration = 61.seconds, levels = aWaveformLevels)), + aVoiceMessageComposerState(voiceMessageState = VoiceMessageState.Recording(duration = 61.seconds, levels = WaveFormSamples.allRangeWaveForm)), ) } @@ -41,5 +41,3 @@ fun aVoiceMessagePreviewState() = VoiceMessageState.Preview( time = 10.seconds, waveform = createFakeWaveform(), ) - -internal var aWaveformLevels = List(100) { it.toFloat() / 100 }.toImmutableList() diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveFormSamples.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveFormSamples.kt new file mode 100644 index 0000000000..7185dba072 --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveFormSamples.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.designsystem.components.media + +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toImmutableList + +object WaveFormSamples { + val allRangeWaveForm = List(100) { it.toFloat() / 100 }.toImmutableList() + + val realisticWaveForm = persistentListOf( + 0.000f, 0.000f, 0.000f, 0.003f, 0.354f, + 0.353f, 0.365f, 0.790f, 0.787f, 0.167f, + 0.333f, 0.975f, 0.000f, 0.102f, 0.003f, + 0.531f, 0.584f, 0.317f, 0.140f, 0.475f, + 0.496f, 0.561f, 0.042f, 0.263f, 0.169f, + 0.829f, 0.349f, 0.010f, 0.000f, 0.000f, + 1.000f, 0.334f, 0.321f, 0.011f, 0.000f, + 0.000f, 0.003f, + ) +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveformPlaybackView.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveformPlaybackView.kt index 5fe722d447..7a3c273084 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveformPlaybackView.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveformPlaybackView.kt @@ -187,14 +187,14 @@ internal fun WaveformPlaybackViewPreview() = ElementPreview { showCursor = false, playbackProgress = 0.5f, onSeek = {}, - waveform = aWaveForm().toImmutableList(), + waveform = WaveFormSamples.realisticWaveForm, ) WaveformPlaybackView( modifier = Modifier.height(34.dp), showCursor = true, playbackProgress = 0.5f, onSeek = {}, - waveform = List(1024) { it / 1024f }.toImmutableList(), + waveform = WaveFormSamples.allRangeWaveForm, ) } } @@ -217,45 +217,3 @@ private fun ImmutableList.normalisedData(maxSamplesCount: Int): Immutable return result.toImmutableList() } - -fun aWaveForm(): List { - return listOf( - 0.000f, - 0.000f, - 0.000f, - 0.003f, - 0.354f, - 0.353f, - 0.365f, - 0.790f, - 0.787f, - 0.167f, - 0.333f, - 0.975f, - 0.000f, - 0.102f, - 0.003f, - 0.531f, - 0.584f, - 0.317f, - 0.140f, - 0.475f, - 0.496f, - 0.561f, - 0.042f, - 0.263f, - 0.169f, - 0.829f, - 0.349f, - 0.010f, - 0.000f, - 0.000f, - 1.000f, - 0.334f, - 0.321f, - 0.011f, - 0.000f, - 0.000f, - 0.003f, - ) -} diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryStateProvider.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryStateProvider.kt index aedea1eb75..22a312bb05 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryStateProvider.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryStateProvider.kt @@ -9,7 +9,7 @@ package io.element.android.libraries.mediaviewer.impl.gallery import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.architecture.AsyncData -import io.element.android.libraries.designsystem.components.media.aWaveForm +import io.element.android.libraries.designsystem.components.media.WaveFormSamples import io.element.android.libraries.matrix.api.core.UniqueId import io.element.android.libraries.mediaviewer.impl.details.MediaBottomSheetState import io.element.android.libraries.mediaviewer.impl.details.aMediaDetailsBottomSheetState @@ -71,7 +71,7 @@ open class MediaGalleryStateProvider : PreviewParameterProvider { get() = sequenceOf( anAudioMediaInfo(), anAudioMediaInfo( - waveForm = aWaveForm(), + waveForm = WaveFormSamples.realisticWaveForm, ), ) } diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/model/MediaItemFactories.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/model/MediaItemFactories.kt index b04973322a..6854954601 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/model/MediaItemFactories.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/model/MediaItemFactories.kt @@ -7,7 +7,7 @@ package io.element.android.libraries.mediaviewer.impl.model -import io.element.android.libraries.designsystem.components.media.aWaveForm +import io.element.android.libraries.designsystem.components.media.WaveFormSamples import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UniqueId import io.element.android.libraries.matrix.api.core.UserId @@ -91,7 +91,7 @@ fun aMediaItemVoice( filename: String = "filename.ogg", caption: String? = null, duration: String? = "1:23", - waveform: List = aWaveForm(), + waveform: List = WaveFormSamples.realisticWaveForm, ): MediaItem.Voice { return MediaItem.Voice( id = id, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerStateProvider.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerStateProvider.kt index 05a55b4e5f..09e71c7fc4 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerStateProvider.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerStateProvider.kt @@ -11,7 +11,7 @@ import android.net.Uri import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.architecture.AsyncData -import io.element.android.libraries.designsystem.components.media.aWaveForm +import io.element.android.libraries.designsystem.components.media.WaveFormSamples import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.api.timeline.Timeline @@ -138,7 +138,7 @@ open class MediaViewerStateProvider : PreviewParameterProvider mediaBottomSheetState = aMediaDeleteConfirmationState(), ), anAudioMediaInfo( - waveForm = aWaveForm(), + waveForm = WaveFormSamples.realisticWaveForm, ).let { aMediaViewerState( listOf(