Commit b5a4dc8f by olly Committed by Oliver Woodman

Fix dispatch of play when in IDLE or ENDED

PiperOrigin-RevId: 329722282
parent 8e5336c5
...@@ -38,6 +38,7 @@ import com.google.android.exoplayer2.DefaultControlDispatcher; ...@@ -38,6 +38,7 @@ import com.google.android.exoplayer2.DefaultControlDispatcher;
import com.google.android.exoplayer2.ExoPlayerLibraryInfo; import com.google.android.exoplayer2.ExoPlayerLibraryInfo;
import com.google.android.exoplayer2.PlaybackPreparer; import com.google.android.exoplayer2.PlaybackPreparer;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Player.State;
import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.RepeatModeUtil; import com.google.android.exoplayer2.util.RepeatModeUtil;
...@@ -1211,13 +1212,13 @@ public class PlayerControlView extends FrameLayout { ...@@ -1211,13 +1212,13 @@ public class PlayerControlView extends FrameLayout {
switch (keyCode) { switch (keyCode) {
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
case KeyEvent.KEYCODE_HEADSETHOOK: case KeyEvent.KEYCODE_HEADSETHOOK:
controlDispatcher.dispatchSetPlayWhenReady(player, !player.getPlayWhenReady()); dispatchPlayPause(player);
break; break;
case KeyEvent.KEYCODE_MEDIA_PLAY: case KeyEvent.KEYCODE_MEDIA_PLAY:
controlDispatcher.dispatchSetPlayWhenReady(player, true); dispatchPlay(player);
break; break;
case KeyEvent.KEYCODE_MEDIA_PAUSE: case KeyEvent.KEYCODE_MEDIA_PAUSE:
controlDispatcher.dispatchSetPlayWhenReady(player, false); dispatchPause(player);
break; break;
case KeyEvent.KEYCODE_MEDIA_NEXT: case KeyEvent.KEYCODE_MEDIA_NEXT:
controlDispatcher.dispatchNext(player); controlDispatcher.dispatchNext(player);
...@@ -1240,6 +1241,31 @@ public class PlayerControlView extends FrameLayout { ...@@ -1240,6 +1241,31 @@ public class PlayerControlView extends FrameLayout {
&& player.getPlayWhenReady(); && 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") @SuppressLint("InlinedApi")
private static boolean isHandledMediaKey(int keyCode) { private static boolean isHandledMediaKey(int keyCode) {
return keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD return keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD
...@@ -1355,16 +1381,9 @@ public class PlayerControlView extends FrameLayout { ...@@ -1355,16 +1381,9 @@ public class PlayerControlView extends FrameLayout {
} else if (rewindButton == view) { } else if (rewindButton == view) {
controlDispatcher.dispatchRewind(player); controlDispatcher.dispatchRewind(player);
} else if (playButton == view) { } else if (playButton == view) {
if (player.getPlaybackState() == Player.STATE_IDLE) { dispatchPlay(player);
if (playbackPreparer != null) {
playbackPreparer.preparePlayback();
}
} else if (player.getPlaybackState() == Player.STATE_ENDED) {
seekTo(player, player.getCurrentWindowIndex(), C.TIME_UNSET);
}
controlDispatcher.dispatchSetPlayWhenReady(player, true);
} else if (pauseButton == view) { } else if (pauseButton == view) {
controlDispatcher.dispatchSetPlayWhenReady(player, false); dispatchPause(player);
} else if (repeatToggleButton == view) { } else if (repeatToggleButton == view) {
controlDispatcher.dispatchSetRepeatMode( controlDispatcher.dispatchSetRepeatMode(
player, RepeatModeUtil.getNextRepeatMode(player.getRepeatMode(), repeatToggleModes)); player, RepeatModeUtil.getNextRepeatMode(player.getRepeatMode(), repeatToggleModes));
......
...@@ -45,6 +45,7 @@ import com.google.android.exoplayer2.Format; ...@@ -45,6 +45,7 @@ import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.PlaybackPreparer; import com.google.android.exoplayer2.PlaybackPreparer;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Player.State;
import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.RendererCapabilities;
import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.source.TrackGroup; import com.google.android.exoplayer2.source.TrackGroup;
...@@ -1649,10 +1650,10 @@ public class StyledPlayerControlView extends FrameLayout { ...@@ -1649,10 +1650,10 @@ public class StyledPlayerControlView extends FrameLayout {
dispatchPlayPause(player); dispatchPlayPause(player);
break; break;
case KeyEvent.KEYCODE_MEDIA_PLAY: case KeyEvent.KEYCODE_MEDIA_PLAY:
controlDispatcher.dispatchSetPlayWhenReady(player, true); dispatchPlay(player);
break; break;
case KeyEvent.KEYCODE_MEDIA_PAUSE: case KeyEvent.KEYCODE_MEDIA_PAUSE:
controlDispatcher.dispatchSetPlayWhenReady(player, false); dispatchPause(player);
break; break;
case KeyEvent.KEYCODE_MEDIA_NEXT: case KeyEvent.KEYCODE_MEDIA_NEXT:
controlDispatcher.dispatchNext(player); controlDispatcher.dispatchNext(player);
...@@ -1675,6 +1676,31 @@ public class StyledPlayerControlView extends FrameLayout { ...@@ -1675,6 +1676,31 @@ public class StyledPlayerControlView extends FrameLayout {
&& player.getPlayWhenReady(); && 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") @SuppressLint("InlinedApi")
private static boolean isHandledMediaKey(int keyCode) { private static boolean isHandledMediaKey(int keyCode) {
return keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD return keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD
...@@ -1831,20 +1857,6 @@ public class StyledPlayerControlView extends FrameLayout { ...@@ -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<SettingViewHolder> { private class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolder> {
private final String[] mainTexts; private final String[] mainTexts;
private final String[] subTexts; private final String[] subTexts;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment