diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 91dc983f48..429ab4b1c2 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -24,6 +24,8 @@
* Remove `CacheDataSourceFactory`. Use `CacheDataSource.Factory` instead.
* Remove `CacheDataSinkFactory`. Use `CacheDataSink.Factory` instead.
* Remove `FileDataSourceFactory`. Use `FileDataSource.Factory` instead.
+ * Remove `SimpleExoPlayer.addMetadataOutput` and `removeMetadataOutput`.
+ Use `Player.addListener` and `Player.Listener` instead.
### 2.15.0 (2021-08-10)
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 1a51a89baf..5040d84e63 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
@@ -26,7 +26,6 @@ import androidx.annotation.Nullable;
import com.google.android.exoplayer2.audio.AudioAttributes;
import com.google.android.exoplayer2.audio.AudioListener;
import com.google.android.exoplayer2.metadata.Metadata;
-import com.google.android.exoplayer2.metadata.MetadataOutput;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.text.Cue;
import com.google.android.exoplayer2.text.TextOutput;
@@ -871,8 +870,7 @@ public interface Player {
*
*
All methods have no-op default implementations to allow selective overrides.
*/
- interface Listener
- extends VideoListener, AudioListener, TextOutput, MetadataOutput, EventListener {
+ interface Listener extends VideoListener, AudioListener, TextOutput, EventListener {
@Override
default void onTimelineChanged(Timeline timeline, @TimelineChangeReason int reason) {}
@@ -963,7 +961,11 @@ public interface Player {
@Override
default void onCues(List cues) {}
- @Override
+ /**
+ * Called when there is metadata associated with the current playback time.
+ *
+ * @param metadata The metadata.
+ */
default void onMetadata(Metadata metadata) {}
@Override
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 fff434fb99..fa151ec271 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
@@ -36,7 +36,6 @@ import com.google.android.exoplayer2.audio.DefaultAudioSink;
import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer;
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.extractor.ExtractorsFactory;
-import com.google.android.exoplayer2.metadata.MetadataOutput;
import com.google.android.exoplayer2.metadata.MetadataRenderer;
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory;
import com.google.android.exoplayer2.source.MediaSource;
@@ -447,28 +446,6 @@ public interface ExoPlayer extends Player {
List getCurrentCues();
}
- /** The metadata component of an {@link ExoPlayer}. */
- interface MetadataComponent {
-
- /**
- * 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 {
@@ -1034,12 +1011,6 @@ public interface ExoPlayer extends Player {
@Nullable
TextComponent getTextComponent();
- /**
- * Returns the component of this player for metadata output, or null if metadata is not supported.
- */
- @Nullable
- MetadataComponent getMetadataComponent();
-
/** Returns the component of this player for playback device, or null if it's not supported. */
@Nullable
DeviceComponent getDeviceComponent();
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 ad09ee28fb..69f59c6925 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
@@ -291,12 +291,6 @@ import java.util.concurrent.CopyOnWriteArraySet;
return null;
}
- @Override
- @Nullable
- public MetadataComponent getMetadataComponent() {
- return null;
- }
-
@Override
@Nullable
public DeviceComponent getDeviceComponent() {
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 6f10613cfa..7aa7084bb1 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
@@ -97,7 +97,6 @@ public class SimpleExoPlayer extends BasePlayer
ExoPlayer.AudioComponent,
ExoPlayer.VideoComponent,
ExoPlayer.TextComponent,
- ExoPlayer.MetadataComponent,
ExoPlayer.DeviceComponent {
/** @deprecated Use {@link ExoPlayer.Builder} instead. */
@@ -430,8 +429,7 @@ public class SimpleExoPlayer extends BasePlayer
private final CopyOnWriteArraySet videoListeners;
private final CopyOnWriteArraySet audioListeners;
private final CopyOnWriteArraySet textOutputs;
- private final CopyOnWriteArraySet metadataOutputs;
- private final CopyOnWriteArraySet deviceListeners;
+ private final CopyOnWriteArraySet listeners;
private final AnalyticsCollector analyticsCollector;
private final AudioBecomingNoisyManager audioBecomingNoisyManager;
private final AudioFocusManager audioFocusManager;
@@ -514,8 +512,7 @@ public class SimpleExoPlayer extends BasePlayer
videoListeners = new CopyOnWriteArraySet<>();
audioListeners = new CopyOnWriteArraySet<>();
textOutputs = new CopyOnWriteArraySet<>();
- metadataOutputs = new CopyOnWriteArraySet<>();
- deviceListeners = new CopyOnWriteArraySet<>();
+ listeners = new CopyOnWriteArraySet<>();
Handler eventHandler = new Handler(builder.looper);
renderers =
builder.renderersFactory.createRenderers(
@@ -634,12 +631,6 @@ public class SimpleExoPlayer extends BasePlayer
return this;
}
- @Override
- @Nullable
- public MetadataComponent getMetadataComponent() {
- return this;
- }
-
@Override
@Nullable
public DeviceComponent getDeviceComponent() {
@@ -1109,21 +1100,6 @@ public class SimpleExoPlayer extends BasePlayer
return currentCues;
}
- @Deprecated
- @Override
- public void addMetadataOutput(MetadataOutput output) {
- // Don't verify application thread. We allow calls to this method from any thread.
- Assertions.checkNotNull(output);
- metadataOutputs.add(output);
- }
-
- @Deprecated
- @Override
- public void removeMetadataOutput(MetadataOutput output) {
- // Don't verify application thread. We allow calls to this method from any thread.
- metadataOutputs.remove(output);
- }
-
// ExoPlayer implementation
@Override
@@ -1147,8 +1123,7 @@ public class SimpleExoPlayer extends BasePlayer
addAudioListener(listener);
addVideoListener(listener);
addTextOutput(listener);
- addMetadataOutput(listener);
- deviceListeners.add(listener);
+ listeners.add(listener);
EventListener eventListener = listener;
addListener(eventListener);
}
@@ -1167,8 +1142,7 @@ public class SimpleExoPlayer extends BasePlayer
removeAudioListener(listener);
removeVideoListener(listener);
removeTextOutput(listener);
- removeMetadataOutput(listener);
- deviceListeners.remove(listener);
+ listeners.remove(listener);
EventListener eventListener = listener;
removeListener(eventListener);
}
@@ -2132,8 +2106,9 @@ public class SimpleExoPlayer extends BasePlayer
public void onMetadata(Metadata metadata) {
analyticsCollector.onMetadata(metadata);
player.onMetadata(metadata);
- for (MetadataOutput metadataOutput : metadataOutputs) {
- metadataOutput.onMetadata(metadata);
+ // TODO(internal b/187152483): Events should be dispatched via ListenerSet
+ for (Listener listener : listeners) {
+ listener.onMetadata(metadata);
}
}
@@ -2228,8 +2203,8 @@ public class SimpleExoPlayer extends BasePlayer
if (!deviceInfo.equals(SimpleExoPlayer.this.deviceInfo)) {
SimpleExoPlayer.this.deviceInfo = deviceInfo;
// TODO(internal b/187152483): Events should be dispatched via ListenerSet
- for (Listener deviceListener : deviceListeners) {
- deviceListener.onDeviceInfoChanged(deviceInfo);
+ for (Listener listener : listeners) {
+ listener.onDeviceInfoChanged(deviceInfo);
}
}
}
@@ -2237,8 +2212,8 @@ public class SimpleExoPlayer extends BasePlayer
@Override
public void onStreamVolumeChanged(int streamVolume, boolean streamMuted) {
// TODO(internal b/187152483): Events should be dispatched via ListenerSet
- for (Listener deviceListener : deviceListeners) {
- deviceListener.onDeviceVolumeChanged(streamVolume, streamMuted);
+ for (Listener listener : listeners) {
+ listener.onDeviceVolumeChanged(streamVolume, streamMuted);
}
}
diff --git a/library/common/src/main/java/com/google/android/exoplayer2/metadata/MetadataOutput.java b/library/core/src/main/java/com/google/android/exoplayer2/metadata/MetadataOutput.java
similarity index 100%
rename from library/common/src/main/java/com/google/android/exoplayer2/metadata/MetadataOutput.java
rename to library/core/src/main/java/com/google/android/exoplayer2/metadata/MetadataOutput.java
diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java
index 488fa3fb11..8445c10c2d 100644
--- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java
+++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java
@@ -65,11 +65,6 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer {
throw new UnsupportedOperationException();
}
- @Override
- public MetadataComponent getMetadataComponent() {
- throw new UnsupportedOperationException();
- }
-
@Override
public DeviceComponent getDeviceComponent() {
throw new UnsupportedOperationException();