From 31651e491e3b40685493c11d4efb81b7ed6ef6f4 Mon Sep 17 00:00:00 2001 From: Christopher Eby Date: Sun, 25 Sep 2011 04:22:54 -0500 Subject: [PATCH] Fix SongTimeline.removeSong We were skipping songs as the index changes whenever we remove a song. Use an iterator so we don't have to worry about that. --- src/org/kreed/vanilla/SongTimeline.java | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/org/kreed/vanilla/SongTimeline.java b/src/org/kreed/vanilla/SongTimeline.java index 9ff0686c..ec410377 100644 --- a/src/org/kreed/vanilla/SongTimeline.java +++ b/src/org/kreed/vanilla/SongTimeline.java @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; +import java.util.ListIterator; import android.content.ContentResolver; import android.content.Context; @@ -601,23 +602,19 @@ public final class SongTimeline { public void removeSong(long id) { synchronized (this) { - ArrayList songs = mSongs; - saveActiveSongs(); - int i = mCurrentPos; - while (--i >= 0) { - if (Song.getId(songs.get(i)) == id) { - songs.remove(i); - --mCurrentPos; + ArrayList songs = mSongs; + ListIterator it = songs.listIterator(); + while (it.hasNext()) { + int i = it.nextIndex(); + if (Song.getId(it.next()) == id) { + if (i < mCurrentPos) + --mCurrentPos; + it.remove(); } } - for (i = mCurrentPos; i < songs.size(); ++i) { - if (Song.getId(songs.get(i)) == id) - songs.remove(i); - } - broadcastChangedSongs(); }