diff --git a/app/src/main/java/com/github/libretube/extensions/Player.kt b/app/src/main/java/com/github/libretube/extensions/Player.kt new file mode 100644 index 000000000..f30a5cb7f --- /dev/null +++ b/app/src/main/java/com/github/libretube/extensions/Player.kt @@ -0,0 +1,19 @@ +package com.github.libretube.extensions + +import androidx.media3.common.Player + +fun Player.togglePlayPauseState() { + when { + playerError != null -> { + prepare() + play() + } + + !isPlaying && playbackState == Player.STATE_ENDED -> { + seekTo(0) + } + + !isPlaying && !isLoading -> play() + else -> pause() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index a4ef27539..ef31eb0b2 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -79,6 +79,7 @@ import com.github.libretube.extensions.serializableExtra import com.github.libretube.extensions.setMetadata import com.github.libretube.extensions.toID import com.github.libretube.extensions.toastFromMainDispatcher +import com.github.libretube.extensions.togglePlayPauseState import com.github.libretube.extensions.updateParameters import com.github.libretube.helpers.BackgroundHelper import com.github.libretube.helpers.ImageHelper @@ -391,14 +392,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions { playerBinding.autoPlay.isVisible = true binding.playImageView.setOnClickListener { - when { - !exoPlayer.isPlaying && exoPlayer.playbackState == Player.STATE_ENDED -> { - exoPlayer.seekTo(0) - } - - !exoPlayer.isPlaying -> exoPlayer.play() - else -> exoPlayer.pause() - } + exoPlayer.togglePlayPauseState() } // video description and chapters toggle diff --git a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt index 560f6061b..d8925f5bd 100644 --- a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt +++ b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt @@ -41,6 +41,7 @@ import com.github.libretube.extensions.dpToPx import com.github.libretube.extensions.normalize import com.github.libretube.extensions.round import com.github.libretube.extensions.seekBy +import com.github.libretube.extensions.togglePlayPauseState import com.github.libretube.helpers.AudioHelper import com.github.libretube.helpers.BrightnessHelper import com.github.libretube.helpers.PlayerHelper @@ -156,14 +157,7 @@ open class CustomExoPlayerView( } binding.playPauseBTN.setOnClickListener { - when { - player?.isPlaying == false && player?.playbackState == Player.STATE_ENDED -> { - player?.seekTo(0) - } - - player?.isPlaying == false && player?.isLoading == false -> player?.play() - else -> player?.pause() - } + player?.togglePlayPauseState() } player?.addListener(object : Player.Listener { diff --git a/app/src/main/java/com/github/libretube/util/NowPlayingNotification.kt b/app/src/main/java/com/github/libretube/util/NowPlayingNotification.kt index 99c2529bf..d9fddac0f 100644 --- a/app/src/main/java/com/github/libretube/util/NowPlayingNotification.kt +++ b/app/src/main/java/com/github/libretube/util/NowPlayingNotification.kt @@ -299,6 +299,7 @@ class NowPlayingNotification( } PLAY_PAUSE -> { + if (player.playerError != null) player.prepare() if (player.isPlaying) player.pause() else player.play() }