Rename Button to ButtonType to avoid confusion.

This commit is contained in:
Benoit Marty 2025-12-31 09:51:38 +01:00
parent 4f44edf6af
commit 4c0b02ce23
6 changed files with 53 additions and 53 deletions

View file

@ -71,21 +71,21 @@ fun TimelineItemVoiceView(
val a11y = stringResource(CommonStrings.common_voice_message) val a11y = stringResource(CommonStrings.common_voice_message)
val a11yActionLabel = stringResource( val a11yActionLabel = stringResource(
when (state.button) { when (state.buttonType) {
VoiceMessageState.Button.Play -> CommonStrings.a11y_play VoiceMessageState.ButtonType.Play -> CommonStrings.a11y_play
VoiceMessageState.Button.Pause -> CommonStrings.a11y_pause VoiceMessageState.ButtonType.Pause -> CommonStrings.a11y_pause
VoiceMessageState.Button.Downloading -> CommonStrings.common_downloading VoiceMessageState.ButtonType.Downloading -> CommonStrings.common_downloading
VoiceMessageState.Button.Retry -> CommonStrings.action_retry VoiceMessageState.ButtonType.Retry -> CommonStrings.action_retry
VoiceMessageState.Button.Disabled -> CommonStrings.error_unknown VoiceMessageState.ButtonType.Disabled -> CommonStrings.error_unknown
} }
) )
Row( Row(
modifier = modifier modifier = modifier
.clearAndSetSemantics { .clearAndSetSemantics {
contentDescription = a11y contentDescription = a11y
if (state.button == VoiceMessageState.Button.Disabled) { if (state.buttonType == VoiceMessageState.ButtonType.Disabled) {
disabled() disabled()
} else if (state.button in listOf(VoiceMessageState.Button.Play, VoiceMessageState.Button.Pause)) { } else if (state.buttonType in listOf(VoiceMessageState.ButtonType.Play, VoiceMessageState.ButtonType.Pause)) {
onClick(label = a11yActionLabel) { onClick(label = a11yActionLabel) {
playPause() playPause()
true true
@ -103,12 +103,12 @@ fun TimelineItemVoiceView(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
if (!isTalkbackActive()) { if (!isTalkbackActive()) {
when (state.button) { when (state.buttonType) {
VoiceMessageState.Button.Play -> PlayButton(onClick = ::playPause) VoiceMessageState.ButtonType.Play -> PlayButton(onClick = ::playPause)
VoiceMessageState.Button.Pause -> PauseButton(onClick = ::playPause) VoiceMessageState.ButtonType.Pause -> PauseButton(onClick = ::playPause)
VoiceMessageState.Button.Downloading -> ProgressButton() VoiceMessageState.ButtonType.Downloading -> ProgressButton()
VoiceMessageState.Button.Retry -> RetryButton(onClick = ::playPause) VoiceMessageState.ButtonType.Retry -> RetryButton(onClick = ::playPause)
VoiceMessageState.Button.Disabled -> PlayButton(onClick = {}, enabled = false) VoiceMessageState.ButtonType.Disabled -> PlayButton(onClick = {}, enabled = false)
} }
} }
Spacer(Modifier.width(8.dp)) Spacer(Modifier.width(8.dp))

View file

@ -114,12 +114,12 @@ private fun VoiceInfoRow(
.padding(start = 12.dp, end = 36.dp, top = 8.dp, bottom = 8.dp), .padding(start = 12.dp, end = 36.dp, top = 8.dp, bottom = 8.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
when (state.button) { when (state.buttonType) {
VoiceMessageState.Button.Play -> PlayButton(onClick = ::playPause) VoiceMessageState.ButtonType.Play -> PlayButton(onClick = ::playPause)
VoiceMessageState.Button.Pause -> PauseButton(onClick = ::playPause) VoiceMessageState.ButtonType.Pause -> PauseButton(onClick = ::playPause)
VoiceMessageState.Button.Downloading -> ProgressButton() VoiceMessageState.ButtonType.Downloading -> ProgressButton()
VoiceMessageState.Button.Retry -> RetryButton(onClick = ::playPause) VoiceMessageState.ButtonType.Retry -> RetryButton(onClick = ::playPause)
VoiceMessageState.Button.Disabled -> PlayButton(onClick = {}, enabled = false) VoiceMessageState.ButtonType.Disabled -> PlayButton(onClick = {}, enabled = false)
} }
Spacer(Modifier.width(8.dp)) Spacer(Modifier.width(8.dp))
Column( Column(

View file

@ -9,14 +9,14 @@
package io.element.android.libraries.voiceplayer.api package io.element.android.libraries.voiceplayer.api
data class VoiceMessageState( data class VoiceMessageState(
val button: Button, val buttonType: ButtonType,
val progress: Float, val progress: Float,
val time: String, val time: String,
val showCursor: Boolean, val showCursor: Boolean,
val playbackSpeed: Float, val playbackSpeed: Float,
val eventSink: (event: VoiceMessageEvent) -> Unit, val eventSink: (event: VoiceMessageEvent) -> Unit,
) { ) {
enum class Button { enum class ButtonType {
Play, Play,
Pause, Pause,
Downloading, Downloading,

View file

@ -14,29 +14,29 @@ open class VoiceMessageStateProvider : PreviewParameterProvider<VoiceMessageStat
override val values: Sequence<VoiceMessageState> override val values: Sequence<VoiceMessageState>
get() = sequenceOf( get() = sequenceOf(
aVoiceMessageState( aVoiceMessageState(
VoiceMessageState.Button.Downloading, VoiceMessageState.ButtonType.Downloading,
progress = 0f, progress = 0f,
time = "0:00", time = "0:00",
), ),
aVoiceMessageState( aVoiceMessageState(
VoiceMessageState.Button.Retry, VoiceMessageState.ButtonType.Retry,
progress = 0.5f, progress = 0.5f,
time = "0:01", time = "0:01",
), ),
aVoiceMessageState( aVoiceMessageState(
VoiceMessageState.Button.Play, VoiceMessageState.ButtonType.Play,
progress = 1f, progress = 1f,
time = "1:00", time = "1:00",
showCursor = true, showCursor = true,
), ),
aVoiceMessageState( aVoiceMessageState(
VoiceMessageState.Button.Pause, VoiceMessageState.ButtonType.Pause,
progress = 0.2f, progress = 0.2f,
time = "10:00", time = "10:00",
showCursor = true, showCursor = true,
), ),
aVoiceMessageState( aVoiceMessageState(
VoiceMessageState.Button.Disabled, VoiceMessageState.ButtonType.Disabled,
progress = 0.2f, progress = 0.2f,
time = "30:00", time = "30:00",
), ),
@ -44,13 +44,13 @@ open class VoiceMessageStateProvider : PreviewParameterProvider<VoiceMessageStat
} }
fun aVoiceMessageState( fun aVoiceMessageState(
button: VoiceMessageState.Button = VoiceMessageState.Button.Play, buttonType: VoiceMessageState.ButtonType = VoiceMessageState.ButtonType.Play,
progress: Float = 0f, progress: Float = 0f,
time: String = "1:00", time: String = "1:00",
showCursor: Boolean = false, showCursor: Boolean = false,
playbackSpeed: Float = 1.0f, playbackSpeed: Float = 1.0f,
) = VoiceMessageState( ) = VoiceMessageState(
button = button, buttonType = buttonType,
progress = progress, progress = progress,
time = time, time = time,
showCursor = showCursor, showCursor = showCursor,

View file

@ -53,14 +53,14 @@ class VoiceMessagePresenter(
) )
) )
val button by remember { val buttonType by remember {
derivedStateOf { derivedStateOf {
when { when {
eventId == null -> VoiceMessageState.Button.Disabled eventId == null -> VoiceMessageState.ButtonType.Disabled
playerState.isPlaying -> VoiceMessageState.Button.Pause playerState.isPlaying -> VoiceMessageState.ButtonType.Pause
play.value is AsyncData.Loading -> VoiceMessageState.Button.Downloading play.value is AsyncData.Loading -> VoiceMessageState.ButtonType.Downloading
play.value is AsyncData.Failure -> VoiceMessageState.Button.Retry play.value is AsyncData.Failure -> VoiceMessageState.ButtonType.Retry
else -> VoiceMessageState.Button.Play else -> VoiceMessageState.ButtonType.Play
} }
} }
} }
@ -122,7 +122,7 @@ class VoiceMessagePresenter(
} }
return VoiceMessageState( return VoiceMessageState(
button = button, buttonType = buttonType,
progress = progress, progress = progress,
time = time, time = time,
showCursor = showCursor, showCursor = showCursor,

View file

@ -31,7 +31,7 @@ class VoiceMessagePresenterTest {
val presenter = createVoiceMessagePresenter() val presenter = createVoiceMessagePresenter()
presenter.test { presenter.test {
awaitItem().let { awaitItem().let {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Play) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Play)
assertThat(it.progress).isEqualTo(0f) assertThat(it.progress).isEqualTo(0f)
assertThat(it.time).isEqualTo("1:01") assertThat(it.time).isEqualTo("1:01")
} }
@ -46,7 +46,7 @@ class VoiceMessagePresenterTest {
) )
presenter.test { presenter.test {
val initialState = awaitItem().also { val initialState = awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Play) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Play)
assertThat(it.progress).isEqualTo(0f) assertThat(it.progress).isEqualTo(0f)
assertThat(it.time).isEqualTo("0:02") assertThat(it.time).isEqualTo("0:02")
} }
@ -54,17 +54,17 @@ class VoiceMessagePresenterTest {
initialState.eventSink(VoiceMessageEvent.PlayPause) initialState.eventSink(VoiceMessageEvent.PlayPause)
awaitItem().also { awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Downloading) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Downloading)
assertThat(it.progress).isEqualTo(0f) assertThat(it.progress).isEqualTo(0f)
assertThat(it.time).isEqualTo("0:02") assertThat(it.time).isEqualTo("0:02")
} }
awaitItem().also { awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Downloading) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Downloading)
assertThat(it.progress).isEqualTo(0f) assertThat(it.progress).isEqualTo(0f)
assertThat(it.time).isEqualTo("0:00") assertThat(it.time).isEqualTo("0:00")
} }
awaitItem().also { awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Pause) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Pause)
assertThat(it.progress).isEqualTo(0.5f) assertThat(it.progress).isEqualTo(0.5f)
assertThat(it.time).isEqualTo("0:01") assertThat(it.time).isEqualTo("0:01")
} }
@ -82,7 +82,7 @@ class VoiceMessagePresenterTest {
) )
presenter.test { presenter.test {
val initialState = awaitItem().also { val initialState = awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Play) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Play)
assertThat(it.progress).isEqualTo(0f) assertThat(it.progress).isEqualTo(0f)
assertThat(it.time).isEqualTo("0:02") assertThat(it.time).isEqualTo("0:02")
} }
@ -90,12 +90,12 @@ class VoiceMessagePresenterTest {
initialState.eventSink(VoiceMessageEvent.PlayPause) initialState.eventSink(VoiceMessageEvent.PlayPause)
awaitItem().also { awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Downloading) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Downloading)
assertThat(it.progress).isEqualTo(0f) assertThat(it.progress).isEqualTo(0f)
assertThat(it.time).isEqualTo("0:02") assertThat(it.time).isEqualTo("0:02")
} }
awaitItem().also { awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Retry) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Retry)
assertThat(it.progress).isEqualTo(0f) assertThat(it.progress).isEqualTo(0f)
assertThat(it.time).isEqualTo("0:02") assertThat(it.time).isEqualTo("0:02")
} }
@ -116,7 +116,7 @@ class VoiceMessagePresenterTest {
) )
presenter.test { presenter.test {
val initialState = awaitItem().also { val initialState = awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Play) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Play)
assertThat(it.progress).isEqualTo(0f) assertThat(it.progress).isEqualTo(0f)
assertThat(it.time).isEqualTo("0:02") assertThat(it.time).isEqualTo("0:02")
} }
@ -125,14 +125,14 @@ class VoiceMessagePresenterTest {
skipItems(2) // skip downloading states skipItems(2) // skip downloading states
val playingState = awaitItem().also { val playingState = awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Pause) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Pause)
assertThat(it.progress).isEqualTo(0.5f) assertThat(it.progress).isEqualTo(0.5f)
assertThat(it.time).isEqualTo("0:01") assertThat(it.time).isEqualTo("0:01")
} }
playingState.eventSink(VoiceMessageEvent.PlayPause) playingState.eventSink(VoiceMessageEvent.PlayPause)
awaitItem().also { awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Play) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Play)
assertThat(it.progress).isEqualTo(0.5f) assertThat(it.progress).isEqualTo(0.5f)
assertThat(it.time).isEqualTo("0:01") assertThat(it.time).isEqualTo("0:01")
} }
@ -146,7 +146,7 @@ class VoiceMessagePresenterTest {
) )
presenter.test { presenter.test {
awaitItem().also { awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Disabled) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Disabled)
assertThat(it.progress).isEqualTo(0f) assertThat(it.progress).isEqualTo(0f)
assertThat(it.time).isEqualTo("1:01") assertThat(it.time).isEqualTo("1:01")
} }
@ -161,7 +161,7 @@ class VoiceMessagePresenterTest {
) )
presenter.test { presenter.test {
val initialState = awaitItem().also { val initialState = awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Play) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Play)
assertThat(it.progress).isEqualTo(0f) assertThat(it.progress).isEqualTo(0f)
assertThat(it.time).isEqualTo("0:10") assertThat(it.time).isEqualTo("0:10")
} }
@ -169,7 +169,7 @@ class VoiceMessagePresenterTest {
initialState.eventSink(VoiceMessageEvent.Seek(0.5f)) initialState.eventSink(VoiceMessageEvent.Seek(0.5f))
awaitItem().also { awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Play) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Play)
assertThat(it.progress).isEqualTo(0.5f) assertThat(it.progress).isEqualTo(0.5f)
assertThat(it.time).isEqualTo("0:05") assertThat(it.time).isEqualTo("0:05")
} }
@ -183,7 +183,7 @@ class VoiceMessagePresenterTest {
) )
presenter.test { presenter.test {
val initialState = awaitItem().also { val initialState = awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Play) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Play)
assertThat(it.progress).isEqualTo(0f) assertThat(it.progress).isEqualTo(0f)
assertThat(it.time).isEqualTo("0:10") assertThat(it.time).isEqualTo("0:10")
} }
@ -193,14 +193,14 @@ class VoiceMessagePresenterTest {
skipItems(2) // skip downloading states skipItems(2) // skip downloading states
awaitItem().also { awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Pause) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Pause)
assertThat(it.progress).isEqualTo(0.1f) assertThat(it.progress).isEqualTo(0.1f)
assertThat(it.time).isEqualTo("0:01") assertThat(it.time).isEqualTo("0:01")
it.eventSink(VoiceMessageEvent.Seek(0.5f)) it.eventSink(VoiceMessageEvent.Seek(0.5f))
} }
awaitItem().also { awaitItem().also {
assertThat(it.button).isEqualTo(VoiceMessageState.Button.Pause) assertThat(it.buttonType).isEqualTo(VoiceMessageState.ButtonType.Pause)
assertThat(it.progress).isEqualTo(0.5f) assertThat(it.progress).isEqualTo(0.5f)
assertThat(it.time).isEqualTo("0:05") assertThat(it.time).isEqualTo("0:05")
} }