From f7ed39ee173175f1154e6ad0be30fb03d2211d0e Mon Sep 17 00:00:00 2001 From: aquilescanta Date: Mon, 12 Nov 2018 05:11:37 -0800 Subject: [PATCH] Add constructor to DefaultShuffleOrder to support sideloaded shuffle orders Issue: #4915 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=221075615 --- .../android/exoplayer2/source/ShuffleOrder.java | 11 +++++++++++ .../exoplayer2/source/ShuffleOrderTest.java | 17 +++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ShuffleOrder.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ShuffleOrder.java index 750c42bbd0..90e2576d76 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ShuffleOrder.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ShuffleOrder.java @@ -55,6 +55,17 @@ public interface ShuffleOrder { this(length, new Random(randomSeed)); } + /** + * Creates an instance with a specified shuffle order and the specified random seed. The random + * seed is used for {@link #cloneAndInsert(int, int)} invocations. + * + * @param shuffledIndices The shuffled indices to use as order. + * @param randomSeed A random seed. + */ + public DefaultShuffleOrder(int[] shuffledIndices, long randomSeed) { + this(Arrays.copyOf(shuffledIndices, shuffledIndices.length), new Random(randomSeed)); + } + private DefaultShuffleOrder(int length, Random random) { this(createShuffledList(length, random), random); } diff --git a/library/core/src/test/java/com/google/android/exoplayer2/source/ShuffleOrderTest.java b/library/core/src/test/java/com/google/android/exoplayer2/source/ShuffleOrderTest.java index e15c8f0aaa..06f39409e7 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/source/ShuffleOrderTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/source/ShuffleOrderTest.java @@ -79,6 +79,23 @@ public final class ShuffleOrderTest { } } + @Test + public void testSideloadedShuffleOrder() { + int[] shuffledIndices = new int[] {2, 1, 0, 4, 3}; + ShuffleOrder shuffleOrder = new DefaultShuffleOrder(shuffledIndices, RANDOM_SEED); + assertThat(shuffleOrder.getFirstIndex()).isEqualTo(2); + assertThat(shuffleOrder.getLastIndex()).isEqualTo(3); + for (int i = 0; i < 4; i++) { + assertThat(shuffleOrder.getNextIndex(shuffledIndices[i])).isEqualTo(shuffledIndices[i + 1]); + } + assertThat(shuffleOrder.getNextIndex(3)).isEqualTo(C.INDEX_UNSET); + for (int i = 4; i > 0; i--) { + assertThat(shuffleOrder.getPreviousIndex(shuffledIndices[i])) + .isEqualTo(shuffledIndices[i - 1]); + } + assertThat(shuffleOrder.getPreviousIndex(2)).isEqualTo(C.INDEX_UNSET); + } + private static void assertShuffleOrderCorrectness(ShuffleOrder shuffleOrder, int length) { assertThat(shuffleOrder.getLength()).isEqualTo(length); if (length == 0) {