fix possible endless loop

We were hanging there if a user selected the previous album if:

* He already was at the first album
* And FINISH_RANDOM was enabled

The new code is somewhat simpler to read and handles the case where we hit song 0
in random mode.
This commit is contained in:
Adrian Ulrich 2017-12-04 19:53:16 +01:00
parent 2df538ccc5
commit b90cc98377

View File

@ -691,14 +691,22 @@ public final class SongTimeline {
else if (delta == SHIFT_PREVIOUS_SONG || delta == SHIFT_NEXT_SONG) {
shiftCurrentSongInternal(delta);
} else {
Song song = getSong(0);
long currentAlbum = song.albumId;
long currentSong = song.id;
Song currentSong = getSong(0);
Song song = currentSong;
delta = delta > 0 ? 1 : -1;
do {
for (;;) {
shiftCurrentSongInternal(delta);
song = getSong(0);
} while (currentAlbum == song.albumId && currentSong != song.id);
if (currentSong == null || song == null)
break;
if (currentSong.albumId != song.albumId) // found a new album
break;
if (currentSong.id == song.id) // probably looping? (= only one album in queue)
break;
if (getPosition() == 0 && getFinishAction() == FINISH_RANDOM) // dead end: FINISH_RANDOM won't wrap around.
break;
}
}
}