diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java index cea6bcecc6..9c33fa9092 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java @@ -38,6 +38,7 @@ import com.google.android.exoplayer2.DefaultControlDispatcher; import com.google.android.exoplayer2.ExoPlayerLibraryInfo; import com.google.android.exoplayer2.PlaybackPreparer; import com.google.android.exoplayer2.Player; +import com.google.android.exoplayer2.Player.State; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.RepeatModeUtil; @@ -1211,13 +1212,13 @@ public class PlayerControlView 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); + dispatchPlay(player); break; case KeyEvent.KEYCODE_MEDIA_PAUSE: - controlDispatcher.dispatchSetPlayWhenReady(player, false); + dispatchPause(player); break; case KeyEvent.KEYCODE_MEDIA_NEXT: controlDispatcher.dispatchNext(player); @@ -1240,6 +1241,31 @@ public class PlayerControlView extends FrameLayout { && player.getPlayWhenReady(); } + private void dispatchPlayPause(Player player) { + @State int state = player.getPlaybackState(); + if (state == Player.STATE_IDLE || state == Player.STATE_ENDED || !player.getPlayWhenReady()) { + dispatchPlay(player); + } else { + dispatchPause(player); + } + } + + private void dispatchPlay(Player player) { + @State int state = player.getPlaybackState(); + if (state == Player.STATE_IDLE) { + if (playbackPreparer != null) { + playbackPreparer.preparePlayback(); + } + } else if (state == Player.STATE_ENDED) { + seekTo(player, player.getCurrentWindowIndex(), C.TIME_UNSET); + } + controlDispatcher.dispatchSetPlayWhenReady(player, /* playWhenReady= */ true); + } + + private void dispatchPause(Player player) { + controlDispatcher.dispatchSetPlayWhenReady(player, /* playWhenReady= */ false); + } + @SuppressLint("InlinedApi") private static boolean isHandledMediaKey(int keyCode) { return keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD @@ -1355,16 +1381,9 @@ public class PlayerControlView extends FrameLayout { } else if (rewindButton == view) { controlDispatcher.dispatchRewind(player); } else if (playButton == 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, true); + dispatchPlay(player); } else if (pauseButton == view) { - controlDispatcher.dispatchSetPlayWhenReady(player, false); + dispatchPause(player); } else if (repeatToggleButton == view) { controlDispatcher.dispatchSetRepeatMode( player, RepeatModeUtil.getNextRepeatMode(player.getRepeatMode(), repeatToggleModes)); 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 153f8c04ca..ab27f74579 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 @@ -45,6 +45,7 @@ import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.PlaybackPreparer; import com.google.android.exoplayer2.Player; +import com.google.android.exoplayer2.Player.State; import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.source.TrackGroup; @@ -1649,10 +1650,10 @@ public class StyledPlayerControlView extends FrameLayout { dispatchPlayPause(player); break; case KeyEvent.KEYCODE_MEDIA_PLAY: - controlDispatcher.dispatchSetPlayWhenReady(player, true); + dispatchPlay(player); break; case KeyEvent.KEYCODE_MEDIA_PAUSE: - controlDispatcher.dispatchSetPlayWhenReady(player, false); + dispatchPause(player); break; case KeyEvent.KEYCODE_MEDIA_NEXT: controlDispatcher.dispatchNext(player); @@ -1675,6 +1676,31 @@ public class StyledPlayerControlView extends FrameLayout { && player.getPlayWhenReady(); } + private void dispatchPlayPause(Player player) { + @State int state = player.getPlaybackState(); + if (state == Player.STATE_IDLE || state == Player.STATE_ENDED || !player.getPlayWhenReady()) { + dispatchPlay(player); + } else { + dispatchPause(player); + } + } + + private void dispatchPlay(Player player) { + @State int state = player.getPlaybackState(); + if (state == Player.STATE_IDLE) { + if (playbackPreparer != null) { + playbackPreparer.preparePlayback(); + } + } else if (state == Player.STATE_ENDED) { + seekTo(player, player.getCurrentWindowIndex(), C.TIME_UNSET); + } + controlDispatcher.dispatchSetPlayWhenReady(player, /* playWhenReady= */ true); + } + + private void dispatchPause(Player player) { + controlDispatcher.dispatchSetPlayWhenReady(player, /* playWhenReady= */ false); + } + @SuppressLint("InlinedApi") private static boolean isHandledMediaKey(int keyCode) { return keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD @@ -1831,20 +1857,6 @@ 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;