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.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 {
|
|||||||
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 {
|
|||||||
&& 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 {
|
|||||||
} 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;
|
|||||||
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 {
|
|||||||
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 {
|
|||||||
&& 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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user