diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 7061221f5d..aa71fc257c 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -16,15 +16,15 @@
* ExoPlayer:
* Add suppression of playback on unsuitable audio output devices (e.g. the
built-in speaker on Wear OS devices) when this feature is enabled via
- `ExoPlayer.Builder.setSuppressPlaybackWhenNoSuitableOutputAvailable`.
- The playback suppression reason will be updated as
+ `ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput`. The playback
+ suppression reason will be updated as
`Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT` if playback
is attempted when no suitable audio outputs are available.
* Add handling for auto-resume or auto-pause of playback when audio output
devices are added or removed dynamically during suppressed or ongoing
playback when the playback suppression due to no suitable output has
been enabled via
- `ExoPlayer.Builder.setSuppressPlaybackWhenNoSuitableOutputAvailable`.
+ `ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput`.
* Fix seeking issues in AC4 streams caused by not identifying decode-only
samples correctly
([#11000](https://github.com/google/ExoPlayer/issues/11000)).
diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java
index 7e160316a7..60b62bf358 100644
--- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java
+++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java
@@ -493,7 +493,7 @@ public interface ExoPlayer extends Player {
/* package */ boolean usePlatformDiagnostics;
@Nullable /* package */ Looper playbackLooper;
/* package */ boolean buildCalled;
- /* package */ boolean suppressPlaybackWhenNoSuitableOutputAvailable;
+ /* package */ boolean suppressPlaybackOnUnsuitableOutput;
/**
* Creates a builder.
@@ -714,27 +714,26 @@ public interface ExoPlayer extends Player {
}
/**
- * Sets whether the player should suppress playback when a suitable audio output is not
- * available. An example of an unsuitable audio output is the built-in speaker on a Wear OS
- * device (unless it is explicitly selected by the user).
+ * Sets whether the player should suppress playback that is attempted on an unsuitable output.
+ * An example of an unsuitable audio output is the built-in speaker on a Wear OS device (unless
+ * it is explicitly selected by the user).
*
- *
If called with {@code suppressPlaybackWhenNoSuitableOutputAvailable = true}, then a
- * playback attempt while no suitable output is available will result in calls to {@link
+ *
If called with {@code suppressPlaybackOnUnsuitableOutput = true}, then a playback attempt
+ * on an unsuitable audio output will result in calls to {@link
* Player.Listener#onPlaybackSuppressionReasonChanged(int)} with the value {@link
* Player#PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT}.
*
- * @param suppressPlaybackWhenNoSuitableOutputAvailable Whether the player should suppress the
- * playback when suitable media route is not available.
+ * @param suppressPlaybackOnUnsuitableOutput Whether the player should suppress the playback
+ * when it is attempted on an unsuitable output.
* @return This builder.
* @throws IllegalStateException If {@link #build()} has already been called.
*/
@CanIgnoreReturnValue
@UnstableApi
- public Builder setSuppressPlaybackWhenNoSuitableOutputAvailable(
- boolean suppressPlaybackWhenNoSuitableOutputAvailable) {
+ public Builder setSuppressPlaybackOnUnsuitableOutput(
+ boolean suppressPlaybackOnUnsuitableOutput) {
checkState(!buildCalled);
- this.suppressPlaybackWhenNoSuitableOutputAvailable =
- suppressPlaybackWhenNoSuitableOutputAvailable;
+ this.suppressPlaybackOnUnsuitableOutput = suppressPlaybackOnUnsuitableOutput;
return this;
}
diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java
index feb15eaf80..9c455c0d34 100644
--- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java
+++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java
@@ -176,7 +176,7 @@ import java.util.concurrent.TimeoutException;
private final WifiLockManager wifiLockManager;
private final long detachSurfaceTimeoutMs;
@Nullable private AudioManager audioManager;
- private final boolean suppressPlaybackWhenNoSuitableOutputAvailable;
+ private final boolean suppressPlaybackOnUnsuitableOutput;
private @RepeatMode int repeatMode;
private boolean shuffleModeEnabled;
@@ -279,8 +279,7 @@ import java.util.concurrent.TimeoutException;
this.applicationLooper = builder.looper;
this.clock = builder.clock;
this.wrappingPlayer = wrappingPlayer == null ? this : wrappingPlayer;
- this.suppressPlaybackWhenNoSuitableOutputAvailable =
- builder.suppressPlaybackWhenNoSuitableOutputAvailable;
+ this.suppressPlaybackOnUnsuitableOutput = builder.suppressPlaybackOnUnsuitableOutput;
listeners =
new ListenerSet<>(
applicationLooper,
@@ -389,7 +388,7 @@ import java.util.concurrent.TimeoutException;
audioBecomingNoisyManager.setEnabled(builder.handleAudioBecomingNoisy);
audioFocusManager = new AudioFocusManager(builder.context, eventHandler, componentListener);
audioFocusManager.setAudioAttributes(builder.handleAudioFocus ? audioAttributes : null);
- if (suppressPlaybackWhenNoSuitableOutputAvailable) {
+ if (suppressPlaybackOnUnsuitableOutput) {
audioManager = (AudioManager) applicationContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.registerAudioDeviceCallback(
new NoSuitableOutputPlaybackSuppressionAudioDeviceCallback(), /* handler= */ null);
@@ -2774,7 +2773,7 @@ import java.util.concurrent.TimeoutException;
if (playWhenReady && playerCommand != AudioFocusManager.PLAYER_COMMAND_PLAY_WHEN_READY) {
return Player.PLAYBACK_SUPPRESSION_REASON_TRANSIENT_AUDIO_FOCUS_LOSS;
}
- if (suppressPlaybackWhenNoSuitableOutputAvailable) {
+ if (suppressPlaybackOnUnsuitableOutput) {
if (playWhenReady && !hasSupportedAudioOutput()) {
return Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT;
}
diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/ExoPlayerTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/ExoPlayerTest.java
index d7c86e6ff2..6cb6324e55 100644
--- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/ExoPlayerTest.java
+++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/ExoPlayerTest.java
@@ -13141,9 +13141,7 @@ public final class ExoPlayerTest {
setupConnectedAudioOutput(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER);
List playbackSuppressionList = new ArrayList<>();
ExoPlayer player =
- new TestExoPlayerBuilder(context)
- .setSuppressOutputWhenNoSuitableOutputAvailable(true)
- .build();
+ new TestExoPlayerBuilder(context).setSuppressPlaybackOnUnsuitableOutput(true).build();
player.setMediaItem(
MediaItem.fromUri("asset:///media/mp4/sample_with_increasing_timestamps_360p.mp4"));
player.addListener(
@@ -13177,9 +13175,7 @@ public final class ExoPlayerTest {
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, AudioDeviceInfo.TYPE_BLUETOOTH_A2DP);
List playbackSuppressionList = new ArrayList<>();
ExoPlayer player =
- new TestExoPlayerBuilder(context)
- .setSuppressOutputWhenNoSuitableOutputAvailable(true)
- .build();
+ new TestExoPlayerBuilder(context).setSuppressPlaybackOnUnsuitableOutput(true).build();
player.setMediaItem(
MediaItem.fromUri("asset:///media/mp4/sample_with_increasing_timestamps_360p.mp4"));
player.addListener(
@@ -13214,9 +13210,7 @@ public final class ExoPlayerTest {
setupConnectedAudioOutput(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER);
List playbackSuppressionList = new ArrayList<>();
ExoPlayer player =
- new TestExoPlayerBuilder(context)
- .setSuppressOutputWhenNoSuitableOutputAvailable(true)
- .build();
+ new TestExoPlayerBuilder(context).setSuppressPlaybackOnUnsuitableOutput(true).build();
player.setMediaItem(
MediaItem.fromUri("asset:///media/mp4/sample_with_increasing_timestamps_360p.mp4"));
player.addListener(
@@ -13252,9 +13246,7 @@ public final class ExoPlayerTest {
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, AudioDeviceInfo.TYPE_BLUETOOTH_A2DP);
List playbackSuppressionList = new ArrayList<>();
ExoPlayer player =
- new TestExoPlayerBuilder(context)
- .setSuppressOutputWhenNoSuitableOutputAvailable(true)
- .build();
+ new TestExoPlayerBuilder(context).setSuppressPlaybackOnUnsuitableOutput(true).build();
player.setMediaItem(
MediaItem.fromUri("asset:///media/mp4/sample_with_increasing_timestamps_360p.mp4"));
player.addListener(
@@ -13279,8 +13271,8 @@ public final class ExoPlayerTest {
/**
* Tests playback suppression for playback with only unsuitable route (e.g. builtin speaker) on
- * Wear OS but {@link ExoPlayer.Builder#setSuppressPlaybackWhenNoSuitableOutputAvailable(boolean)}
- * is not called with parameter as TRUE.
+ * Wear OS but {@link ExoPlayer.Builder#setSuppressPlaybackOnUnsuitableOutput(boolean)} is not
+ * called with parameter as TRUE.
*/
@Test
public void
@@ -13319,9 +13311,7 @@ public final class ExoPlayerTest {
addWatchAsSystemFeature();
setupConnectedAudioOutput(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER);
ExoPlayer player =
- new TestExoPlayerBuilder(context)
- .setSuppressOutputWhenNoSuitableOutputAvailable(true)
- .build();
+ new TestExoPlayerBuilder(context).setSuppressPlaybackOnUnsuitableOutput(true).build();
player.setMediaItem(
MediaItem.fromUri("asset:///media/mp4/sample_with_increasing_timestamps_360p.mp4"));
player.prepare();
@@ -13358,9 +13348,7 @@ public final class ExoPlayerTest {
addWatchAsSystemFeature();
setupConnectedAudioOutput(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER);
ExoPlayer player =
- new TestExoPlayerBuilder(context)
- .setSuppressOutputWhenNoSuitableOutputAvailable(true)
- .build();
+ new TestExoPlayerBuilder(context).setSuppressPlaybackOnUnsuitableOutput(true).build();
player.setMediaItem(
MediaItem.fromUri("asset:///media/mp4/sample_with_increasing_timestamps_360p.mp4"));
player.prepare();
@@ -13394,9 +13382,7 @@ public final class ExoPlayerTest {
addWatchAsSystemFeature();
setupConnectedAudioOutput(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER);
ExoPlayer player =
- new TestExoPlayerBuilder(context)
- .setSuppressOutputWhenNoSuitableOutputAvailable(true)
- .build();
+ new TestExoPlayerBuilder(context).setSuppressPlaybackOnUnsuitableOutput(true).build();
player.setMediaItem(
MediaItem.fromUri("asset:///media/mp4/sample_with_increasing_timestamps_360p.mp4"));
player.prepare();
@@ -13429,9 +13415,7 @@ public final class ExoPlayerTest {
throws Exception {
setupConnectedAudioOutput(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER);
ExoPlayer player =
- new TestExoPlayerBuilder(context)
- .setSuppressOutputWhenNoSuitableOutputAvailable(true)
- .build();
+ new TestExoPlayerBuilder(context).setSuppressPlaybackOnUnsuitableOutput(true).build();
player.setMediaItem(
MediaItem.fromUri("asset:///media/mp4/sample_with_increasing_timestamps_360p.mp4"));
player.prepare();
@@ -13469,9 +13453,7 @@ public final class ExoPlayerTest {
setupConnectedAudioOutput(
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, AudioDeviceInfo.TYPE_BLUETOOTH_A2DP);
ExoPlayer player =
- new TestExoPlayerBuilder(context)
- .setSuppressOutputWhenNoSuitableOutputAvailable(true)
- .build();
+ new TestExoPlayerBuilder(context).setSuppressPlaybackOnUnsuitableOutput(true).build();
player.setMediaItem(
MediaItem.fromUri("asset:///media/mp4/sample_with_increasing_timestamps_360p.mp4"));
player.prepare();
@@ -13508,9 +13490,7 @@ public final class ExoPlayerTest {
AudioDeviceInfo.TYPE_BUS,
AudioDeviceInfo.TYPE_BLUETOOTH_A2DP);
ExoPlayer player =
- new TestExoPlayerBuilder(context)
- .setSuppressOutputWhenNoSuitableOutputAvailable(true)
- .build();
+ new TestExoPlayerBuilder(context).setSuppressPlaybackOnUnsuitableOutput(true).build();
player.setMediaItem(
MediaItem.fromUri("asset:///media/mp4/sample_with_increasing_timestamps_360p.mp4"));
player.prepare();
@@ -13547,9 +13527,7 @@ public final class ExoPlayerTest {
AudioDeviceInfo.TYPE_BLE_SPEAKER,
AudioDeviceInfo.TYPE_BLUETOOTH_A2DP);
ExoPlayer player =
- new TestExoPlayerBuilder(context)
- .setSuppressOutputWhenNoSuitableOutputAvailable(true)
- .build();
+ new TestExoPlayerBuilder(context).setSuppressPlaybackOnUnsuitableOutput(true).build();
player.setMediaItem(
MediaItem.fromUri("asset:///media/mp4/sample_with_increasing_timestamps_360p.mp4"));
player.prepare();
@@ -13582,9 +13560,7 @@ public final class ExoPlayerTest {
setupConnectedAudioOutput(
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, AudioDeviceInfo.TYPE_BLUETOOTH_A2DP);
ExoPlayer player =
- new TestExoPlayerBuilder(context)
- .setSuppressOutputWhenNoSuitableOutputAvailable(true)
- .build();
+ new TestExoPlayerBuilder(context).setSuppressPlaybackOnUnsuitableOutput(true).build();
player.setMediaItem(
MediaItem.fromUri("asset:///media/mp4/sample_with_increasing_timestamps_360p.mp4"));
player.prepare();
diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/TestExoPlayerBuilder.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/TestExoPlayerBuilder.java
index 77bda41f20..f2f4cf85a2 100644
--- a/libraries/test_utils/src/main/java/androidx/media3/test/utils/TestExoPlayerBuilder.java
+++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/TestExoPlayerBuilder.java
@@ -303,17 +303,16 @@ public class TestExoPlayerBuilder {
}
/**
- * See {@link ExoPlayer.Builder#setSuppressPlaybackWhenNoSuitableOutputAvailable(boolean)} for
- * details.
+ * See {@link ExoPlayer.Builder#setSuppressPlaybackOnUnsuitableOutput(boolean)} for details.
*
- * @param suppressPlaybackWhenNoSuitableOutputAvailable Whether the player should suppress the
- * playback when suitable media route is not available.
+ * @param suppressPlaybackOnUnsuitableOutput Whether the player should suppress the playback when
+ * it is attempted on an unsuitable output.
* @return This builder.
*/
@CanIgnoreReturnValue
- public TestExoPlayerBuilder setSuppressOutputWhenNoSuitableOutputAvailable(
- boolean suppressPlaybackWhenNoSuitableOutputAvailable) {
- this.suppressPlaybackWhenUnsuitableOutput = suppressPlaybackWhenNoSuitableOutputAvailable;
+ public TestExoPlayerBuilder setSuppressPlaybackOnUnsuitableOutput(
+ boolean suppressPlaybackOnUnsuitableOutput) {
+ this.suppressPlaybackWhenUnsuitableOutput = suppressPlaybackOnUnsuitableOutput;
return this;
}
@@ -354,7 +353,7 @@ public class TestExoPlayerBuilder {
.setSeekBackIncrementMs(seekBackIncrementMs)
.setSeekForwardIncrementMs(seekForwardIncrementMs)
.setDeviceVolumeControlEnabled(deviceVolumeControlEnabled)
- .setSuppressPlaybackWhenNoSuitableOutputAvailable(suppressPlaybackWhenUnsuitableOutput);
+ .setSuppressPlaybackOnUnsuitableOutput(suppressPlaybackWhenUnsuitableOutput);
if (mediaSourceFactory != null) {
builder.setMediaSourceFactory(mediaSourceFactory);
}