Fix dispatch of play when in IDLE or ENDED
PiperOrigin-RevId: 329722282
This commit is contained in:
parent
8e5336c59e
commit
b5a4dc8f36
@ -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));
|
||||
|
@ -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<SettingViewHolder> {
|
||||
private final String[] mainTexts;
|
||||
private final String[] subTexts;
|
||||
|
Loading…
x
Reference in New Issue
Block a user