From 605e14f930535407f2a2f3fa22d149d5f3ebc6ad Mon Sep 17 00:00:00 2001 From: Christopher Eby Date: Fri, 2 Sep 2011 02:36:49 -0500 Subject: [PATCH] Account for sorting that takes place when querying random songs --- src/org/kreed/vanilla/MediaUtils.java | 11 +++++++++++ src/org/kreed/vanilla/Song.java | 7 +++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/org/kreed/vanilla/MediaUtils.java b/src/org/kreed/vanilla/MediaUtils.java index 0b219f89..409fd7f8 100644 --- a/src/org/kreed/vanilla/MediaUtils.java +++ b/src/org/kreed/vanilla/MediaUtils.java @@ -210,4 +210,15 @@ public class MediaUtils { list[i] = tmp; } } + + public static void shuffle(Song[] list) + { + Random random = ContextApplication.getRandom(); + for (int i = list.length; --i != -1; ) { + int j = random.nextInt(i + 1); + Song tmp = list[j]; + list[j] = list[i]; + list[i] = tmp; + } + } } diff --git a/src/org/kreed/vanilla/Song.java b/src/org/kreed/vanilla/Song.java index e7ea0a79..7f038357 100644 --- a/src/org/kreed/vanilla/Song.java +++ b/src/org/kreed/vanilla/Song.java @@ -216,14 +216,14 @@ public class Song implements Parcelable { int end = Math.min(mAllSongsIdx + RANDOM_POPULATE_SIZE, mAllSongs.length); for (int i = mAllSongsIdx; i != end; ++i) { if (!first) - selection.append(","); + selection.append(','); first = false; selection.append(mAllSongs[i]); } - selection.append(")"); + selection.append(')'); Cursor cursor = resolver.query(media, FILLED_PROJECTION, selection.toString(), null, null); @@ -247,6 +247,9 @@ public class Song implements Parcelable { cursor.close(); + // The query will return sorted results; undo that + MediaUtils.shuffle(mRandomCache); + mRandomCacheIdx = 0; mRandomCacheEnd = mAllSongsIdx + count; }