summaryrefslogtreecommitdiff
path: root/MusicDemo/src/main/java/com/example/android/musicservicedemo/utils/QueueHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'MusicDemo/src/main/java/com/example/android/musicservicedemo/utils/QueueHelper.java')
-rw-r--r--MusicDemo/src/main/java/com/example/android/musicservicedemo/utils/QueueHelper.java129
1 files changed, 129 insertions, 0 deletions
diff --git a/MusicDemo/src/main/java/com/example/android/musicservicedemo/utils/QueueHelper.java b/MusicDemo/src/main/java/com/example/android/musicservicedemo/utils/QueueHelper.java
new file mode 100644
index 0000000..4dc7a96
--- /dev/null
+++ b/MusicDemo/src/main/java/com/example/android/musicservicedemo/utils/QueueHelper.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2014 Google Inc. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.musicservicedemo.utils;
+
+import android.media.MediaMetadata;
+import android.media.session.MediaSession;
+
+import com.example.android.musicservicedemo.model.MusicProvider;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import static com.example.android.musicservicedemo.utils.MediaIDHelper.MEDIA_ID_MUSICS_BY_GENRE;
+
+/**
+ * Utility class to help on queue related tasks.
+ */
+public class QueueHelper {
+
+ private static final String TAG = "QueueHelper";
+
+ public static final List<MediaSession.QueueItem> getPlayingQueue(String mediaId,
+ MusicProvider musicProvider) {
+
+ // extract the category and unique music ID from the media ID:
+ String[] category = MediaIDHelper.extractBrowseCategoryFromMediaID(mediaId);
+
+ // This sample only supports genre category.
+ if (!category[0].equals(MEDIA_ID_MUSICS_BY_GENRE) || category.length != 2) {
+ LogHelper.e(TAG, "Could not build a playing queue for this mediaId: ", mediaId);
+ return null;
+ }
+
+ String categoryValue = category[1];
+ LogHelper.e(TAG, "Creating playing queue for musics of genre ", categoryValue);
+
+ List<MediaSession.QueueItem> queue = convertToQueue(
+ musicProvider.getMusicsByGenre(categoryValue));
+
+ return queue;
+ }
+
+ public static final List<MediaSession.QueueItem> getPlayingQueueFromSearch(String query,
+ MusicProvider musicProvider) {
+
+ LogHelper.e(TAG, "Creating playing queue for musics from search ", query);
+
+ return convertToQueue(musicProvider.searchMusics(query));
+ }
+
+
+ public static final int getMusicIndexOnQueue(Iterable<MediaSession.QueueItem> queue,
+ String mediaId) {
+ int index = 0;
+ for (MediaSession.QueueItem item: queue) {
+ if (mediaId.equals(item.getDescription().getMediaId())) {
+ return index;
+ }
+ index++;
+ }
+ return -1;
+ }
+
+ public static final int getMusicIndexOnQueue(Iterable<MediaSession.QueueItem> queue,
+ long queueId) {
+ int index = 0;
+ for (MediaSession.QueueItem item: queue) {
+ if (queueId == item.getQueueId()) {
+ return index;
+ }
+ index++;
+ }
+ return -1;
+ }
+
+ private static final List<MediaSession.QueueItem> convertToQueue(
+ Iterable<MediaMetadata> tracks) {
+ List<MediaSession.QueueItem> queue = new ArrayList<>();
+ int count = 0;
+ for (MediaMetadata track : tracks) {
+ // We don't expect queues to change after created, so we use the item index as the
+ // queueId. Any other number unique in the queue would work.
+ MediaSession.QueueItem item = new MediaSession.QueueItem(
+ track.getDescription(), count++);
+ queue.add(item);
+ }
+ return queue;
+
+ }
+
+ /**
+ * Create a random queue. For simplicity sake, instead of a random queue, we create a
+ * queue using the first genre,
+ *
+ * @param musicProvider
+ * @return
+ */
+ public static final List<MediaSession.QueueItem> getRandomQueue(MusicProvider musicProvider) {
+ Iterator<String> genres = musicProvider.getGenres().iterator();
+ if (!genres.hasNext()) {
+ return new ArrayList<>();
+ }
+ String genre = genres.next();
+ Iterable<MediaMetadata> tracks = musicProvider.getMusicsByGenre(genre);
+
+ return convertToQueue(tracks);
+ }
+
+
+
+ public static final boolean isIndexPlayable(int index, List<MediaSession.QueueItem> queue) {
+ return (queue != null && index >= 0 && index < queue.size());
+ }
+} \ No newline at end of file