diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 285db4aac2..c08799302d 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -24,6 +24,8 @@ the start or after the end of the media are now handled as seeks to the start and end respectively ([#8906](https://github.com/google/ExoPlayer/issues/8906)). + * Move `Player.addListener(EventListener)` and + `Player.removeListener(EventListener)` out of `Player` into subclasses. * Extractors: * Support TS packets without PTS flag ([#9294](https://github.com/google/ExoPlayer/issues/9294)). @@ -92,9 +94,8 @@ deprecated since 2.11.0. * Remove `DownloadService.onDownloadChanged` and `DownloadService.onDownloadRemoved`. Instead, use - `DownloadManager.addListener` to register a listener directly to - the `DownloadManager` returned through - `DownloadService.getDownloadManager`. + `DownloadManager.addListener` to register a listener directly to the + `DownloadManager` returned through `DownloadService.getDownloadManager`. * Cast extension: * Implement `CastPlayer.setPlaybackParameters(PlaybackParameters)` to support setting the playback speed diff --git a/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java b/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java index e42e7bbee4..97b0567222 100644 --- a/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java +++ b/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java @@ -276,7 +276,17 @@ public final class CastPlayer extends BasePlayer { addListener(eventListener); } - @Override + /** + * Registers a listener to receive events from the player. + * + *
The listener's methods will be called on the thread associated with {@link + * #getApplicationLooper()}. + * + * @param listener The listener to register. + * @deprecated Use {@link #addListener(Listener)} and {@link #removeListener(Listener)} instead. + */ + @Deprecated + @SuppressWarnings("deprecation") public void addListener(EventListener listener) { listeners.add(listener); } @@ -287,7 +297,15 @@ public final class CastPlayer extends BasePlayer { removeListener(eventListener); } - @Override + /** + * Unregister a listener registered through {@link #addListener(EventListener)}. The listener will + * no longer receive events from the player. + * + * @param listener The listener to unregister. + * @deprecated Use {@link #addListener(Listener)} and {@link #removeListener(Listener)} instead. + */ + @Deprecated + @SuppressWarnings("deprecation") public void removeListener(EventListener listener) { listeners.remove(listener); } diff --git a/library/common/src/main/java/com/google/android/exoplayer2/ForwardingPlayer.java b/library/common/src/main/java/com/google/android/exoplayer2/ForwardingPlayer.java index 1f990befef..4fa547d2dc 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/ForwardingPlayer.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/ForwardingPlayer.java @@ -43,28 +43,16 @@ public class ForwardingPlayer implements Player { this.player = player; } - @Override + @Deprecated public Looper getApplicationLooper() { return player.getApplicationLooper(); } @Deprecated - @Override - public void addListener(EventListener listener) { - player.addListener(new ForwardingEventListener(this, listener)); - } - - @Override public void addListener(Listener listener) { player.addListener(new ForwardingListener(this, listener)); } - @Deprecated - @Override - public void removeListener(EventListener listener) { - player.removeListener(new ForwardingEventListener(this, listener)); - } - @Override public void removeListener(Listener listener) { player.removeListener(new ForwardingListener(this, listener)); diff --git a/library/common/src/main/java/com/google/android/exoplayer2/Player.java b/library/common/src/main/java/com/google/android/exoplayer2/Player.java index f1eb502d08..45f181d47e 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/Player.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/Player.java @@ -1434,40 +1434,16 @@ public interface Player { */ Looper getApplicationLooper(); - /** - * Registers a listener to receive events from the player. - * - *
The listener's methods will be called on the thread that was used to construct the player. - * However, if the thread used to construct the player does not have a {@link Looper}, then the - * listener will be called on the main thread. - * - * @param listener The listener to register. - * @deprecated Use {@link #addListener(Listener)} and {@link #removeListener(Listener)} instead. - */ - @Deprecated - void addListener(EventListener listener); - /** * Registers a listener to receive all events from the player. * - *
The listener's methods will be called on the thread that was used to construct the player. - * However, if the thread used to construct the player does not have a {@link Looper}, then the - * listener will be called on the main thread. + *
The listener's methods will be called on the thread associated with {@link
+ * #getApplicationLooper()}.
*
* @param listener The listener to register.
*/
void addListener(Listener listener);
- /**
- * Unregister a listener registered through {@link #addListener(EventListener)}. The listener will
- * no longer receive events from the player.
- *
- * @param listener The listener to unregister.
- * @deprecated Use {@link #addListener(Listener)} and {@link #removeListener(Listener)} instead.
- */
- @Deprecated
- void removeListener(EventListener listener);
-
/**
* Unregister a listener registered through {@link #addListener(Listener)}. The listener will no
* longer receive events.
diff --git a/library/common/src/test/java/com/google/android/exoplayer2/ForwardingPlayerTest.java b/library/common/src/test/java/com/google/android/exoplayer2/ForwardingPlayerTest.java
index 2446efaf8b..41f590ed03 100644
--- a/library/common/src/test/java/com/google/android/exoplayer2/ForwardingPlayerTest.java
+++ b/library/common/src/test/java/com/google/android/exoplayer2/ForwardingPlayerTest.java
@@ -61,22 +61,6 @@ public class ForwardingPlayerTest {
assertThat(player.listeners).hasSize(2);
}
- @Test
- @SuppressWarnings("deprecation") // Testing backwards compatibility with deprecated method.
- public void addEventListener_addsForwardingListener() {
- FakePlayer player = new FakePlayer(ApplicationProvider.getApplicationContext());
- Player.EventListener listener1 = mock(Player.EventListener.class);
- Player.EventListener listener2 = mock(Player.EventListener.class);
-
- ForwardingPlayer forwardingPlayer = new ForwardingPlayer(player);
- forwardingPlayer.addListener(listener1);
- // Add listener1 again.
- forwardingPlayer.addListener(listener1);
- forwardingPlayer.addListener(listener2);
-
- assertThat(player.eventListeners).hasSize(2);
- }
-
@Test
public void removeListener_removesForwardingListener() {
FakePlayer player = new FakePlayer(ApplicationProvider.getApplicationContext());
@@ -95,25 +79,6 @@ public class ForwardingPlayerTest {
assertThat(player.listeners).isEmpty();
}
- @Test
- @SuppressWarnings("deprecation") // Testing backwards compatibility with deprecated method.
- public void removeEventListener_removesForwardingListener() {
- FakePlayer player = new FakePlayer(ApplicationProvider.getApplicationContext());
- Player.EventListener listener1 = mock(Player.EventListener.class);
- Player.EventListener listener2 = mock(Player.EventListener.class);
- ForwardingPlayer forwardingPlayer = new ForwardingPlayer(player);
- forwardingPlayer.addListener(listener1);
- forwardingPlayer.addListener(listener2);
-
- forwardingPlayer.removeListener(listener1);
- assertThat(player.eventListeners).hasSize(1);
- // Remove same listener again.
- forwardingPlayer.removeListener(listener1);
- assertThat(player.eventListeners).hasSize(1);
- forwardingPlayer.removeListener(listener2);
- assertThat(player.eventListeners).isEmpty();
- }
-
@Test
public void onEvents_passesForwardingPlayerAsArgument() {
FakePlayer player = new FakePlayer(ApplicationProvider.getApplicationContext());
@@ -217,32 +182,17 @@ public class ForwardingPlayerTest {
private static class FakePlayer extends StubExoPlayer {
- @SuppressWarnings("deprecation") // Use of deprecated type for backwards compatibility.
- private final Set The listener's methods will be called on the thread associated with {@link
+ * #getApplicationLooper()}.
+ *
+ * @param listener The listener to register.
+ * @deprecated Use {@link #addListener(Listener)} and {@link #removeListener(Listener)} instead.
+ */
+ @Deprecated
+ @SuppressWarnings("deprecation")
+ void addListener(EventListener listener);
+
+ /**
+ * Unregister a listener registered through {@link #addListener(EventListener)}. The listener will
+ * no longer receive events from the player.
+ *
+ * @param listener The listener to unregister.
+ * @deprecated Use {@link #addListener(Listener)} and {@link #removeListener(Listener)} instead.
+ */
+ @Deprecated
+ @SuppressWarnings("deprecation")
+ void removeListener(EventListener listener);
+
/**
* Adds a listener to receive audio offload events.
*
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java
index 96015815ae..d2c4f1e716 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java
@@ -289,24 +289,22 @@ import java.util.concurrent.CopyOnWriteArraySet;
@Override
public void addListener(Listener listener) {
- EventListener eventListener = listener;
- addListener(eventListener);
- }
-
- @Override
- public void addListener(Player.EventListener listener) {
- listeners.add(listener);
+ addEventListener(listener);
}
@Override
public void removeListener(Listener listener) {
- EventListener eventListener = listener;
- removeListener(eventListener);
+ removeEventListener(listener);
}
- @Override
- public void removeListener(Player.EventListener listener) {
- listeners.remove(listener);
+ @SuppressWarnings("deprecation") // Register deprecated EventListener.
+ public void addEventListener(Player.EventListener eventListener) {
+ listeners.add(eventListener);
+ }
+
+ @SuppressWarnings("deprecation") // Deregister deprecated EventListener.
+ public void removeEventListener(Player.EventListener eventListener) {
+ listeners.remove(eventListener);
}
public void addAudioOffloadListener(AudioOffloadListener listener) {
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java
index d6413fb4ac..480ca348fc 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java
@@ -558,7 +558,7 @@ public class SimpleExoPlayer extends BasePlayer
builder.looper,
/* wrappingPlayer= */ this,
additionalPermanentAvailableCommands);
- player.addListener(componentListener);
+ player.addEventListener(componentListener);
player.addAudioOffloadListener(componentListener);
if (builder.foregroundModeTimeoutMs > 0) {
player.experimentalSetForegroundModeTimeoutMs(builder.foregroundModeTimeoutMs);
@@ -1082,7 +1082,7 @@ public class SimpleExoPlayer extends BasePlayer
public void addListener(Player.EventListener listener) {
// Don't verify application thread. We allow calls to this method from any thread.
Assertions.checkNotNull(listener);
- player.addListener(listener);
+ player.addEventListener(listener);
}
@Override
@@ -1097,7 +1097,7 @@ public class SimpleExoPlayer extends BasePlayer
@Override
public void removeListener(Player.EventListener listener) {
// Don't verify application thread. We allow calls to this method from any thread.
- player.removeListener(listener);
+ player.removeEventListener(listener);
}
@Override