diff --git a/RELEASENOTES.md b/RELEASENOTES.md index f3c016cde16..254d4471c47 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -11,6 +11,8 @@ * ExoPlayer: * Ensure renderers don't consume data from the next playlist item more than 10 seconds before the end of the current item. + * Add getter for shuffle mode to the `ExoPlayer` interface + ([#2522](https://github.com/androidx/media/pull/2522)). * Transformer: * Track Selection: * Extractors: 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 37a75095903..9cb13f20778 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java @@ -1381,6 +1381,15 @@ void setMediaSources( @UnstableApi void setShuffleOrder(ShuffleOrder shuffleOrder); + /** + * Returns the shuffle order. + * + *
The {@link ShuffleOrder} returned will have the same length as the current playlist ({@link
+ * Player#getMediaItemCount()}).
+ */
+ @UnstableApi
+ ShuffleOrder getShuffleOrder();
+
/**
* Sets the {@linkplain PreloadConfiguration preload configuration} to configure playlist
* preloading.
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 3118eb20f9e..a4f0d2e0a2d 100644
--- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java
+++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java
@@ -787,6 +787,12 @@ public void setShuffleOrder(ShuffleOrder shuffleOrder) {
/* repeatCurrentMediaItem= */ false);
}
+ @Override
+ public ShuffleOrder getShuffleOrder() {
+ verifyApplicationThread();
+ return shuffleOrder;
+ }
+
@Override
public void setPauseAtEndOfMediaItems(boolean pauseAtEndOfMediaItems) {
verifyApplicationThread();
diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/SimpleExoPlayer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/SimpleExoPlayer.java
index 2742bd10f0b..ddddb21fe7a 100644
--- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/SimpleExoPlayer.java
+++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/SimpleExoPlayer.java
@@ -941,6 +941,12 @@ public void setShuffleOrder(ShuffleOrder shuffleOrder) {
player.setShuffleOrder(shuffleOrder);
}
+ @Override
+ public ShuffleOrder getShuffleOrder() {
+ blockUntilConstructorFinished();
+ return player.getShuffleOrder();
+ }
+
@Override
public void setPlayWhenReady(boolean playWhenReady) {
blockUntilConstructorFinished();
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 31dd46a00fd..f0c7fe905f5 100644
--- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/ExoPlayerTest.java
+++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/ExoPlayerTest.java
@@ -8132,15 +8132,18 @@ public void run(ExoPlayer player) {
@Test
public void setShuffleOrder_keepsCurrentPosition() throws Exception {
AtomicLong positionAfterSetShuffleOrder = new AtomicLong(C.TIME_UNSET);
+ AtomicReference