From d9fd8f4310bd921a9d368dc63dbeb2f43fd92390 Mon Sep 17 00:00:00 2001 From: tonihei Date: Fri, 21 Apr 2023 15:30:42 +0100 Subject: [PATCH] Add Builder for DeviceInfo This simplifies the addition of new fields in the future. Also do some misc clean up for the volume limit values: - Add some documentation to mention assumed defaults - Add the IntRange annotations to match the ones we have in Player already - Mention the limits in the relevant Player methods - Avoid bundling default values - Improve range checks for masking in MediaController PiperOrigin-RevId: 526029619 --- RELEASENOTES.md | 1 + api.txt | 11 ++- .../java/androidx/media3/cast/CastPlayer.java | 2 +- .../androidx/media3/common/DeviceInfo.java | 97 ++++++++++++++++--- .../java/androidx/media3/common/Player.java | 6 ++ .../media3/common/DeviceInfoTest.java | 5 +- .../media3/common/SimpleBasePlayerTest.java | 9 +- .../media3/exoplayer/ExoPlayerImpl.java | 8 +- .../session/MediaControllerImplBase.java | 16 ++- .../session/MediaControllerImplLegacy.java | 4 +- .../androidx/media3/session/MediaUtils.java | 14 +-- .../media3/session/PlayerInfoTest.java | 3 +- ...lerCompatCallbackWithMediaSessionTest.java | 14 +-- .../session/MediaControllerListenerTest.java | 6 +- .../MediaControllerStateMaskingTest.java | 3 +- ...CallbackWithMediaControllerCompatTest.java | 18 ++-- .../session/MediaSessionPermissionTest.java | 2 +- .../session/MediaSessionPlayerTest.java | 3 +- 18 files changed, 155 insertions(+), 67 deletions(-) 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(); }); }