Migrate usage of Player.EventListener to Player.Listener

PiperOrigin-RevId: 381837274
This commit is contained in:
olly 2021-06-28 12:46:55 +01:00 committed by Oliver Woodman
parent ea99c3fa94
commit 7aaba1ffe5
12 changed files with 98 additions and 113 deletions

View File

@ -19,11 +19,11 @@ import android.content.Context;
import android.view.KeyEvent;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Player.DiscontinuityReason;
import com.google.android.exoplayer2.Player.EventListener;
import com.google.android.exoplayer2.Player.TimelineChangeReason;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.Timeline;
@ -40,7 +40,7 @@ import com.google.android.gms.cast.framework.CastContext;
import java.util.ArrayList;
/** Manages players and an internal media queue for the demo app. */
/* package */ class PlayerManager implements EventListener, SessionAvailabilityListener {
/* package */ class PlayerManager implements Player.Listener, SessionAvailabilityListener {
/** Listener for events. */
interface Listener {
@ -221,7 +221,7 @@ import java.util.ArrayList;
exoPlayer.release();
}
// Player.EventListener implementation.
// Player.Listener implementation.
@Override
public void onPlaybackStateChanged(@Player.State int playbackState) {
@ -229,7 +229,10 @@ import java.util.ArrayList;
}
@Override
public void onPositionDiscontinuity(@DiscontinuityReason int reason) {
public void onPositionDiscontinuity(
Player.PositionInfo oldPosition,
Player.PositionInfo newPosition,
@DiscontinuityReason int reason) {
updateCurrentItemIndex();
}
@ -242,6 +245,7 @@ import java.util.ArrayList;
public void onTracksChanged(
@NonNull TrackGroupArray trackGroups, @NonNull TrackSelectionArray trackSelections) {
if (currentPlayer == exoPlayer && trackGroups != lastSeenTrackGroupArray) {
@Nullable
MappingTrackSelector.MappedTrackInfo mappedTrackInfo =
trackSelector.getCurrentMappedTrackInfo();
if (mappedTrackInfo != null) {

View File

@ -412,7 +412,7 @@ public class PlayerActivity extends AppCompatActivity
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
}
private class PlayerEventListener implements Player.EventListener {
private class PlayerEventListener implements Player.Listener {
@Override
public void onPlaybackStateChanged(@Player.State int playbackState) {

View File

@ -447,7 +447,7 @@ import java.util.Map;
}
}
// Player.EventListener implementation.
// Player.Listener implementation.
@Override
public void onTimelineChanged(Timeline timeline, @Player.TimelineChangeReason int reason) {

View File

@ -37,6 +37,7 @@ import com.google.android.exoplayer2.Player.TimelineChangeReason;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.util.ErrorMessageProvider;
import com.google.android.exoplayer2.util.Util;
import com.google.android.exoplayer2.video.VideoSize;
/** Leanback {@code PlayerAdapter} implementation for {@link Player}. */
public final class LeanbackPlayerAdapter extends PlayerAdapter implements Runnable {
@ -247,7 +248,7 @@ public final class LeanbackPlayerAdapter extends PlayerAdapter implements Runnab
setVideoSurface(null);
}
// Player.EventListener implementation.
// Player.Listener implementation.
@Override
public void onPlaybackStateChanged(@Player.State int playbackState) {
@ -290,21 +291,13 @@ public final class LeanbackPlayerAdapter extends PlayerAdapter implements Runnab
callback.onBufferedPositionChanged(LeanbackPlayerAdapter.this);
}
// VideoListener implementation.
@Override
public void onVideoSizeChanged(
int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
public void onVideoSizeChanged(VideoSize videoSize) {
// There's no way to pass pixelWidthHeightRatio to leanback, so we scale the width that we
// pass to take it into account. This is necessary to ensure that leanback uses the correct
// aspect ratio when playing content with non-square pixels.
int scaledWidth = Math.round(width * pixelWidthHeightRatio);
getCallback().onVideoSizeChanged(LeanbackPlayerAdapter.this, scaledWidth, height);
}
@Override
public void onRenderedFirstFrame() {
// Do nothing.
int scaledWidth = Math.round(videoSize.width * videoSize.pixelWidthHeightRatio);
getCallback().onVideoSizeChanged(LeanbackPlayerAdapter.this, scaledWidth, videoSize.height);
}
}
}

View File

@ -1095,7 +1095,7 @@ public class SessionPlayerConnectorTest {
.runOnMainSync(
() ->
simpleExoPlayer.addListener(
new Player.EventListener() {
new Player.Listener() {
@Override
public void onPlayWhenReadyChanged(boolean playWhenReady, int reason) {
if (playWhenReady) {

View File

@ -564,8 +564,6 @@ import java.util.List;
private final class ComponentListener implements Player.Listener {
// Player.EventListener implementation.
@Override
public void onPlayWhenReadyChanged(boolean playWhenReady, int reason) {
updateSessionPlayerState();
@ -616,8 +614,6 @@ import java.util.List;
listener.onPlaylistChanged();
}
// AudioListener implementation.
@Override
public void onAudioAttributesChanged(AudioAttributes audioAttributes) {
listener.onAudioAttributesChanged(Utils.getAudioAttributesCompat(audioAttributes));

View File

@ -182,21 +182,6 @@ public class AnalyticsCollector
}
}
// MetadataOutput events.
/**
* Called when there is metadata associated with current playback time.
*
* @param metadata The metadata.
*/
public final void onMetadata(Metadata metadata) {
EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime();
sendEvent(
eventTime,
AnalyticsListener.EVENT_METADATA,
listener -> listener.onMetadata(eventTime, metadata));
}
// AudioRendererEventListener implementation.
@SuppressWarnings("deprecation") // Calling deprecated listener method.
@ -574,9 +559,9 @@ public class AnalyticsCollector
listener -> listener.onDownstreamFormatChanged(eventTime, mediaLoadData));
}
// Player.EventListener implementation.
// Player.Listener implementation.
// TODO: Use Player.EventListener.onEvents to know when a set of simultaneous callbacks finished.
// TODO: Use Player.Listener.onEvents to know when a set of simultaneous callbacks finished.
// This helps to assign exactly the same EventTime to all of them instead of having slightly
// different real times.
@ -710,7 +695,7 @@ public class AnalyticsCollector
@Override
public final void onPlayerError(PlaybackException error) {
EventTime eventTime = null;
@Nullable EventTime eventTime = null;
if (error instanceof ExoPlaybackException) {
ExoPlaybackException exoError = (ExoPlaybackException) error;
if (exoError.mediaPeriodId != null) {
@ -793,6 +778,15 @@ public class AnalyticsCollector
listener -> listener.onPlaylistMediaMetadataChanged(eventTime, playlistMediaMetadata));
}
@Override
public final void onMetadata(Metadata metadata) {
EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime();
sendEvent(
eventTime,
AnalyticsListener.EVENT_METADATA,
listener -> listener.onMetadata(eventTime, metadata));
}
@SuppressWarnings("deprecation") // Implementing and calling deprecated listener method.
@Override
public final void onSeekProcessed() {
@ -801,7 +795,7 @@ public class AnalyticsCollector
eventTime, /* eventFlag= */ C.INDEX_UNSET, listener -> listener.onSeekProcessed(eventTime));
}
// BandwidthMeter.Listener implementation.
// BandwidthMeter.EventListener implementation.
@Override
public final void onBandwidthSample(int elapsedMs, long bytes, long bitrate) {
@ -812,7 +806,7 @@ public class AnalyticsCollector
listener -> listener.onBandwidthEstimate(eventTime, elapsedMs, bytes, bitrate));
}
// DefaultDrmSessionManager.EventListener implementation.
// DrmSessionEventListener implementation.
@Override
@SuppressWarnings("deprecation") // Calls deprecated listener method.
@ -874,6 +868,8 @@ public class AnalyticsCollector
listener -> listener.onDrmSessionReleased(eventTime));
}
// Internal methods.
/**
* Sends an event to registered listeners.
*
@ -936,8 +932,6 @@ public class AnalyticsCollector
player.getTotalBufferedDuration());
}
// Internal methods.
private EventTime generateEventTime(@Nullable MediaPeriodId mediaPeriodId) {
checkNotNull(player);
@Nullable

View File

@ -1278,30 +1278,7 @@ public class PlayerControlView extends FrameLayout {
}
private final class ComponentListener
implements Player.EventListener, TimeBar.OnScrubListener, OnClickListener {
@Override
public void onScrubStart(TimeBar timeBar, long position) {
scrubbing = true;
if (positionView != null) {
positionView.setText(Util.getStringForTime(formatBuilder, formatter, position));
}
}
@Override
public void onScrubMove(TimeBar timeBar, long position) {
if (positionView != null) {
positionView.setText(Util.getStringForTime(formatBuilder, formatter, position));
}
}
@Override
public void onScrubStop(TimeBar timeBar, long position, boolean canceled) {
scrubbing = false;
if (!canceled && player != null) {
seekToTimeBarPosition(player, position);
}
}
implements Player.Listener, TimeBar.OnScrubListener, OnClickListener {
@Override
public void onEvents(Player player, Events events) {
@ -1330,6 +1307,29 @@ public class PlayerControlView extends FrameLayout {
}
}
@Override
public void onScrubStart(TimeBar timeBar, long position) {
scrubbing = true;
if (positionView != null) {
positionView.setText(Util.getStringForTime(formatBuilder, formatter, position));
}
}
@Override
public void onScrubMove(TimeBar timeBar, long position) {
if (positionView != null) {
positionView.setText(Util.getStringForTime(formatBuilder, formatter, position));
}
}
@Override
public void onScrubStop(TimeBar timeBar, long position, boolean canceled) {
scrubbing = false;
if (!canceled && player != null) {
seekToTimeBarPosition(player, position);
}
}
@Override
public void onClick(View view) {
Player player = PlayerControlView.this.player;

View File

@ -640,7 +640,7 @@ public class PlayerNotificationManager {
private final Handler mainHandler;
private final NotificationManagerCompat notificationManager;
private final IntentFilter intentFilter;
private final Player.EventListener playerListener;
private final Player.Listener playerListener;
private final NotificationBroadcastReceiver notificationBroadcastReceiver;
private final Map<String, NotificationCompat.Action> playbackActions;
private final Map<String, NotificationCompat.Action> customActions;
@ -1466,7 +1466,7 @@ public class PlayerNotificationManager {
builder.setLargeIcon(largeIcon);
}
private class PlayerListener implements Player.EventListener {
private class PlayerListener implements Player.Listener {
@Override
public void onEvents(Player player, Player.Events events) {

View File

@ -66,6 +66,7 @@ import com.google.android.exoplayer2.util.ErrorMessageProvider;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.RepeatModeUtil;
import com.google.android.exoplayer2.util.Util;
import com.google.android.exoplayer2.video.VideoSize;
import com.google.common.collect.ImmutableList;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
@ -1471,7 +1472,7 @@ public class PlayerView extends FrameLayout implements AdViewProvider {
period = new Period();
}
// TextOutput implementation
// Player.Listener implementation
@Override
public void onCues(List<Cue> cues) {
@ -1480,13 +1481,13 @@ public class PlayerView extends FrameLayout implements AdViewProvider {
}
}
// VideoListener implementation
@Override
public void onVideoSizeChanged(
int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
public void onVideoSizeChanged(VideoSize videoSize) {
int width = videoSize.width;
int height = videoSize.height;
int unappliedRotationDegrees = videoSize.unappliedRotationDegrees;
float videoAspectRatio =
(height == 0 || width == 0) ? 1 : (width * pixelWidthHeightRatio) / height;
(height == 0 || width == 0) ? 1 : (width * videoSize.pixelWidthHeightRatio) / height;
if (surfaceView instanceof TextureView) {
// Try to apply rotation transformation when our surface is a TextureView.
@ -1546,8 +1547,6 @@ public class PlayerView extends FrameLayout implements AdViewProvider {
updateForCurrentTrackSelections(/* isNewPlayer= */ false);
}
// Player.EventListener implementation
@Override
public void onPlaybackStateChanged(@Player.State int playbackState) {
updateBuffering();

View File

@ -1754,36 +1754,11 @@ public class StyledPlayerControlView extends FrameLayout {
}
private final class ComponentListener
implements Player.EventListener,
implements Player.Listener,
TimeBar.OnScrubListener,
OnClickListener,
PopupWindow.OnDismissListener {
@Override
public void onScrubStart(TimeBar timeBar, long position) {
scrubbing = true;
if (positionView != null) {
positionView.setText(Util.getStringForTime(formatBuilder, formatter, position));
}
controlViewLayoutManager.removeHideCallbacks();
}
@Override
public void onScrubMove(TimeBar timeBar, long position) {
if (positionView != null) {
positionView.setText(Util.getStringForTime(formatBuilder, formatter, position));
}
}
@Override
public void onScrubStop(TimeBar timeBar, long position, boolean canceled) {
scrubbing = false;
if (!canceled && player != null) {
seekToTimeBarPosition(player, position);
}
controlViewLayoutManager.resetHideCallbacks();
}
@Override
public void onEvents(Player player, Events events) {
if (events.containsAny(EVENT_PLAYBACK_STATE_CHANGED, EVENT_PLAY_WHEN_READY_CHANGED)) {
@ -1817,6 +1792,31 @@ public class StyledPlayerControlView extends FrameLayout {
}
}
@Override
public void onScrubStart(TimeBar timeBar, long position) {
scrubbing = true;
if (positionView != null) {
positionView.setText(Util.getStringForTime(formatBuilder, formatter, position));
}
controlViewLayoutManager.removeHideCallbacks();
}
@Override
public void onScrubMove(TimeBar timeBar, long position) {
if (positionView != null) {
positionView.setText(Util.getStringForTime(formatBuilder, formatter, position));
}
}
@Override
public void onScrubStop(TimeBar timeBar, long position, boolean canceled) {
scrubbing = false;
if (!canceled && player != null) {
seekToTimeBarPosition(player, position);
}
controlViewLayoutManager.resetHideCallbacks();
}
@Override
public void onDismiss() {
if (needToHideBars) {

View File

@ -67,6 +67,7 @@ import com.google.android.exoplayer2.util.ErrorMessageProvider;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.RepeatModeUtil;
import com.google.android.exoplayer2.util.Util;
import com.google.android.exoplayer2.video.VideoSize;
import com.google.common.collect.ImmutableList;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
@ -1512,7 +1513,7 @@ public class StyledPlayerView extends FrameLayout implements AdViewProvider {
period = new Period();
}
// TextOutput implementation
// Player.Listener implementation
@Override
public void onCues(List<Cue> cues) {
@ -1521,13 +1522,13 @@ public class StyledPlayerView extends FrameLayout implements AdViewProvider {
}
}
// VideoListener implementation
@Override
public void onVideoSizeChanged(
int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
public void onVideoSizeChanged(VideoSize videoSize) {
int width = videoSize.width;
int height = videoSize.height;
int unappliedRotationDegrees = videoSize.unappliedRotationDegrees;
float videoAspectRatio =
(height == 0 || width == 0) ? 1 : (width * pixelWidthHeightRatio) / height;
(height == 0 || width == 0) ? 1 : (width * videoSize.pixelWidthHeightRatio) / height;
if (surfaceView instanceof TextureView) {
// Try to apply rotation transformation when our surface is a TextureView.
@ -1587,8 +1588,6 @@ public class StyledPlayerView extends FrameLayout implements AdViewProvider {
updateForCurrentTrackSelections(/* isNewPlayer= */ false);
}
// Player.EventListener implementation
@Override
public void onPlaybackStateChanged(@Player.State int playbackState) {
updateBuffering();