Centralize WaveForm samples.
This commit is contained in:
parent
58dc3c7aed
commit
e9f80d917a
7 changed files with 38 additions and 56 deletions
|
|
@ -8,15 +8,15 @@
|
||||||
package io.element.android.features.messages.api.timeline.voicemessages.composer
|
package io.element.android.features.messages.api.timeline.voicemessages.composer
|
||||||
|
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
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.designsystem.components.media.createFakeWaveform
|
||||||
import io.element.android.libraries.textcomposer.model.VoiceMessageState
|
import io.element.android.libraries.textcomposer.model.VoiceMessageState
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
open class VoiceMessageComposerStateProvider : PreviewParameterProvider<VoiceMessageComposerState> {
|
open class VoiceMessageComposerStateProvider : PreviewParameterProvider<VoiceMessageComposerState> {
|
||||||
override val values: Sequence<VoiceMessageComposerState>
|
override val values: Sequence<VoiceMessageComposerState>
|
||||||
get() = sequenceOf(
|
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,
|
time = 10.seconds,
|
||||||
waveform = createFakeWaveform(),
|
waveform = createFakeWaveform(),
|
||||||
)
|
)
|
||||||
|
|
||||||
internal var aWaveformLevels = List(100) { it.toFloat() / 100 }.toImmutableList()
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
@ -187,14 +187,14 @@ internal fun WaveformPlaybackViewPreview() = ElementPreview {
|
||||||
showCursor = false,
|
showCursor = false,
|
||||||
playbackProgress = 0.5f,
|
playbackProgress = 0.5f,
|
||||||
onSeek = {},
|
onSeek = {},
|
||||||
waveform = aWaveForm().toImmutableList(),
|
waveform = WaveFormSamples.realisticWaveForm,
|
||||||
)
|
)
|
||||||
WaveformPlaybackView(
|
WaveformPlaybackView(
|
||||||
modifier = Modifier.height(34.dp),
|
modifier = Modifier.height(34.dp),
|
||||||
showCursor = true,
|
showCursor = true,
|
||||||
playbackProgress = 0.5f,
|
playbackProgress = 0.5f,
|
||||||
onSeek = {},
|
onSeek = {},
|
||||||
waveform = List(1024) { it / 1024f }.toImmutableList(),
|
waveform = WaveFormSamples.allRangeWaveForm,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -217,45 +217,3 @@ private fun ImmutableList<Float>.normalisedData(maxSamplesCount: Int): Immutable
|
||||||
|
|
||||||
return result.toImmutableList()
|
return result.toImmutableList()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun aWaveForm(): List<Float> {
|
|
||||||
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,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ package io.element.android.libraries.mediaviewer.impl.gallery
|
||||||
|
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
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.matrix.api.core.UniqueId
|
||||||
import io.element.android.libraries.mediaviewer.impl.details.MediaBottomSheetState
|
import io.element.android.libraries.mediaviewer.impl.details.MediaBottomSheetState
|
||||||
import io.element.android.libraries.mediaviewer.impl.details.aMediaDetailsBottomSheetState
|
import io.element.android.libraries.mediaviewer.impl.details.aMediaDetailsBottomSheetState
|
||||||
|
|
@ -71,7 +71,7 @@ open class MediaGalleryStateProvider : PreviewParameterProvider<MediaGalleryStat
|
||||||
aMediaItemAudio(id = UniqueId("4")),
|
aMediaItemAudio(id = UniqueId("4")),
|
||||||
aMediaItemVoice(
|
aMediaItemVoice(
|
||||||
id = UniqueId("5"),
|
id = UniqueId("5"),
|
||||||
waveform = aWaveForm(),
|
waveform = WaveFormSamples.realisticWaveForm,
|
||||||
),
|
),
|
||||||
aMediaItemLoadingIndicator(),
|
aMediaItemLoadingIndicator(),
|
||||||
).toImmutableList()
|
).toImmutableList()
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
package io.element.android.libraries.mediaviewer.impl.local.audio
|
package io.element.android.libraries.mediaviewer.impl.local.audio
|
||||||
|
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.designsystem.components.media.aWaveForm
|
import io.element.android.libraries.designsystem.components.media.WaveFormSamples
|
||||||
import io.element.android.libraries.mediaviewer.api.MediaInfo
|
import io.element.android.libraries.mediaviewer.api.MediaInfo
|
||||||
import io.element.android.libraries.mediaviewer.api.anAudioMediaInfo
|
import io.element.android.libraries.mediaviewer.api.anAudioMediaInfo
|
||||||
|
|
||||||
|
|
@ -17,7 +17,7 @@ open class MediaInfoAudioProvider : PreviewParameterProvider<MediaInfo> {
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
anAudioMediaInfo(),
|
anAudioMediaInfo(),
|
||||||
anAudioMediaInfo(
|
anAudioMediaInfo(
|
||||||
waveForm = aWaveForm(),
|
waveForm = WaveFormSamples.realisticWaveForm,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
package io.element.android.libraries.mediaviewer.impl.model
|
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.EventId
|
||||||
import io.element.android.libraries.matrix.api.core.UniqueId
|
import io.element.android.libraries.matrix.api.core.UniqueId
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
|
|
@ -91,7 +91,7 @@ fun aMediaItemVoice(
|
||||||
filename: String = "filename.ogg",
|
filename: String = "filename.ogg",
|
||||||
caption: String? = null,
|
caption: String? = null,
|
||||||
duration: String? = "1:23",
|
duration: String? = "1:23",
|
||||||
waveform: List<Float> = aWaveForm(),
|
waveform: List<Float> = WaveFormSamples.realisticWaveForm,
|
||||||
): MediaItem.Voice {
|
): MediaItem.Voice {
|
||||||
return MediaItem.Voice(
|
return MediaItem.Voice(
|
||||||
id = id,
|
id = id,
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import android.net.Uri
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
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.core.EventId
|
||||||
import io.element.android.libraries.matrix.api.media.MediaSource
|
import io.element.android.libraries.matrix.api.media.MediaSource
|
||||||
import io.element.android.libraries.matrix.api.timeline.Timeline
|
import io.element.android.libraries.matrix.api.timeline.Timeline
|
||||||
|
|
@ -138,7 +138,7 @@ open class MediaViewerStateProvider : PreviewParameterProvider<MediaViewerState>
|
||||||
mediaBottomSheetState = aMediaDeleteConfirmationState(),
|
mediaBottomSheetState = aMediaDeleteConfirmationState(),
|
||||||
),
|
),
|
||||||
anAudioMediaInfo(
|
anAudioMediaInfo(
|
||||||
waveForm = aWaveForm(),
|
waveForm = WaveFormSamples.realisticWaveForm,
|
||||||
).let {
|
).let {
|
||||||
aMediaViewerState(
|
aMediaViewerState(
|
||||||
listOf(
|
listOf(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue