From 48e2aa1d91378a116f52d7703c95ffcef0a9b01c Mon Sep 17 00:00:00 2001 From: Christopher Eby Date: Wed, 21 Sep 2011 16:52:01 -0500 Subject: [PATCH] Shuffle current songs when enabling shuffling --- src/org/kreed/vanilla/SongTimeline.java | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/org/kreed/vanilla/SongTimeline.java b/src/org/kreed/vanilla/SongTimeline.java index f82ab166..cd6a0cfb 100644 --- a/src/org/kreed/vanilla/SongTimeline.java +++ b/src/org/kreed/vanilla/SongTimeline.java @@ -333,14 +333,29 @@ public final class SongTimeline { } /** - * Set whether shuffling is enabled. Shuffling will shuffle sets of songs - * that are added with chooseSongs and shuffle sets of repeated songs. + * Set whether shuffling is enabled. Will shuffle the current set of songs + * when enabling shuffling if random mode is not enabled. */ public void setShuffle(boolean shuffle) { - saveActiveSongs(); - mShuffle = shuffle; - broadcastChangedSongs(); + if (shuffle == mShuffle) + return; + + synchronized (this) { + saveActiveSongs(); + mShuffle = shuffle; + if (shuffle && mFinishAction != FINISH_RANDOM) { + shuffleAll(); + ArrayList songs = mShuffledSongs; + mShuffledSongs = null; + int i = songs.indexOf(mSavedCurrent); + songs.set(i, songs.get(mCurrentPos)); + songs.set(mCurrentPos, mSavedCurrent); + mSongs = songs; + } + broadcastChangedSongs(); + } + changed(); }