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
This commit is contained in:
insun 2020-09-02 10:46:24 +01:00 committed by Oliver Woodman
parent be103ac553
commit f31411b128

View file

@ -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<SettingViewHolder> {
private final String[] mainTexts;
private final String[] subTexts;