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();