From ffe31be08be7a32bcd641c6fe44f2743326996a0 Mon Sep 17 00:00:00 2001 From: krocard Date: Fri, 30 Apr 2021 14:01:02 +0100 Subject: [PATCH] Deprecate component listener in favor of player All `add*Listener` and `add*Output` methods are deprecated in favor of `addListener`. As for the class themselves `VideoListener` and `AudioListener` are not used internaly by ExoPlayer, `VideoRendererEventListener` and `AudioRendererEventListener` are use in their place. As a result `VideoListener` and `AudioListener` can be deprecated in favor `Listener`. On the other hand `TextOutput` and `MedataOutput` are used both in the player interface and internally in renderers. This means that those class can't be deprecated. There usage in the public interface are indirectly deprecated as their is no way to use them without using the deprecated `add*Output`. Thus it's not an issue that the class themselves are not deprecated. #minor-release PiperOrigin-RevId: 371318268 --- RELEASENOTES.md | 2 +- .../exoplayer2/demo/PlayerActivity.java | 2 +- docs/listening-to-player-events.md | 13 ++------ .../exoplayer2/audio/AudioListener.java | 9 +++++- .../exoplayer2/device/DeviceListener.java | 9 +++++- .../exoplayer2/video/VideoListener.java | 8 ++++- .../google/android/exoplayer2/ExoPlayer.java | 30 +++++++++++++++++-- .../robolectric/TestPlayerRunHelper.java | 8 ++--- 8 files changed, 59 insertions(+), 22 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 4d1ac016b4..2cff938f1d 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -30,7 +30,7 @@ `ExoPlayer`. * Add `getMediaMetadata` to `Player` interface. * Add a `Listener` interface to receive all player events in a single - object. + object. Component Listeners have been deprecated in its favor. * `Player.setPlaybackParameters` no longer accepts null, use `PlaybackParameters.DEFAULT` instead. * Use an empty string instead of the URI if the media ID is not explicitly diff --git a/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java b/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java index cca167bf5a..21dee820c9 100644 --- a/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java +++ b/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java @@ -77,7 +77,7 @@ public class PlayerActivity extends AppCompatActivity protected StyledPlayerView playerView; protected LinearLayout debugRootView; protected TextView debugTextView; - protected SimpleExoPlayer player; + protected @Nullable SimpleExoPlayer player; private boolean isShowingTrackSelectionDialog; private Button selectTracksButton; diff --git a/docs/listening-to-player-events.md b/docs/listening-to-player-events.md index 37e1954140..316283141f 100644 --- a/docs/listening-to-player-events.md +++ b/docs/listening-to-player-events.md @@ -177,23 +177,14 @@ generic `onEvents` callback, for example to record media item change reasons with `onMediaItemTransition`, but only act once all state changes can be used together in `onEvents`. -## Additional SimpleExoPlayer listeners ## +## SimpleExoPlayer listeners ## -When using `SimpleExoPlayer`, additional listeners can be registered with the +When using `SimpleExoPlayer`, an additional listener can be registered with the player. * `addAnalyticsListener`: Listen to detailed events that may be useful for analytics and logging purposes. Please refer to the [analytics page][] for more details. -* `addTextOutput`: Listen to changes in the subtitle or caption cues. -* `addMetadataOutput`: Listen to timed metadata events, such as timed ID3 and - EMSG data. -* `addVideoListener`: Listen to events related to video rendering that may be - useful for adjusting the UI (e.g., the aspect ratio of the `Surface` onto - which video is being rendered). -* `addAudioListener`: Listen to events related to audio, such as when an audio - session ID changes, and when the player volume is changed. -* `addDeviceListener`: Listen to events related to the state of the device. ExoPlayer's UI components, such as `StyledPlayerView`, will register themselves as listeners to events that they are interested in. Hence manual registration diff --git a/library/common/src/main/java/com/google/android/exoplayer2/audio/AudioListener.java b/library/common/src/main/java/com/google/android/exoplayer2/audio/AudioListener.java index 1abe6b2f3c..99e83e3060 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/audio/AudioListener.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/audio/AudioListener.java @@ -15,7 +15,14 @@ */ package com.google.android.exoplayer2.audio; -/** A listener for changes in audio configuration. */ +import com.google.android.exoplayer2.Player; + +/** + * A listener for changes in audio configuration. + * + * @deprecated Use {@link Player.Listener}. + */ +@Deprecated public interface AudioListener { /** diff --git a/library/common/src/main/java/com/google/android/exoplayer2/device/DeviceListener.java b/library/common/src/main/java/com/google/android/exoplayer2/device/DeviceListener.java index ba273884b9..408868da79 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/device/DeviceListener.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/device/DeviceListener.java @@ -15,7 +15,14 @@ */ package com.google.android.exoplayer2.device; -/** A listener for changes of {@link DeviceInfo} or device volume. */ +import com.google.android.exoplayer2.Player; + +/** + * A listener for changes of {@link DeviceInfo} or device volume. + * + * @deprecated Use {@link Player.Listener}. + */ +@Deprecated public interface DeviceListener { /** Called when the device information changes. */ diff --git a/library/common/src/main/java/com/google/android/exoplayer2/video/VideoListener.java b/library/common/src/main/java/com/google/android/exoplayer2/video/VideoListener.java index 63e150b9ae..6a05230dce 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/video/VideoListener.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/video/VideoListener.java @@ -16,8 +16,14 @@ package com.google.android.exoplayer2.video; import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.Player; -/** A listener for metadata corresponding to video being rendered. */ +/** + * A listener for metadata corresponding to video being rendered. + * + * @deprecated Use {@link Player.Listener}. + */ +@Deprecated public interface VideoListener { /** diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java index 0b8c04b036..32e711c971 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java @@ -149,14 +149,18 @@ public interface ExoPlayer extends Player { * Adds a listener to receive audio events. * * @param listener The listener to register. + * @deprecated Use {@link #addListener(Listener)}. */ + @Deprecated void addAudioListener(AudioListener listener); /** * Removes a listener of audio events. * * @param listener The listener to unregister. + * @deprecated Use {@link #removeListener(Listener)}. */ + @Deprecated void removeAudioListener(AudioListener listener); /** @@ -249,14 +253,18 @@ public interface ExoPlayer extends Player { * Adds a listener to receive video events. * * @param listener The listener to register. + * @deprecated Use {@link #addListener(Listener)}. */ + @Deprecated void addVideoListener(VideoListener listener); /** * Removes a listener of video events. * * @param listener The listener to unregister. + * @deprecated Use {@link #removeListener(Listener)}. */ + @Deprecated void removeVideoListener(VideoListener listener); /** @@ -388,14 +396,18 @@ public interface ExoPlayer extends Player { * Registers an output to receive text events. * * @param listener The output to register. + * @deprecated Use {@link #addListener(Listener)}. */ + @Deprecated void addTextOutput(TextOutput listener); /** * Removes a text output. * * @param listener The output to remove. + * @deprecated Use {@link #removeListener(Listener)}. */ + @Deprecated void removeTextOutput(TextOutput listener); /** Returns the current {@link Cue Cues}. This list may be empty. */ @@ -409,24 +421,38 @@ public interface ExoPlayer extends Player { * Adds a {@link MetadataOutput} to receive metadata. * * @param output The output to register. + * @deprecated Use {@link #addListener(Listener)}. */ + @Deprecated void addMetadataOutput(MetadataOutput output); /** * Removes a {@link MetadataOutput}. * * @param output The output to remove. + * @deprecated Use {@link #removeListener(Listener)}. */ + @Deprecated void removeMetadataOutput(MetadataOutput output); } /** The device component of an {@link ExoPlayer}. */ interface DeviceComponent { - /** Adds a listener to receive device events. */ + /** + * Adds a listener to receive device events. + * + * @deprecated Use {@link #addListener(Listener)}. + */ + @Deprecated void addDeviceListener(DeviceListener listener); - /** Removes a listener of device events. */ + /** + * Removes a listener of device events. + * + * @deprecated Use {@link #removeListener(Listener)}. + */ + @Deprecated void removeDeviceListener(DeviceListener listener); /** Gets the device information. */ diff --git a/robolectricutils/src/main/java/com/google/android/exoplayer2/robolectric/TestPlayerRunHelper.java b/robolectricutils/src/main/java/com/google/android/exoplayer2/robolectric/TestPlayerRunHelper.java index d35fd43959..81c24421ca 100644 --- a/robolectricutils/src/main/java/com/google/android/exoplayer2/robolectric/TestPlayerRunHelper.java +++ b/robolectricutils/src/main/java/com/google/android/exoplayer2/robolectric/TestPlayerRunHelper.java @@ -281,15 +281,15 @@ public class TestPlayerRunHelper { public static void runUntilRenderedFirstFrame(SimpleExoPlayer player) throws TimeoutException { verifyMainTestThread(player); AtomicBoolean receivedCallback = new AtomicBoolean(false); - VideoListener listener = - new VideoListener() { + Player.Listener listener = + new Player.Listener() { @Override public void onRenderedFirstFrame() { receivedCallback.set(true); - player.removeVideoListener(this); + player.removeListener(this); } }; - player.addVideoListener(listener); + player.addListener(listener); runMainLooperUntil(receivedCallback::get); }