From d4be30b04dd7a7185ef197438ea1f552b3ec9bb5 Mon Sep 17 00:00:00 2001 From: ibaker Date: Fri, 12 Jan 2024 08:58:48 -0800 Subject: [PATCH] Mark `CompositeSequenceableLoader` `final` Subclasses of this component can customize it by wrapping with the decorator pattern, and a custom `CompositeSequencableLoaderFactory` allows access to the list of delegate `SequenceableLoader` instances. The `final` keyword was removed as part of but this component never ended up being subclassed within the library. Making this class `final` makes upcoming changes easier to reason about. PiperOrigin-RevId: 597853429 --- RELEASENOTES.md | 6 ++++++ .../exoplayer/source/CompositeSequenceableLoader.java | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 5cdc5f5edf..84a6e2a5df 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -35,6 +35,12 @@ * Implement `HttpEngineDataSource`, an `HttpDataSource` using the [HttpEngine](https://developer.android.com/reference/android/net/http/HttpEngine) API. + * Prevent subclassing `CompositeSequenceableLoader`. This component was + [previously made extensible](https://github.com/androidx/media/commit/0de57cbfae7165dd3bb829e323d089cd312b4b1b) + but was never subclassed within the library. Customizations can be done + by wrapping an instance using the + [decorator pattern](https://en.wikipedia.org/wiki/Decorator_pattern) and + implementing a custom `CompositeSequenceableLoaderFactory`. * Transformer: * Add support for flattening H.265/HEVC SEF slow motion videos. * Increase transmuxing speed, especially for 'remove video' edits. diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/CompositeSequenceableLoader.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/CompositeSequenceableLoader.java index cc97d21f5e..ae8cd9dc71 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/CompositeSequenceableLoader.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/CompositeSequenceableLoader.java @@ -23,16 +23,16 @@ import androidx.media3.exoplayer.LoadingInfo; /** A {@link SequenceableLoader} that encapsulates multiple other {@link SequenceableLoader}s. */ @UnstableApi -public class CompositeSequenceableLoader implements SequenceableLoader { +public final class CompositeSequenceableLoader implements SequenceableLoader { - protected final SequenceableLoader[] loaders; + private final SequenceableLoader[] loaders; public CompositeSequenceableLoader(SequenceableLoader[] loaders) { this.loaders = loaders; } @Override - public final long getBufferedPositionUs() { + public long getBufferedPositionUs() { long bufferedPositionUs = Long.MAX_VALUE; for (SequenceableLoader loader : loaders) { long loaderBufferedPositionUs = loader.getBufferedPositionUs(); @@ -44,7 +44,7 @@ public class CompositeSequenceableLoader implements SequenceableLoader { } @Override - public final long getNextLoadPositionUs() { + public long getNextLoadPositionUs() { long nextLoadPositionUs = Long.MAX_VALUE; for (SequenceableLoader loader : loaders) { long loaderNextLoadPositionUs = loader.getNextLoadPositionUs(); @@ -56,7 +56,7 @@ public class CompositeSequenceableLoader implements SequenceableLoader { } @Override - public final void reevaluateBuffer(long positionUs) { + public void reevaluateBuffer(long positionUs) { for (SequenceableLoader loader : loaders) { loader.reevaluateBuffer(positionUs); }