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;
}
@Override
public void onSkipToQueueItem(long id) {
- setQueueItem(id);
+ setQueuePosition((int) id);
}
@Override
public boolean onMediaButtonEvent(@NonNull Intent mediaButtonIntent) {
}
}
- 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
*
private long[] mQueue;
public QueueUpdateTask(long[] queue) {
- mQueue = queue;
+ mQueue = queue != null ? Arrays.copyOf(queue, queue.length) : null;
}
@Override
}
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);
.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();
}