From f31411b1287201f635a62db547b0d4d08075524a Mon Sep 17 00:00:00 2001 From: insun Date: Wed, 2 Sep 2020 10:46:24 +0100 Subject: [PATCH] Revise Play/Pause button toggling logic This CL fixes two bugs: - Play/pause button toggling looked inconsistent when playback fails. When player state goes into idle, play button should dispatch playwhenready again. - Clicking play button at the end of stream should restart playback. But previously it changed playwhenready state and so playback has been paused. This CL fix it. PiperOrigin-RevId: 329675660 --- .../ui/StyledPlayerControlView.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java index 91151b5347..153f8c04ca 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java @@ -1646,7 +1646,7 @@ public class StyledPlayerControlView extends FrameLayout { switch (keyCode) { case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: case KeyEvent.KEYCODE_HEADSETHOOK: - controlDispatcher.dispatchSetPlayWhenReady(player, !player.getPlayWhenReady()); + dispatchPlayPause(player); break; case KeyEvent.KEYCODE_MEDIA_PLAY: controlDispatcher.dispatchSetPlayWhenReady(player, true); @@ -1815,14 +1815,7 @@ public class StyledPlayerControlView extends FrameLayout { } else if (rewindButton == view) { controlDispatcher.dispatchRewind(player); } else if (playPauseButton == view) { - if (player.getPlaybackState() == Player.STATE_IDLE) { - if (playbackPreparer != null) { - playbackPreparer.preparePlayback(); - } - } else if (player.getPlaybackState() == Player.STATE_ENDED) { - seekTo(player, player.getCurrentWindowIndex(), C.TIME_UNSET); - } - controlDispatcher.dispatchSetPlayWhenReady(player, !player.getPlayWhenReady()); + dispatchPlayPause(player); } else if (repeatToggleButton == view) { controlDispatcher.dispatchSetRepeatMode( player, RepeatModeUtil.getNextRepeatMode(player.getRepeatMode(), repeatToggleModes)); @@ -1838,6 +1831,20 @@ public class StyledPlayerControlView extends FrameLayout { } } + private void dispatchPlayPause(Player player) { + if (player.getPlaybackState() == Player.STATE_IDLE) { + if (playbackPreparer != null) { + playbackPreparer.preparePlayback(); + } + controlDispatcher.dispatchSetPlayWhenReady(player, true); + } else if (player.getPlaybackState() == Player.STATE_ENDED) { + seekTo(player, player.getCurrentWindowIndex(), C.TIME_UNSET); + controlDispatcher.dispatchSetPlayWhenReady(player, true); + } else { + controlDispatcher.dispatchSetPlayWhenReady(player, !player.getPlayWhenReady()); + } + } + private class SettingsAdapter extends RecyclerView.Adapter { private final String[] mainTexts; private final String[] subTexts;