automatically remove last appended random song from queue if we are going out of RANDOM mode

This commit is contained in:
Adrian Ulrich 2016-10-30 15:51:03 +01:00
parent 0729e4d96a
commit bcd64a46d4

View File

@ -238,6 +238,10 @@ public final class SongTimeline {
* Hash code of mSongs while mShuffleCache was generated * Hash code of mSongs while mShuffleCache was generated
*/ */
private int mShuffleTicket; private int mShuffleTicket;
/**
* The last song we added randomly by calling MediaUtils.getRandomSong()
*/
private Song mLastRandomSong;
// for saveActiveSongs() // for saveActiveSongs()
private Song mSavedPrevious; private Song mSavedPrevious;
@ -485,10 +489,28 @@ public final class SongTimeline {
*/ */
public void setFinishAction(int action) public void setFinishAction(int action)
{ {
saveActiveSongs(); synchronized (this) {
mFinishAction = action; saveActiveSongs();
broadcastChangedSongs();
changed(); if (mFinishAction == FINISH_RANDOM) {
// Remove the last song if we are going out of RANDOM mode and we
// are currently playing the 2nd last one.
int lastSongPos = getLength() - 1;
if (getPosition()+1 == lastSongPos) {
Song lastSong = mSongs.get(lastSongPos);
if (lastSong.isRandom() && lastSong.equals(mLastRandomSong)) {
mSongs.remove(lastSongPos);
}
}
// forget about the last random song, even if it survived (eg: was switching modes while not playing
// the 2nd last song -> the last song is now considered to be part of the queue)
mLastRandomSong = null;
}
mFinishAction = action;
broadcastChangedSongs();
changed();
}
} }
/** /**
@ -558,6 +580,7 @@ public final class SongTimeline {
if (song == null) if (song == null)
return null; return null;
timeline.add(song); timeline.add(song);
mLastRandomSong = song;
// Keep the queue at 20 items to avoid growing forever // Keep the queue at 20 items to avoid growing forever
// Note that we do not broadcast the addition of this song, as it // Note that we do not broadcast the addition of this song, as it
// was virtually 'always there' // was virtually 'always there'