diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 93bf29b3bc..9cca7eaf4c 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -36,6 +36,7 @@
* Fix issue where last frame may not be rendered if the last sample with
frames is dequeued without reading the 'end of stream' sample.
([#11079](https://github.com/google/ExoPlayer/issues/11079)).
+ * Add `Builder` for `DeviceInfo` and deprecate existing constructor.
* Session:
* Deprecate 4 volume-controlling methods in `Player` and add overloaded
methods which allow users to specify volume flags:
diff --git a/api.txt b/api.txt
index e7b3f4de74..92b67b5971 100644
--- a/api.txt
+++ b/api.txt
@@ -178,11 +178,18 @@ package androidx.media3.common {
field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
field public static final androidx.media3.common.DeviceInfo UNKNOWN;
- field public final int maxVolume;
- field public final int minVolume;
+ field @IntRange(from=0) public final int maxVolume;
+ field @IntRange(from=0) public final int minVolume;
field @androidx.media3.common.DeviceInfo.PlaybackType public final int playbackType;
}
+ public static final class DeviceInfo.Builder {
+ ctor public DeviceInfo.Builder(@androidx.media3.common.DeviceInfo.PlaybackType int);
+ method public androidx.media3.common.DeviceInfo build();
+ method public androidx.media3.common.DeviceInfo.Builder setMaxVolume(@IntRange(from=0) int);
+ method public androidx.media3.common.DeviceInfo.Builder setMinVolume(@IntRange(from=0) int);
+ }
+
@IntDef({androidx.media3.common.DeviceInfo.PLAYBACK_TYPE_LOCAL, androidx.media3.common.DeviceInfo.PLAYBACK_TYPE_REMOTE}) @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) public static @interface DeviceInfo.PlaybackType {
}
diff --git a/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java b/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java
index f699f6f070..d7dd09ea6d 100644
--- a/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java
+++ b/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java
@@ -85,7 +85,7 @@ public final class CastPlayer extends BasePlayer {
/** The {@link DeviceInfo} returned by {@link #getDeviceInfo() this player}. */
public static final DeviceInfo DEVICE_INFO =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 0);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).build();
static {
MediaLibraryInfo.registerModule("media3.cast");
diff --git a/libraries/common/src/main/java/androidx/media3/common/DeviceInfo.java b/libraries/common/src/main/java/androidx/media3/common/DeviceInfo.java
index c75fcb7cc9..5a8e76c120 100644
--- a/libraries/common/src/main/java/androidx/media3/common/DeviceInfo.java
+++ b/libraries/common/src/main/java/androidx/media3/common/DeviceInfo.java
@@ -19,9 +19,12 @@ import static java.lang.annotation.ElementType.TYPE_USE;
import android.os.Bundle;
import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
import androidx.annotation.Nullable;
+import androidx.media3.common.util.Assertions;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
+import com.google.errorprone.annotations.CanIgnoreReturnValue;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -45,22 +48,83 @@ public final class DeviceInfo implements Bundleable {
public static final int PLAYBACK_TYPE_REMOTE = 1;
/** Unknown DeviceInfo. */
- public static final DeviceInfo UNKNOWN =
- new DeviceInfo(PLAYBACK_TYPE_LOCAL, /* minVolume= */ 0, /* maxVolume= */ 0);
+ public static final DeviceInfo UNKNOWN = new Builder(PLAYBACK_TYPE_LOCAL).build();
+
+ /** Builder for {@link DeviceInfo}. */
+ public static final class Builder {
+
+ private final @PlaybackType int playbackType;
+
+ private int minVolume;
+ private int maxVolume;
+
+ /**
+ * Creates the builder.
+ *
+ * @param playbackType The {@link PlaybackType}.
+ */
+ public Builder(@PlaybackType int playbackType) {
+ this.playbackType = playbackType;
+ }
+
+ /**
+ * Sets the minimum supported device volume.
+ *
+ *
The minimum will be set to {@code 0} if not specified.
+ *
+ * @param minVolume The minimum device volume.
+ * @return This builder.
+ */
+ @CanIgnoreReturnValue
+ public Builder setMinVolume(@IntRange(from = 0) int minVolume) {
+ this.minVolume = minVolume;
+ return this;
+ }
+
+ /**
+ * Sets the maximum supported device volume.
+ *
+ * @param maxVolume The maximum device volume, or {@code 0} to leave the maximum unspecified.
+ * @return This builder.
+ */
+ @CanIgnoreReturnValue
+ public Builder setMaxVolume(@IntRange(from = 0) int maxVolume) {
+ this.maxVolume = maxVolume;
+ return this;
+ }
+
+ /** Builds the {@link DeviceInfo}. */
+ public DeviceInfo build() {
+ Assertions.checkArgument(minVolume <= maxVolume);
+ return new DeviceInfo(this);
+ }
+ }
/** The type of playback. */
public final @PlaybackType int playbackType;
/** The minimum volume that the device supports. */
+ @IntRange(from = 0)
public final int minVolume;
- /** The maximum volume that the device supports. */
+ /** The maximum volume that the device supports, or {@code 0} if unspecified. */
+ @IntRange(from = 0)
public final int maxVolume;
- /** Creates device information. */
+ /**
+ * @deprecated Use {@link Builder} instead.
+ */
@UnstableApi
- public DeviceInfo(@PlaybackType int playbackType, int minVolume, int maxVolume) {
- this.playbackType = playbackType;
- this.minVolume = minVolume;
- this.maxVolume = maxVolume;
+ @Deprecated
+ public DeviceInfo(
+ @PlaybackType int playbackType,
+ @IntRange(from = 0) int minVolume,
+ @IntRange(from = 0) int maxVolume) {
+ this(new Builder(playbackType).setMinVolume(minVolume).setMaxVolume(maxVolume));
+ }
+
+ private DeviceInfo(Builder builder) {
+ this.playbackType = builder.playbackType;
+ this.minVolume = builder.minVolume;
+ this.maxVolume = builder.maxVolume;
}
@Override
@@ -96,9 +160,15 @@ public final class DeviceInfo implements Bundleable {
@Override
public Bundle toBundle() {
Bundle bundle = new Bundle();
- bundle.putInt(FIELD_PLAYBACK_TYPE, playbackType);
- bundle.putInt(FIELD_MIN_VOLUME, minVolume);
- bundle.putInt(FIELD_MAX_VOLUME, maxVolume);
+ if (playbackType != PLAYBACK_TYPE_LOCAL) {
+ bundle.putInt(FIELD_PLAYBACK_TYPE, playbackType);
+ }
+ if (minVolume != 0) {
+ bundle.putInt(FIELD_MIN_VOLUME, minVolume);
+ }
+ if (maxVolume != 0) {
+ bundle.putInt(FIELD_MAX_VOLUME, maxVolume);
+ }
return bundle;
}
@@ -110,6 +180,9 @@ public final class DeviceInfo implements Bundleable {
bundle.getInt(FIELD_PLAYBACK_TYPE, /* defaultValue= */ PLAYBACK_TYPE_LOCAL);
int minVolume = bundle.getInt(FIELD_MIN_VOLUME, /* defaultValue= */ 0);
int maxVolume = bundle.getInt(FIELD_MAX_VOLUME, /* defaultValue= */ 0);
- return new DeviceInfo(playbackType, minVolume, maxVolume);
+ return new DeviceInfo.Builder(playbackType)
+ .setMinVolume(minVolume)
+ .setMaxVolume(maxVolume)
+ .build();
};
}
diff --git a/libraries/common/src/main/java/androidx/media3/common/Player.java b/libraries/common/src/main/java/androidx/media3/common/Player.java
index f9766a2fb7..9875690658 100644
--- a/libraries/common/src/main/java/androidx/media3/common/Player.java
+++ b/libraries/common/src/main/java/androidx/media3/common/Player.java
@@ -3135,6 +3135,9 @@ public interface Player {
/**
* Increases the volume of the device.
*
+ *
The {@link #getDeviceVolume()} device volume cannot be increased above {@link
+ * DeviceInfo#maxVolume}, if defined.
+ *
*
This method must only be called if {@link #COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS} is
* {@linkplain #getAvailableCommands() available}.
*
@@ -3151,6 +3154,9 @@ public interface Player {
/**
* Decreases the volume of the device.
*
+ *
The {@link #getDeviceVolume()} device volume cannot be decreased below {@link
+ * DeviceInfo#minVolume}.
+ *
*
This method must only be called if {@link #COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS} is
* {@linkplain #getAvailableCommands() available}.
*
diff --git a/libraries/common/src/test/java/androidx/media3/common/DeviceInfoTest.java b/libraries/common/src/test/java/androidx/media3/common/DeviceInfoTest.java
index 3866b69149..b6cd9cb035 100644
--- a/libraries/common/src/test/java/androidx/media3/common/DeviceInfoTest.java
+++ b/libraries/common/src/test/java/androidx/media3/common/DeviceInfoTest.java
@@ -28,7 +28,10 @@ public class DeviceInfoTest {
@Test
public void roundTripViaBundle_yieldsEqualInstance() {
DeviceInfo deviceInfo =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 1, /* maxVolume= */ 9);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE)
+ .setMinVolume(1)
+ .setMaxVolume(9)
+ .build();
assertThat(DeviceInfo.CREATOR.fromBundle(deviceInfo.toBundle())).isEqualTo(deviceInfo);
}
diff --git a/libraries/common/src/test/java/androidx/media3/common/SimpleBasePlayerTest.java b/libraries/common/src/test/java/androidx/media3/common/SimpleBasePlayerTest.java
index 8727a1be68..c672d7bf74 100644
--- a/libraries/common/src/test/java/androidx/media3/common/SimpleBasePlayerTest.java
+++ b/libraries/common/src/test/java/androidx/media3/common/SimpleBasePlayerTest.java
@@ -109,8 +109,7 @@ public class SimpleBasePlayerTest {
ImmutableList.of(new Cue.Builder().setText("text").build()),
/* presentationTimeUs= */ 123))
.setDeviceInfo(
- new DeviceInfo(
- DeviceInfo.PLAYBACK_TYPE_LOCAL, /* minVolume= */ 3, /* maxVolume= */ 7))
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_LOCAL).setMaxVolume(7).build())
.setIsDeviceMuted(true)
.setSurfaceSize(new Size(480, 360))
.setNewlyRenderedFirstFrame(true)
@@ -225,7 +224,7 @@ public class SimpleBasePlayerTest {
Metadata timedMetadata = new Metadata(new FakeMetadataEntry("data"));
Size surfaceSize = new Size(480, 360);
DeviceInfo deviceInfo =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_LOCAL, /* minVolume= */ 3, /* maxVolume= */ 7);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_LOCAL).setMaxVolume(7).build();
ImmutableList playlist =
ImmutableList.of(
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object()).build(),
@@ -811,7 +810,7 @@ public class SimpleBasePlayerTest {
ImmutableList.of(new Cue.Builder().setText("text").build()),
/* presentationTimeUs= */ 123);
DeviceInfo deviceInfo =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_LOCAL, /* minVolume= */ 3, /* maxVolume= */ 7);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_LOCAL).setMaxVolume(7).build();
MediaMetadata playlistMetadata = new MediaMetadata.Builder().setArtist("artist").build();
SimpleBasePlayer.PositionSupplier contentPositionSupplier = () -> 456;
SimpleBasePlayer.PositionSupplier contentBufferedPositionSupplier = () -> 499;
@@ -1276,7 +1275,7 @@ public class SimpleBasePlayerTest {
new Metadata(/* presentationTimeUs= */ 42, new FakeMetadataEntry("data"));
Size surfaceSize = new Size(480, 360);
DeviceInfo deviceInfo =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_LOCAL, /* minVolume= */ 3, /* maxVolume= */ 7);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_LOCAL).setMaxVolume(7).build();
MediaMetadata playlistMetadata = new MediaMetadata.Builder().setArtist("artist").build();
State state2 =
new State.Builder()
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 7b98ece44d..12fda0a810 100644
--- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java
+++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java
@@ -2791,10 +2791,10 @@ import java.util.concurrent.TimeoutException;
}
private static DeviceInfo createDeviceInfo(StreamVolumeManager streamVolumeManager) {
- return new DeviceInfo(
- DeviceInfo.PLAYBACK_TYPE_LOCAL,
- streamVolumeManager.getMinVolume(),
- streamVolumeManager.getMaxVolume());
+ return new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_LOCAL)
+ .setMinVolume(streamVolumeManager.getMinVolume())
+ .setMaxVolume(streamVolumeManager.getMaxVolume())
+ .build();
}
private static int getPlayWhenReadyChangeReason(boolean playWhenReady, int playerCommand) {
diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java
index 57484c0da1..91e1cf5998 100644
--- a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java
+++ b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java
@@ -1399,7 +1399,10 @@ import org.checkerframework.checker.nullness.qual.NonNull;
dispatchRemoteSessionTaskWithPlayerCommand(
(iSession, seq) -> iSession.setDeviceVolume(controllerStub, seq, volume));
- if (playerInfo.deviceVolume != volume) {
+ DeviceInfo deviceInfo = getDeviceInfo();
+ if (playerInfo.deviceVolume != volume
+ && deviceInfo.minVolume <= volume
+ && (deviceInfo.maxVolume == 0 || volume <= deviceInfo.maxVolume)) {
playerInfo = playerInfo.copyWithDeviceVolume(volume, playerInfo.deviceMuted);
listeners.queueEvent(
@@ -1418,7 +1421,10 @@ import org.checkerframework.checker.nullness.qual.NonNull;
dispatchRemoteSessionTaskWithPlayerCommand(
(iSession, seq) -> iSession.setDeviceVolumeWithFlags(controllerStub, seq, volume, flags));
- if (playerInfo.deviceVolume != volume) {
+ DeviceInfo deviceInfo = getDeviceInfo();
+ if (playerInfo.deviceVolume != volume
+ && deviceInfo.minVolume <= volume
+ && (deviceInfo.maxVolume == 0 || volume <= deviceInfo.maxVolume)) {
playerInfo = playerInfo.copyWithDeviceVolume(volume, playerInfo.deviceMuted);
listeners.queueEvent(
@@ -1442,7 +1448,8 @@ import org.checkerframework.checker.nullness.qual.NonNull;
(iSession, seq) -> iSession.increaseDeviceVolume(controllerStub, seq));
int newDeviceVolume = playerInfo.deviceVolume + 1;
- if (newDeviceVolume <= getDeviceInfo().maxVolume) {
+ int maxVolume = getDeviceInfo().maxVolume;
+ if (maxVolume == 0 || newDeviceVolume <= maxVolume) {
playerInfo = playerInfo.copyWithDeviceVolume(newDeviceVolume, playerInfo.deviceMuted);
listeners.queueEvent(
/* eventFlag= */ Player.EVENT_DEVICE_VOLUME_CHANGED,
@@ -1461,7 +1468,8 @@ import org.checkerframework.checker.nullness.qual.NonNull;
(iSession, seq) -> iSession.increaseDeviceVolumeWithFlags(controllerStub, seq, flags));
int newDeviceVolume = playerInfo.deviceVolume + 1;
- if (newDeviceVolume <= getDeviceInfo().maxVolume) {
+ int maxVolume = getDeviceInfo().maxVolume;
+ if (maxVolume == 0 || newDeviceVolume <= maxVolume) {
playerInfo = playerInfo.copyWithDeviceVolume(newDeviceVolume, playerInfo.deviceMuted);
listeners.queueEvent(
/* eventFlag= */ Player.EVENT_DEVICE_VOLUME_CHANGED,
diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplLegacy.java b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplLegacy.java
index 52bcd02bd8..0e8659e322 100644
--- a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplLegacy.java
+++ b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplLegacy.java
@@ -1063,7 +1063,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
DeviceInfo deviceInfo = getDeviceInfo();
int minVolume = deviceInfo.minVolume;
int maxVolume = deviceInfo.maxVolume;
- if (minVolume <= volume && volume <= maxVolume) {
+ if (minVolume <= volume && (maxVolume == 0 || volume <= maxVolume)) {
boolean isDeviceMuted = isDeviceMuted();
ControllerInfo maskedControllerInfo =
new ControllerInfo(
@@ -1093,7 +1093,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
public void increaseDeviceVolume(@C.VolumeFlags int flags) {
int volume = getDeviceVolume();
int maxVolume = getDeviceInfo().maxVolume;
- if (volume + 1 <= maxVolume) {
+ if (maxVolume == 0 || volume + 1 <= maxVolume) {
boolean isDeviceMuted = isDeviceMuted();
ControllerInfo maskedControllerInfo =
diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaUtils.java b/libraries/session/src/main/java/androidx/media3/session/MediaUtils.java
index d2631c8ddb..5f6adff951 100644
--- a/libraries/session/src/main/java/androidx/media3/session/MediaUtils.java
+++ b/libraries/session/src/main/java/androidx/media3/session/MediaUtils.java
@@ -1335,13 +1335,13 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
if (playbackInfoCompat == null) {
return DeviceInfo.UNKNOWN;
}
- return new DeviceInfo(
- playbackInfoCompat.getPlaybackType()
- == MediaControllerCompat.PlaybackInfo.PLAYBACK_TYPE_REMOTE
- ? DeviceInfo.PLAYBACK_TYPE_REMOTE
- : DeviceInfo.PLAYBACK_TYPE_LOCAL,
- /* minVolume= */ 0,
- playbackInfoCompat.getMaxVolume());
+ return new DeviceInfo.Builder(
+ playbackInfoCompat.getPlaybackType()
+ == MediaControllerCompat.PlaybackInfo.PLAYBACK_TYPE_REMOTE
+ ? DeviceInfo.PLAYBACK_TYPE_REMOTE
+ : DeviceInfo.PLAYBACK_TYPE_LOCAL)
+ .setMaxVolume(playbackInfoCompat.getMaxVolume())
+ .build();
}
/** Converts {@link MediaControllerCompat.PlaybackInfo} to device volume. */
diff --git a/libraries/session/src/test/java/androidx/media3/session/PlayerInfoTest.java b/libraries/session/src/test/java/androidx/media3/session/PlayerInfoTest.java
index 8029205deb..1c84a96921 100644
--- a/libraries/session/src/test/java/androidx/media3/session/PlayerInfoTest.java
+++ b/libraries/session/src/test/java/androidx/media3/session/PlayerInfoTest.java
@@ -136,8 +136,7 @@ public class PlayerInfoTest {
new int[] {C.FORMAT_EXCEEDS_CAPABILITIES},
/* trackSelected= */ new boolean[] {true}))))
.setDeviceInfo(
- new DeviceInfo(
- DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 4, /* maxVolume= */ 10))
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(10).build())
.setDiscontinuityReason(Player.DISCONTINUITY_REASON_REMOVE)
.setIsLoading(true)
.setIsPlaying(true)
diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java
index fe97b83768..19aafd7c1c 100644
--- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java
+++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java
@@ -411,7 +411,7 @@ public class MediaControllerCompatCallbackWithMediaSessionTest {
@Test
public void setPlayer_playbackTypeChangedToRemote() throws Exception {
DeviceInfo deviceInfo =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 25);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(25).build();
int legacyPlaybackType = MediaControllerCompat.PlaybackInfo.PLAYBACK_TYPE_REMOTE;
int deviceVolume = 10;
CountDownLatch playbackInfoNotified = new CountDownLatch(1);
@@ -445,12 +445,12 @@ public class MediaControllerCompatCallbackWithMediaSessionTest {
@Test
public void setPlayer_playbackTypeChangedToLocal() throws Exception {
DeviceInfo deviceInfo =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 10);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(10).build();
Bundle playerConfig =
new RemoteMediaSession.MockPlayerConfigBuilder().setDeviceInfo(deviceInfo).build();
session.setPlayer(playerConfig);
DeviceInfo deviceInfoToUpdate =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_LOCAL, /* minVolume= */ 0, /* maxVolume= */ 10);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_LOCAL).setMaxVolume(10).build();
int legacyPlaybackTypeToUpdate = MediaControllerCompat.PlaybackInfo.PLAYBACK_TYPE_LOCAL;
int legacyStream = AudioManager.STREAM_RING;
AudioAttributesCompat attrsCompat =
@@ -496,7 +496,7 @@ public class MediaControllerCompatCallbackWithMediaSessionTest {
@Test
public void setPlayer_playbackTypeNotChanged_local() throws Exception {
DeviceInfo deviceInfo =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_LOCAL, /* minVolume= */ 0, /* maxVolume= */ 10);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_LOCAL).setMaxVolume(10).build();
int legacyPlaybackType = MediaControllerCompat.PlaybackInfo.PLAYBACK_TYPE_LOCAL;
int legacyStream = AudioManager.STREAM_RING;
AudioAttributesCompat attrsCompat =
@@ -542,7 +542,7 @@ public class MediaControllerCompatCallbackWithMediaSessionTest {
@Test
public void setPlayer_playbackTypeNotChanged_remote() throws Exception {
DeviceInfo deviceInfo =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 10);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(10).build();
Bundle playerConfig =
new RemoteMediaSession.MockPlayerConfigBuilder()
.setDeviceInfo(deviceInfo)
@@ -550,7 +550,7 @@ public class MediaControllerCompatCallbackWithMediaSessionTest {
.build();
session.setPlayer(playerConfig);
DeviceInfo deviceInfoToUpdate =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 25);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(25).build();
int legacyPlaybackTypeToUpdate = MediaControllerCompat.PlaybackInfo.PLAYBACK_TYPE_REMOTE;
int deviceVolumeToUpdate = 10;
CountDownLatch playbackInfoNotified = new CountDownLatch(1);
@@ -1316,7 +1316,7 @@ public class MediaControllerCompatCallbackWithMediaSessionTest {
@Test
public void onAudioInfoChanged_isCalledByVolumeChange() throws Exception {
DeviceInfo deviceInfo =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 10);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(10).build();
Bundle playerConfig =
new RemoteMediaSession.MockPlayerConfigBuilder()
.setDeviceInfo(deviceInfo)
diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerTest.java
index 1eb583db5b..7c66cf1a93 100644
--- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerTest.java
+++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerTest.java
@@ -2767,7 +2767,7 @@ public class MediaControllerListenerTest {
threadTestRule.getHandler().postAndSync(() -> controller.addListener(listener));
DeviceInfo deviceInfo =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 100);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(100).build();
Bundle playerConfig =
new RemoteMediaSession.MockPlayerConfigBuilder().setDeviceInfo(deviceInfo).build();
remoteSession.setPlayer(playerConfig);
@@ -2806,7 +2806,7 @@ public class MediaControllerListenerTest {
threadTestRule.getHandler().postAndSync(() -> controller.addListener(listener));
DeviceInfo deviceInfo =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 1, /* maxVolume= */ 23);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(23).build();
remoteSession.getMockPlayer().notifyDeviceInfoChanged(deviceInfo);
assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue();
@@ -2819,7 +2819,7 @@ public class MediaControllerListenerTest {
@Test
public void onDeviceVolumeChanged_isCalledByDeviceVolumeChange() throws Exception {
DeviceInfo deviceInfo =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 100);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(100).build();
Bundle playerConfig =
new RemoteMediaSession.MockPlayerConfigBuilder()
.setDeviceInfo(deviceInfo)
diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerStateMaskingTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerStateMaskingTest.java
index f2c6648071..03642c0d85 100644
--- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerStateMaskingTest.java
+++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerStateMaskingTest.java
@@ -486,8 +486,7 @@ public class MediaControllerStateMaskingTest {
new RemoteMediaSession.MockPlayerConfigBuilder()
.setDeviceVolume(1)
.setDeviceInfo(
- new DeviceInfo(
- DeviceInfo.PLAYBACK_TYPE_LOCAL, /* minVolume= */ 0, /* maxVolume= */ 2))
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_LOCAL).setMaxVolume(2).build())
.build();
remoteSession.setPlayer(playerConfig);
diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionCallbackWithMediaControllerCompatTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionCallbackWithMediaControllerCompatTest.java
index c6220bfd27..21ad778b88 100644
--- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionCallbackWithMediaControllerCompatTest.java
+++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionCallbackWithMediaControllerCompatTest.java
@@ -673,8 +673,7 @@ public class MediaSessionCallbackWithMediaControllerCompatTest {
handler.postAndSync(
() -> {
remotePlayer.deviceInfo =
- new DeviceInfo(
- DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 100);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(100).build();
remotePlayer.deviceVolume = 23;
session.setPlayer(remotePlayer);
});
@@ -702,8 +701,7 @@ public class MediaSessionCallbackWithMediaControllerCompatTest {
handler.postAndSync(
() -> {
remotePlayer.deviceInfo =
- new DeviceInfo(
- DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 100);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(100).build();
remotePlayer.deviceVolume = 23;
session.setPlayer(remotePlayer);
});
@@ -735,8 +733,7 @@ public class MediaSessionCallbackWithMediaControllerCompatTest {
handler.postAndSync(
() -> {
remotePlayer.deviceInfo =
- new DeviceInfo(
- DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 100);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(100).build();
remotePlayer.deviceVolume = 23;
session.setPlayer(remotePlayer);
});
@@ -761,8 +758,7 @@ public class MediaSessionCallbackWithMediaControllerCompatTest {
handler.postAndSync(
() -> {
remotePlayer.deviceInfo =
- new DeviceInfo(
- DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 100);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(100).build();
remotePlayer.deviceVolume = 23;
session.setPlayer(remotePlayer);
});
@@ -792,8 +788,7 @@ public class MediaSessionCallbackWithMediaControllerCompatTest {
handler.postAndSync(
() -> {
remotePlayer.deviceInfo =
- new DeviceInfo(
- DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 100);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(100).build();
remotePlayer.deviceVolume = 23;
session.setPlayer(remotePlayer);
});
@@ -819,8 +814,7 @@ public class MediaSessionCallbackWithMediaControllerCompatTest {
handler.postAndSync(
() -> {
remotePlayer.deviceInfo =
- new DeviceInfo(
- DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 100);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(100).build();
remotePlayer.deviceVolume = 23;
session.setPlayer(remotePlayer);
});
diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionPermissionTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionPermissionTest.java
index b716f37bfb..baee7aa5d4 100644
--- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionPermissionTest.java
+++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionPermissionTest.java
@@ -279,7 +279,7 @@ public class MediaSessionPermissionTest {
.build();
// Set remote device info to ensure we also cover the volume provider compat setup.
mockPlayer.deviceInfo =
- new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 100);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(100).build();
Player player =
new ForwardingPlayer(mockPlayer) {
@Override
diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionPlayerTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionPlayerTest.java
index 6ebf428658..35a8d9a9ff 100644
--- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionPlayerTest.java
+++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionPlayerTest.java
@@ -842,8 +842,7 @@ public class MediaSessionPlayerTest {
.postAndSync(
() -> {
player.deviceInfo =
- new DeviceInfo(
- DeviceInfo.PLAYBACK_TYPE_REMOTE, /* minVolume= */ 0, /* maxVolume= */ 100);
+ new DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).setMaxVolume(100).build();
player.notifyDeviceInfoChanged();
});
}