diff --git a/RELEASENOTES.md b/RELEASENOTES.md index f0eb0f5fb0..0cf6fad2be 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -125,6 +125,9 @@ and/or `onVideoInputFormatChanged` instead. * `onDecoderDisabled`, use `onAudioDisabled` and/or `onVideoDisabled` instead. + * Remove the deprecated `Player.Listener.onSeekProcessed` and + `AnalyticsListener.onSeekProcessed`, use `onPositionDiscontinuity` with + `DISCONTINUITY_REASON_SEEK` instead. * Core library: * Add `ExoPlayer.setVideoFrameProcessorFactory()` for using `Effect` with a custom `VideoFrameProcessor.Factory` during video playback. diff --git a/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java b/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java index d7dd09ea6d..1058d28282 100644 --- a/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java +++ b/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java @@ -394,8 +394,9 @@ public final class CastPlayer extends BasePlayer { return playWhenReady.value; } - // We still call Listener#onSeekProcessed() for backwards compatibility with listeners that - // don't implement onPositionDiscontinuity(). + // We still call Listener#onPositionDiscontinuity(@DiscontinuityReason int) for backwards + // compatibility with listeners that don't implement + // onPositionDiscontinuity(PositionInfo, PositionInfo, @DiscontinuityReason int). @SuppressWarnings("deprecation") @Override @VisibleForTesting(otherwise = PROTECTED) @@ -449,8 +450,6 @@ public final class CastPlayer extends BasePlayer { } } updateAvailableCommandsAndNotifyIfChanged(); - } else if (pendingSeekCount == 0) { - listeners.queueEvent(/* eventFlag= */ C.INDEX_UNSET, Listener::onSeekProcessed); } listeners.flushEvents(); } @@ -1437,9 +1436,6 @@ public final class CastPlayer extends BasePlayer { private final class SeekResultCallback implements ResultCallback { - // We still call Listener#onSeekProcessed() for backwards compatibility with listeners that - // don't implement onPositionDiscontinuity(). - @SuppressWarnings("deprecation") @Override public void onResult(MediaChannelResult result) { int statusCode = result.getStatus().getStatusCode(); @@ -1452,7 +1448,6 @@ public final class CastPlayer extends BasePlayer { currentWindowIndex = pendingSeekWindowIndex; pendingSeekWindowIndex = C.INDEX_UNSET; pendingSeekPositionMs = C.TIME_UNSET; - listeners.sendEvent(/* eventFlag= */ C.INDEX_UNSET, Listener::onSeekProcessed); } } } diff --git a/libraries/common/src/main/java/androidx/media3/common/ForwardingPlayer.java b/libraries/common/src/main/java/androidx/media3/common/ForwardingPlayer.java index d2162e5611..9aeb2777ea 100644 --- a/libraries/common/src/main/java/androidx/media3/common/ForwardingPlayer.java +++ b/libraries/common/src/main/java/androidx/media3/common/ForwardingPlayer.java @@ -1066,12 +1066,6 @@ public class ForwardingPlayer implements Player { listener.onMaxSeekToPreviousPositionChanged(maxSeekToPreviousPositionMs); } - @Override - @SuppressWarnings("deprecation") - public void onSeekProcessed() { - listener.onSeekProcessed(); - } - @Override public void onVideoSizeChanged(VideoSize videoSize) { listener.onVideoSizeChanged(videoSize); diff --git a/libraries/common/src/main/java/androidx/media3/common/Player.java b/libraries/common/src/main/java/androidx/media3/common/Player.java index 822cb506ef..aeefd5522e 100644 --- a/libraries/common/src/main/java/androidx/media3/common/Player.java +++ b/libraries/common/src/main/java/androidx/media3/common/Player.java @@ -1017,15 +1017,6 @@ public interface Player { */ default void onMaxSeekToPreviousPositionChanged(long maxSeekToPreviousPositionMs) {} - /** - * @deprecated Seeks are processed without delay. Listen to {@link - * #onPositionDiscontinuity(PositionInfo, PositionInfo, int)} with reason {@link - * #DISCONTINUITY_REASON_SEEK} instead. - */ - @Deprecated - @UnstableApi - default void onSeekProcessed() {} - /** * Called when the audio session ID changes. * diff --git a/libraries/common/src/main/java/androidx/media3/common/SimpleBasePlayer.java b/libraries/common/src/main/java/androidx/media3/common/SimpleBasePlayer.java index a7bde0bc87..054f55198a 100644 --- a/libraries/common/src/main/java/androidx/media3/common/SimpleBasePlayer.java +++ b/libraries/common/src/main/java/androidx/media3/common/SimpleBasePlayer.java @@ -3438,9 +3438,6 @@ public abstract class SimpleBasePlayer extends BasePlayer { listeners.queueEvent( Player.EVENT_METADATA, listener -> listener.onMetadata(newState.timedMetadata)); } - if (positionDiscontinuityReason == Player.DISCONTINUITY_REASON_SEEK) { - listeners.queueEvent(/* eventFlag= */ C.INDEX_UNSET, Listener::onSeekProcessed); - } if (!previousState.availableCommands.equals(newState.availableCommands)) { listeners.queueEvent( Player.EVENT_AVAILABLE_COMMANDS_CHANGED, diff --git a/libraries/common/src/test/java/androidx/media3/common/SimpleBasePlayerTest.java b/libraries/common/src/test/java/androidx/media3/common/SimpleBasePlayerTest.java index 5a108550d5..bec3887ea8 100644 --- a/libraries/common/src/test/java/androidx/media3/common/SimpleBasePlayerTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/SimpleBasePlayerTest.java @@ -1395,7 +1395,6 @@ public class SimpleBasePlayerTest { /* adIndexInAdGroup= */ C.INDEX_UNSET), Player.DISCONTINUITY_REASON_SEEK); verify(listener).onMediaItemTransition(mediaItem1, Player.MEDIA_ITEM_TRANSITION_REASON_SEEK); - verify(listener).onSeekProcessed(); verify(listener) .onEvents( player, @@ -6911,7 +6910,6 @@ public class SimpleBasePlayerTest { verify(listener).onPositionDiscontinuity(Player.DISCONTINUITY_REASON_SEEK); verify(listener).onPositionDiscontinuity(any(), any(), eq(Player.DISCONTINUITY_REASON_SEEK)); verify(listener).onMediaItemTransition(newMediaItem, Player.MEDIA_ITEM_TRANSITION_REASON_SEEK); - verify(listener).onSeekProcessed(); verifyNoMoreInteractions(listener); } @@ -6962,7 +6960,6 @@ public class SimpleBasePlayerTest { verify(listener).onMediaItemTransition(newMediaItem, Player.MEDIA_ITEM_TRANSITION_REASON_SEEK); verify(listener).onPositionDiscontinuity(Player.DISCONTINUITY_REASON_SEEK); verify(listener).onPositionDiscontinuity(any(), any(), eq(Player.DISCONTINUITY_REASON_SEEK)); - verify(listener).onSeekProcessed(); verifyNoMoreInteractions(listener); future.set(null); @@ -7022,7 +7019,6 @@ public class SimpleBasePlayerTest { verify(listener).onMediaItemTransition(newMediaItem, Player.MEDIA_ITEM_TRANSITION_REASON_SEEK); verify(listener).onPositionDiscontinuity(Player.DISCONTINUITY_REASON_SEEK); verify(listener).onPositionDiscontinuity(any(), any(), eq(Player.DISCONTINUITY_REASON_SEEK)); - verify(listener).onSeekProcessed(); verifyNoMoreInteractions(listener); future.set(null); @@ -7074,7 +7070,6 @@ public class SimpleBasePlayerTest { assertThat(player.getTotalBufferedDuration()).isEqualTo(0); verify(listener).onPositionDiscontinuity(Player.DISCONTINUITY_REASON_SEEK); verify(listener).onPositionDiscontinuity(any(), any(), eq(Player.DISCONTINUITY_REASON_SEEK)); - verify(listener).onSeekProcessed(); verifyNoMoreInteractions(listener); future.set(null); @@ -7126,7 +7121,6 @@ public class SimpleBasePlayerTest { assertThat(player.getTotalBufferedDuration()).isEqualTo(0); verify(listener).onPositionDiscontinuity(Player.DISCONTINUITY_REASON_SEEK); verify(listener).onPositionDiscontinuity(any(), any(), eq(Player.DISCONTINUITY_REASON_SEEK)); - verify(listener).onSeekProcessed(); verifyNoMoreInteractions(listener); future.set(null); @@ -7178,7 +7172,6 @@ public class SimpleBasePlayerTest { assertThat(player.getTotalBufferedDuration()).isEqualTo(0); verify(listener).onPositionDiscontinuity(Player.DISCONTINUITY_REASON_SEEK); verify(listener).onPositionDiscontinuity(any(), any(), eq(Player.DISCONTINUITY_REASON_SEEK)); - verify(listener).onSeekProcessed(); verifyNoMoreInteractions(listener); future.set(null); @@ -7230,7 +7223,6 @@ public class SimpleBasePlayerTest { assertThat(player.getTotalBufferedDuration()).isEqualTo(7000); verify(listener).onPositionDiscontinuity(Player.DISCONTINUITY_REASON_SEEK); verify(listener).onPositionDiscontinuity(any(), any(), eq(Player.DISCONTINUITY_REASON_SEEK)); - verify(listener).onSeekProcessed(); verifyNoMoreInteractions(listener); future.set(null); @@ -7282,7 +7274,6 @@ public class SimpleBasePlayerTest { assertThat(player.getTotalBufferedDuration()).isEqualTo(3000); verify(listener).onPositionDiscontinuity(Player.DISCONTINUITY_REASON_SEEK); verify(listener).onPositionDiscontinuity(any(), any(), eq(Player.DISCONTINUITY_REASON_SEEK)); - verify(listener).onSeekProcessed(); verifyNoMoreInteractions(listener); future.set(null); @@ -7340,7 +7331,6 @@ public class SimpleBasePlayerTest { verify(listener).onPositionDiscontinuity(Player.DISCONTINUITY_REASON_SEEK); verify(listener).onPositionDiscontinuity(any(), any(), eq(Player.DISCONTINUITY_REASON_SEEK)); verify(listener).onMediaItemTransition(mediaItem, Player.MEDIA_ITEM_TRANSITION_REASON_SEEK); - verify(listener).onSeekProcessed(); verifyNoMoreInteractions(listener); future.set(null); diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java index 4f6483ac78..b19a1fc85a 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java @@ -547,7 +547,6 @@ import java.util.concurrent.TimeoutException; playbackInfo, /* ignored */ TIMELINE_CHANGE_REASON_SOURCE_UPDATE, /* ignored */ PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST, - /* seekProcessed= */ false, /* positionDiscontinuity= */ false, /* ignored */ DISCONTINUITY_REASON_INTERNAL, /* ignored */ C.TIME_UNSET, @@ -666,7 +665,6 @@ import java.util.concurrent.TimeoutException; newPlaybackInfo, /* timelineChangeReason= */ TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, /* ignored */ PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST, - /* seekProcessed= */ false, /* positionDiscontinuity= */ false, /* ignored */ DISCONTINUITY_REASON_INTERNAL, /* ignored */ C.TIME_UNSET, @@ -691,7 +689,6 @@ import java.util.concurrent.TimeoutException; newPlaybackInfo, /* timelineChangeReason= */ TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, /* ignored */ PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST, - /* seekProcessed= */ false, positionDiscontinuity, DISCONTINUITY_REASON_REMOVE, /* discontinuityWindowStartPositionUs= */ getCurrentPositionUsInternal(newPlaybackInfo), @@ -728,7 +725,6 @@ import java.util.concurrent.TimeoutException; newPlaybackInfo, /* timelineChangeReason= */ TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, /* ignored */ PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST, - /* seekProcessed= */ false, /* positionDiscontinuity= */ false, /* ignored */ DISCONTINUITY_REASON_INTERNAL, /* ignored */ C.TIME_UNSET, @@ -753,7 +749,6 @@ import java.util.concurrent.TimeoutException; newPlaybackInfo, /* timelineChangeReason= */ TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, /* ignored */ PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST, - /* seekProcessed= */ false, /* positionDiscontinuity= */ false, /* ignored */ DISCONTINUITY_REASON_INTERNAL, /* ignored */ C.TIME_UNSET, @@ -878,7 +873,6 @@ import java.util.concurrent.TimeoutException; newPlaybackInfo, /* ignored */ TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, /* ignored */ PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST, - /* seekProcessed= */ true, /* positionDiscontinuity= */ true, /* positionDiscontinuityReason= */ DISCONTINUITY_REASON_SEEK, /* discontinuityWindowStartPositionUs= */ getCurrentPositionUsInternal(newPlaybackInfo), @@ -920,7 +914,6 @@ import java.util.concurrent.TimeoutException; newPlaybackInfo, /* ignored */ TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, /* ignored */ PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST, - /* seekProcessed= */ false, /* positionDiscontinuity= */ false, /* ignored */ DISCONTINUITY_REASON_INTERNAL, /* ignored */ C.TIME_UNSET, @@ -1834,7 +1827,6 @@ import java.util.concurrent.TimeoutException; playbackInfo, /* ignored */ TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, /* ignored */ PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST, - /* seekProcessed= */ false, /* positionDiscontinuity= */ false, /* ignored */ DISCONTINUITY_REASON_INTERNAL, /* ignored */ C.TIME_UNSET, @@ -1935,7 +1927,6 @@ import java.util.concurrent.TimeoutException; playbackInfoUpdate.playbackInfo, TIMELINE_CHANGE_REASON_SOURCE_UPDATE, pendingPlayWhenReadyChangeReason, - /* seekProcessed= */ false, positionDiscontinuity, pendingDiscontinuityReason, discontinuityWindowStartPositionUs, @@ -1950,7 +1941,6 @@ import java.util.concurrent.TimeoutException; PlaybackInfo playbackInfo, @TimelineChangeReason int timelineChangeReason, @PlayWhenReadyChangeReason int playWhenReadyChangeReason, - boolean seekProcessed, boolean positionDiscontinuity, @DiscontinuityReason int positionDiscontinuityReason, long discontinuityWindowStartPositionUs, @@ -2099,9 +2089,6 @@ import java.util.concurrent.TimeoutException; Player.EVENT_PLAYBACK_PARAMETERS_CHANGED, listener -> listener.onPlaybackParametersChanged(newPlaybackInfo.playbackParameters)); } - if (seekProcessed) { - listeners.queueEvent(/* eventFlag= */ C.INDEX_UNSET, Listener::onSeekProcessed); - } updateAvailableCommands(); listeners.flushEvents(); @@ -2323,7 +2310,6 @@ import java.util.concurrent.TimeoutException; newPlaybackInfo, /* timelineChangeReason= */ TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, /* ignored */ PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST, - /* seekProcessed= */ false, /* positionDiscontinuity= */ positionDiscontinuity, DISCONTINUITY_REASON_REMOVE, /* discontinuityWindowStartPositionUs= */ getCurrentPositionUsInternal(newPlaybackInfo), @@ -2745,7 +2731,6 @@ import java.util.concurrent.TimeoutException; playbackInfo, /* ignored */ TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, playWhenReadyChangeReason, - /* seekProcessed= */ false, /* positionDiscontinuity= */ false, /* ignored */ DISCONTINUITY_REASON_INTERNAL, /* ignored */ C.TIME_UNSET, diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/analytics/AnalyticsListener.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/analytics/AnalyticsListener.java index 656afd02ce..5cd62c18f8 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/analytics/AnalyticsListener.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/analytics/AnalyticsListener.java @@ -621,14 +621,6 @@ public interface AnalyticsListener { @Deprecated default void onSeekStarted(EventTime eventTime) {} - /** - * @deprecated Seeks are processed without delay. Use {@link #onPositionDiscontinuity(EventTime, - * int)} with reason {@link Player#DISCONTINUITY_REASON_SEEK} instead. - */ - @UnstableApi - @Deprecated - default void onSeekProcessed(EventTime eventTime) {} - /** * Called when the playback parameters changed. * diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/analytics/DefaultAnalyticsCollector.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/analytics/DefaultAnalyticsCollector.java index 6721366ee2..0c34eb9183 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/analytics/DefaultAnalyticsCollector.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/analytics/DefaultAnalyticsCollector.java @@ -711,14 +711,6 @@ public class DefaultAnalyticsCollector implements AnalyticsCollector { eventTime, AnalyticsListener.EVENT_CUES, listener -> listener.onCues(eventTime, cueGroup)); } - @SuppressWarnings("deprecation") // Implementing and calling deprecated listener method. - @Override - public final void onSeekProcessed() { - EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime(); - sendEvent( - eventTime, /* eventFlag= */ C.INDEX_UNSET, listener -> listener.onSeekProcessed(eventTime)); - } - @Override public final void onSkipSilenceEnabledChanged(boolean skipSilenceEnabled) { EventTime eventTime = generateReadingMediaPeriodEventTime(); diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/analytics/DefaultAnalyticsCollectorTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/analytics/DefaultAnalyticsCollectorTest.java index 68950d008e..95b563a82b 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/analytics/DefaultAnalyticsCollectorTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/analytics/DefaultAnalyticsCollectorTest.java @@ -147,7 +147,6 @@ public final class DefaultAnalyticsCollectorTest { // Deprecated event constants. private static final long EVENT_PLAYER_STATE_CHANGED = 1L << 63; private static final long EVENT_SEEK_STARTED = 1L << 62; - private static final long EVENT_SEEK_PROCESSED = 1L << 61; private static final UUID DRM_SCHEME_UUID = UUID.nameUUIDFromBytes(TestUtil.createByteArray(7, 8, 9)); @@ -471,7 +470,6 @@ public final class DefaultAnalyticsCollectorTest { .inOrder(); assertThat(listener.getEvents(EVENT_POSITION_DISCONTINUITY)).containsExactly(period1); assertThat(listener.getEvents(EVENT_SEEK_STARTED)).containsExactly(period0); - assertThat(listener.getEvents(EVENT_SEEK_PROCESSED)).containsExactly(period1); assertThat(listener.getEvents(EVENT_IS_LOADING_CHANGED)) .containsExactly(period0, period0) .inOrder(); @@ -562,7 +560,6 @@ public final class DefaultAnalyticsCollectorTest { .containsExactly(period0, period1Seq2) .inOrder(); assertThat(listener.getEvents(EVENT_SEEK_STARTED)).containsExactly(period0); - assertThat(listener.getEvents(EVENT_SEEK_PROCESSED)).containsExactly(period0); assertThat(listener.getEvents(EVENT_IS_LOADING_CHANGED)) .containsExactly(period0, period0, period0, period0) .inOrder(); @@ -763,7 +760,6 @@ public final class DefaultAnalyticsCollectorTest { .containsExactly(WINDOW_0 /* prepared */, WINDOW_0 /* prepared */); assertThat(listener.getEvents(EVENT_POSITION_DISCONTINUITY)).containsExactly(period0Seq0); assertThat(listener.getEvents(EVENT_SEEK_STARTED)).containsExactly(period0Seq0); - assertThat(listener.getEvents(EVENT_SEEK_PROCESSED)).containsExactly(period0Seq0); assertThat(listener.getEvents(EVENT_IS_LOADING_CHANGED)) .containsExactly(period0Seq0, period0Seq0, period0Seq0, period0Seq0); assertThat(listener.getEvents(EVENT_PLAYER_ERROR)).containsExactly(period0Seq0); @@ -1293,7 +1289,6 @@ public final class DefaultAnalyticsCollectorTest { contentAfterMidroll /* ad transition */) .inOrder(); assertThat(listener.getEvents(EVENT_SEEK_STARTED)).containsExactly(contentBeforeMidroll); - assertThat(listener.getEvents(EVENT_SEEK_PROCESSED)).containsExactly(contentAfterMidroll); assertThat(listener.getEvents(EVENT_IS_LOADING_CHANGED)) .containsExactly(contentBeforeMidroll, contentBeforeMidroll, midrollAd, midrollAd) .inOrder(); @@ -1360,7 +1355,6 @@ public final class DefaultAnalyticsCollectorTest { populateEventIds(listener.lastReportedTimeline); assertThat(listener.getEvents(EVENT_SEEK_STARTED)).containsExactly(period0); - assertThat(listener.getEvents(EVENT_SEEK_PROCESSED)).containsExactly(period0); } @Test @@ -2124,12 +2118,6 @@ public final class DefaultAnalyticsCollectorTest { reportedEvents.add(new ReportedEvent(EVENT_SEEK_STARTED, eventTime)); } - @SuppressWarnings("deprecation") // Testing deprecated behaviour. - @Override - public void onSeekProcessed(EventTime eventTime) { - reportedEvents.add(new ReportedEvent(EVENT_SEEK_PROCESSED, eventTime)); - } - @Override public void onPlaybackParametersChanged( EventTime eventTime, PlaybackParameters playbackParameters) {