Skip to content

Commit 7504a51

Browse files
committed
Extract methods to toggle play and seek the player
1 parent e42846a commit 7504a51

File tree

3 files changed

+39
-30
lines changed

3 files changed

+39
-30
lines changed

libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/audio/MediaAudioView.kt

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@ import io.element.android.libraries.mediaviewer.impl.local.LocalMediaViewState
6969
import io.element.android.libraries.mediaviewer.impl.local.PlayableState
7070
import io.element.android.libraries.mediaviewer.impl.local.player.MediaPlayerControllerState
7171
import io.element.android.libraries.mediaviewer.impl.local.player.MediaPlayerControllerView
72+
import io.element.android.libraries.mediaviewer.impl.local.player.seekToEnsurePlaying
7273
import io.element.android.libraries.mediaviewer.impl.local.player.rememberExoPlayer
74+
import io.element.android.libraries.mediaviewer.impl.local.player.togglePlay
7375
import io.element.android.libraries.mediaviewer.impl.local.rememberLocalMediaViewState
7476
import kotlinx.collections.immutable.toPersistentList
7577
import kotlinx.coroutines.delay
@@ -241,10 +243,7 @@ private fun ExoPlayerMediaAudioView(
241243
showCursor = true,
242244
waveform = waveform.toPersistentList(),
243245
onSeek = {
244-
if (exoPlayer.isPlaying.not()) {
245-
exoPlayer.play()
246-
}
247-
exoPlayer.seekTo((it * exoPlayer.duration).toLong())
246+
exoPlayer.seekToEnsurePlaying((it * exoPlayer.duration).toLong())
248247
},
249248
seekEnabled = true,
250249
)
@@ -279,21 +278,10 @@ private fun ExoPlayerMediaAudioView(
279278
MediaPlayerControllerView(
280279
state = mediaPlayerControllerState,
281280
onTogglePlay = {
282-
if (exoPlayer.isPlaying) {
283-
exoPlayer.pause()
284-
} else {
285-
if (exoPlayer.playbackState == Player.STATE_ENDED) {
286-
exoPlayer.seekTo(0)
287-
} else {
288-
exoPlayer.play()
289-
}
290-
}
281+
exoPlayer.togglePlay()
291282
},
292283
onSeekChange = {
293-
if (exoPlayer.isPlaying.not()) {
294-
exoPlayer.play()
295-
}
296-
exoPlayer.seekTo(it.toLong())
284+
exoPlayer.seekToEnsurePlaying(it.toLong())
297285
},
298286
onToggleMute = {
299287
// Cannot happen for audio files
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright 2024 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only
5+
* Please see LICENSE in the repository root for full details.
6+
*/
7+
8+
package io.element.android.libraries.mediaviewer.impl.local.player
9+
10+
import androidx.media3.common.Player
11+
import androidx.media3.exoplayer.ExoPlayer
12+
13+
fun ExoPlayer.togglePlay() {
14+
if (isPlaying) {
15+
pause()
16+
} else {
17+
if (playbackState == Player.STATE_ENDED) {
18+
seekTo(0)
19+
} else {
20+
play()
21+
}
22+
}
23+
}
24+
25+
fun ExoPlayer.seekToEnsurePlaying(positionMs: Long) {
26+
if (isPlaying.not()) {
27+
play()
28+
}
29+
seekTo(positionMs)
30+
}

libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/video/MediaVideoView.kt

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ import io.element.android.libraries.mediaviewer.impl.local.LocalMediaViewState
4747
import io.element.android.libraries.mediaviewer.impl.local.PlayableState
4848
import io.element.android.libraries.mediaviewer.impl.local.player.MediaPlayerControllerState
4949
import io.element.android.libraries.mediaviewer.impl.local.player.MediaPlayerControllerView
50+
import io.element.android.libraries.mediaviewer.impl.local.player.seekToEnsurePlaying
5051
import io.element.android.libraries.mediaviewer.impl.local.player.rememberExoPlayer
52+
import io.element.android.libraries.mediaviewer.impl.local.player.togglePlay
5153
import io.element.android.libraries.mediaviewer.impl.local.rememberLocalMediaViewState
5254
import kotlinx.coroutines.delay
5355
import kotlin.time.Duration.Companion.seconds
@@ -208,22 +210,11 @@ private fun ExoPlayerMediaVideoView(
208210
state = mediaPlayerControllerState,
209211
onTogglePlay = {
210212
autoHideController++
211-
if (exoPlayer.isPlaying) {
212-
exoPlayer.pause()
213-
} else {
214-
if (exoPlayer.playbackState == Player.STATE_ENDED) {
215-
exoPlayer.seekTo(0)
216-
} else {
217-
exoPlayer.play()
218-
}
219-
}
213+
exoPlayer.togglePlay()
220214
},
221215
onSeekChange = {
222216
autoHideController++
223-
if (exoPlayer.isPlaying.not()) {
224-
exoPlayer.play()
225-
}
226-
exoPlayer.seekTo(it.toLong())
217+
exoPlayer.seekToEnsurePlaying(it.toLong())
227218
},
228219
onToggleMute = {
229220
autoHideController++

0 commit comments

Comments
 (0)