diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java index bbe66e8a2f..0e2b2526d8 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java @@ -1320,6 +1320,13 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @CanIgnoreReturnValue + @Override + public Builder setAudioOffloadPreferences(AudioOffloadPreferences audioOffloadPreferences) { + super.setAudioOffloadPreferences(audioOffloadPreferences); + return this; + } + /** * Sets whether to allow adaptive audio selections where adaptation may not be completely * seamless. @@ -1421,6 +1428,15 @@ public class DefaultTrackSelector extends MappingTrackSelector return setIgnoredTextSelectionFlags(disabledTextTrackSelectionFlags); } + // Image + + @CanIgnoreReturnValue + @Override + public Builder setPrioritizeImageOverVideoEnabled(boolean isPrioritizeImageOverVideoEnabled) { + super.setPrioritizeImageOverVideoEnabled(isPrioritizeImageOverVideoEnabled); + return this; + } + // General @CanIgnoreReturnValue diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java index 4ef2a3de51..c743410de3 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java @@ -3038,12 +3038,32 @@ public final class DefaultTrackSelectorTest { assertThat(selectionOverrideFromBundle).isEqualTo(selectionOverrideToBundle); } + /** + * {@link DefaultTrackSelector.Parameters.Builder} must override every method in {@link + * TrackSelectionParameters.Builder} in order to 'fix' the return type to correctly allow chaining + * the method calls. + */ + @Test + public void parametersBuilderOverridesAllTrackSelectionParametersBuilderMethods() + throws Exception { + List methods = TestUtil.getPublicMethods(TrackSelectionParameters.Builder.class); + for (Method method : methods) { + Method declaredMethod = + Parameters.Builder.class.getDeclaredMethod(method.getName(), method.getParameterTypes()); + assertThat(declaredMethod.getDeclaringClass()).isEqualTo(Parameters.Builder.class); + if (method.getReturnType().equals(TrackSelectionParameters.Builder.class)) { + assertThat(declaredMethod.getReturnType()).isEqualTo(Parameters.Builder.class); + } + } + } + /** * The deprecated {@link DefaultTrackSelector.ParametersBuilder} is implemented by delegating to * an instance of {@link DefaultTrackSelector.Parameters.Builder}. However, it also extends * {@link TrackSelectionParameters.Builder}, and for the delegation-pattern to work correctly it * needs to override every setter method from the superclass (otherwise the setter won't be - * propagated to the delegate). This test ensures that invariant. + * propagated to the delegate). This test ensures that invariant. It also ensures the return type + * is updated to correctly allow chaining the method calls. * *

The test can be removed when the deprecated {@link DefaultTrackSelector.ParametersBuilder} * is removed. @@ -3054,11 +3074,15 @@ public final class DefaultTrackSelectorTest { throws Exception { List methods = TestUtil.getPublicMethods(TrackSelectionParameters.Builder.class); for (Method method : methods) { - assertThat( - DefaultTrackSelector.ParametersBuilder.class - .getDeclaredMethod(method.getName(), method.getParameterTypes()) - .getDeclaringClass()) + Method declaredMethod = + DefaultTrackSelector.ParametersBuilder.class.getDeclaredMethod( + method.getName(), method.getParameterTypes()); + assertThat(declaredMethod.getDeclaringClass()) .isEqualTo(DefaultTrackSelector.ParametersBuilder.class); + if (method.getReturnType().equals(TrackSelectionParameters.Builder.class)) { + assertThat(declaredMethod.getReturnType()) + .isEqualTo(DefaultTrackSelector.ParametersBuilder.class); + } } }