summaryrefslogtreecommitdiffstats
path: root/src/com/cyanogenmod/eleven/MusicPlaybackService.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/cyanogenmod/eleven/MusicPlaybackService.java')
-rw-r--r--src/com/cyanogenmod/eleven/MusicPlaybackService.java40
1 files changed, 16 insertions, 24 deletions
diff --git a/src/com/cyanogenmod/eleven/MusicPlaybackService.java b/src/com/cyanogenmod/eleven/MusicPlaybackService.java
index 81cd74b..0f38a20 100644
--- a/src/com/cyanogenmod/eleven/MusicPlaybackService.java
+++ b/src/com/cyanogenmod/eleven/MusicPlaybackService.java
@@ -58,6 +58,7 @@ import android.provider.MediaStore.Audio.AlbumColumns;
import android.provider.MediaStore.Audio.AudioColumns;
import android.text.TextUtils;
import android.util.Log;
+import android.util.LongSparseArray;
import android.view.KeyEvent;
import com.cyanogenmod.eleven.Config.IdType;
@@ -740,7 +741,7 @@ public class MusicPlaybackService extends Service {
}
@Override
public void onSkipToQueueItem(long id) {
- setQueueItem(id);
+ setQueuePosition((int) id);
}
@Override
public boolean onMediaButtonEvent(@NonNull Intent mediaButtonIntent) {
@@ -2751,18 +2752,6 @@ public class MusicPlaybackService extends Service {
}
}
- private void setQueueItem(final long id) {
- synchronized (this) {
- final int len = mPlaylist.size();
- for (int i = 0; i < len; i++) {
- if (id == mPlaylist.get(i).mId) {
- setQueuePosition(i);
- break;
- }
- }
- }
- }
-
/**
* Queues a new list for playback
*
@@ -3864,7 +3853,7 @@ public class MusicPlaybackService extends Service {
private long[] mQueue;
public QueueUpdateTask(long[] queue) {
- mQueue = queue;
+ mQueue = queue != null ? Arrays.copyOf(queue, queue.length) : null;
}
@Override
@@ -3892,7 +3881,7 @@ public class MusicPlaybackService extends Service {
}
try {
- final MediaSession.QueueItem[] items = new MediaSession.QueueItem[mQueue.length];
+ LongSparseArray<MediaDescription> descsById = new LongSparseArray<>();
final int idColumnIndex = c.getColumnIndexOrThrow(AudioColumns._ID);
final int titleColumnIndex = c.getColumnIndexOrThrow(AudioColumns.TITLE);
final int artistColumnIndex = c.getColumnIndexOrThrow(AudioColumns.ARTIST);
@@ -3902,18 +3891,21 @@ public class MusicPlaybackService extends Service {
.setTitle(c.getString(titleColumnIndex))
.setSubtitle(c.getString(artistColumnIndex))
.build();
-
final long id = c.getLong(idColumnIndex);
- int index = 0;
- for (int i = 0; i < mQueue.length; i++) {
- if (mQueue[i] == id) {
- index = i;
- break;
- }
+ descsById.put(id, desc);
+ }
+
+ List<MediaSession.QueueItem> items = new ArrayList<>();
+ for (int i = 0; i < mQueue.length; i++) {
+ MediaDescription desc = descsById.get(mQueue[i]);
+ if (desc == null) {
+ // shouldn't happen except in corner cases like
+ // music being deleted while we were processing
+ desc = new MediaDescription.Builder().build();
}
- items[index] = new MediaSession.QueueItem(desc, id);
+ items.add(new MediaSession.QueueItem(desc, i));
}
- return Arrays.asList(items);
+ return items;
} finally {
c.close();
}