From a1eb75691fa2fd92f0214d5899074614d6fbc082 Mon Sep 17 00:00:00 2001 From: nift4 Date: Tue, 10 Jun 2025 11:08:55 +0200 Subject: [PATCH 1/2] Add getter for ShuffleOrder --- .../main/java/androidx/media3/exoplayer/ExoPlayer.java | 9 +++++++++ .../java/androidx/media3/exoplayer/ExoPlayerImpl.java | 6 ++++++ .../java/androidx/media3/exoplayer/SimpleExoPlayer.java | 6 ++++++ .../java/androidx/media3/test/utils/StubExoPlayer.java | 5 +++++ 4 files changed, 26 insertions(+) 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..18db1ada8dd 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); + /** + * Gets 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/test_utils/src/main/java/androidx/media3/test/utils/StubExoPlayer.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubExoPlayer.java index 89d3bd58c11..6b22d5d95c9 100644 --- a/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubExoPlayer.java +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubExoPlayer.java @@ -176,6 +176,11 @@ public void setShuffleOrder(ShuffleOrder shuffleOrder) { throw new UnsupportedOperationException(); } + @Override + public ShuffleOrder getShuffleOrder() { + throw new UnsupportedOperationException(); + } + @Override public void setAudioAttributes(AudioAttributes audioAttributes, boolean handleAudioFocus) { throw new UnsupportedOperationException(); From 74ab7ef1e947ebeb4c359a4f36b67cabab6a9f7c Mon Sep 17 00:00:00 2001 From: Marc Baechinger Date: Wed, 9 Jul 2025 18:56:18 +0200 Subject: [PATCH 2/2] Add release notes --- RELEASENOTES.md | 2 ++ .../src/main/java/androidx/media3/exoplayer/ExoPlayer.java | 2 +- .../test/java/androidx/media3/exoplayer/ExoPlayerTest.java | 6 +++++- 3 files changed, 8 insertions(+), 2 deletions(-) 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 18db1ada8dd..9cb13f20778 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java @@ -1382,7 +1382,7 @@ void setMediaSources( void setShuffleOrder(ShuffleOrder shuffleOrder); /** - * Gets the shuffle order. + * Returns the shuffle order. * *

The {@link ShuffleOrder} returned will have the same length as the current playlist ({@link * Player#getMediaItemCount()}). 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 shuffleOrderRef = new AtomicReference<>(); + FakeShuffleOrder shuffleOrder = new FakeShuffleOrder(/* length= */ 1); ActionSchedule actionSchedule = new ActionSchedule.Builder(TAG) .playUntilPosition(0, 5000) - .setShuffleOrder(new FakeShuffleOrder(/* length= */ 1)) + .setShuffleOrder(shuffleOrder) .executeRunnable( new PlayerRunnable() { @Override public void run(ExoPlayer player) { positionAfterSetShuffleOrder.set(player.getCurrentPosition()); + shuffleOrderRef.set(player.getShuffleOrder()); } }) .play() @@ -8152,6 +8155,7 @@ public void run(ExoPlayer player) { .blockUntilEnded(TIMEOUT_MS); assertThat(positionAfterSetShuffleOrder.get()).isAtLeast(5000); + assertThat(shuffleOrderRef.get()).isEqualTo(shuffleOrder); } @Test