Skip to content

Commit 7a53b05

Browse files
copybara-githubicbaker
authored andcommitted
Merge pull request #2522 from nift4:getshuffle
PiperOrigin-RevId: 781950733 (cherry picked from commit af6fa9e)
1 parent 4e97e03 commit 7a53b05

File tree

6 files changed

+33
-1
lines changed

6 files changed

+33
-1
lines changed

RELEASENOTES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ This release includes the following changes since the
88
[1.8.0-rc01 release](#180-rc01-2025-07-16):
99

1010
* ExoPlayer:
11+
* Add getter for shuffle mode to the `ExoPlayer` interface
12+
([#2522](https://github.com/androidx/media/pull/2522)).
1113
* More clearly throw an exception if `DefaultAudioSink` is accessed from
1214
multiple threads. If this happens due to a call to
1315
`RendererCapabilities.getFormatSupport` outside of the player, make sure

libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,6 +1381,15 @@ void setMediaSources(
13811381
@UnstableApi
13821382
void setShuffleOrder(ShuffleOrder shuffleOrder);
13831383

1384+
/**
1385+
* Returns the shuffle order.
1386+
*
1387+
* <p>The {@link ShuffleOrder} returned will have the same length as the current playlist ({@link
1388+
* Player#getMediaItemCount()}).
1389+
*/
1390+
@UnstableApi
1391+
ShuffleOrder getShuffleOrder();
1392+
13841393
/**
13851394
* Sets the {@linkplain PreloadConfiguration preload configuration} to configure playlist
13861395
* preloading.

libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,12 @@ public void setShuffleOrder(ShuffleOrder shuffleOrder) {
786786
/* repeatCurrentMediaItem= */ false);
787787
}
788788

789+
@Override
790+
public ShuffleOrder getShuffleOrder() {
791+
verifyApplicationThread();
792+
return shuffleOrder;
793+
}
794+
789795
@Override
790796
public void setPauseAtEndOfMediaItems(boolean pauseAtEndOfMediaItems) {
791797
verifyApplicationThread();

libraries/exoplayer/src/main/java/androidx/media3/exoplayer/SimpleExoPlayer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -929,6 +929,12 @@ public void setShuffleOrder(ShuffleOrder shuffleOrder) {
929929
player.setShuffleOrder(shuffleOrder);
930930
}
931931

932+
@Override
933+
public ShuffleOrder getShuffleOrder() {
934+
blockUntilConstructorFinished();
935+
return player.getShuffleOrder();
936+
}
937+
932938
@Override
933939
public void setPlayWhenReady(boolean playWhenReady) {
934940
blockUntilConstructorFinished();

libraries/exoplayer/src/test/java/androidx/media3/exoplayer/ExoPlayerTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8089,15 +8089,18 @@ public void run(ExoPlayer player) {
80898089
@Test
80908090
public void setShuffleOrder_keepsCurrentPosition() throws Exception {
80918091
AtomicLong positionAfterSetShuffleOrder = new AtomicLong(C.TIME_UNSET);
8092+
AtomicReference<ShuffleOrder> shuffleOrderRef = new AtomicReference<>();
8093+
FakeShuffleOrder shuffleOrder = new FakeShuffleOrder(/* length= */ 1);
80928094
ActionSchedule actionSchedule =
80938095
new ActionSchedule.Builder(TAG)
80948096
.playUntilPosition(0, 5000)
8095-
.setShuffleOrder(new FakeShuffleOrder(/* length= */ 1))
8097+
.setShuffleOrder(shuffleOrder)
80968098
.executeRunnable(
80978099
new PlayerRunnable() {
80988100
@Override
80998101
public void run(ExoPlayer player) {
81008102
positionAfterSetShuffleOrder.set(player.getCurrentPosition());
8103+
shuffleOrderRef.set(player.getShuffleOrder());
81018104
}
81028105
})
81038106
.play()
@@ -8109,6 +8112,7 @@ public void run(ExoPlayer player) {
81098112
.blockUntilEnded(TIMEOUT_MS);
81108113

81118114
assertThat(positionAfterSetShuffleOrder.get()).isAtLeast(5000);
8115+
assertThat(shuffleOrderRef.get()).isEqualTo(shuffleOrder);
81128116
}
81138117

81148118
@Test

libraries/test_utils/src/main/java/androidx/media3/test/utils/StubExoPlayer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,11 @@ public void setShuffleOrder(ShuffleOrder shuffleOrder) {
176176
throw new UnsupportedOperationException();
177177
}
178178

179+
@Override
180+
public ShuffleOrder getShuffleOrder() {
181+
throw new UnsupportedOperationException();
182+
}
183+
179184
@Override
180185
public void setAudioAttributes(AudioAttributes audioAttributes, boolean handleAudioFocus) {
181186
throw new UnsupportedOperationException();

0 commit comments

Comments
 (0)