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 b44c89105..0171e6623 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 @@ -317,7 +317,7 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { BackgroundHelper.stopBackgroundPlay(requireContext()) } - val playPauseClickListner = View.OnClickListener { + binding.playImageView.setOnClickListener { if (!exoPlayer.isPlaying) { // start or go on playing if (exoPlayer.playbackState == Player.STATE_ENDED) { @@ -330,8 +330,6 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { exoPlayer.pause() } } - playerBinding.playPauseBTN.setOnClickListener(playPauseClickListner) - binding.playImageView.setOnClickListener(playPauseClickListner) // video description and chapters toggle binding.playerTitleLayout.setOnClickListener { @@ -976,15 +974,12 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { if (exoPlayer.isPlaying) { // video is playing binding.playImageView.setImageResource(R.drawable.ic_pause) - playerBinding.playPauseBTN.setImageResource(R.drawable.ic_pause) } else if (exoPlayer.playbackState == Player.STATE_ENDED) { // video has finished binding.playImageView.setImageResource(R.drawable.ic_restart) - playerBinding.playPauseBTN.setImageResource(R.drawable.ic_restart) } else { // player in any other state binding.playImageView.setImageResource(R.drawable.ic_play) - playerBinding.playPauseBTN.setImageResource(R.drawable.ic_play) } } 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 6ae88e956..3794a9158 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 @@ -125,6 +125,47 @@ internal class CustomExoPlayerView( "zoom" -> AspectRatioFrameLayout.RESIZE_MODE_ZOOM else -> AspectRatioFrameLayout.RESIZE_MODE_FIT } + + binding.playPauseBTN.setOnClickListener { + if (player?.isPlaying == false) { + // start or go on playing + if (player?.playbackState == Player.STATE_ENDED) { + // restart video if finished + player?.seekTo(0) + } + player?.play() + } else { + // pause the video + player?.pause() + } + } + + player?.addListener(object : Player.Listener { + override fun onEvents(player: Player, events: Player.Events) { + super.onEvents(player, events) + if (events.containsAny( + Player.EVENT_PLAYBACK_STATE_CHANGED, + Player.EVENT_IS_PLAYING_CHANGED, + Player.EVENT_PLAY_WHEN_READY_CHANGED + ) + ) { + updatePlayPauseButton() + } + } + }) + } + + private fun updatePlayPauseButton() { + if (player?.isPlaying == true) { + // video is playing + binding.playPauseBTN.setImageResource(R.drawable.ic_pause) + } else if (player?.playbackState == Player.STATE_ENDED) { + // video has finished + binding.playPauseBTN.setImageResource(R.drawable.ic_restart) + } else { + // player in any other state + binding.playPauseBTN.setImageResource(R.drawable.ic_play) + } } override fun hideController() {