| /* |
| * 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; |
| |
| /** |
| * Utility class to help on queue related tasks. |
| */ |
| public class MediaIDHelper { |
| |
| private static final String TAG = "MediaIDHelper"; |
| |
| // Media IDs used on browseable items of MediaBrowser |
| public static final String MEDIA_ID_ROOT = "__ROOT__"; |
| public static final String MEDIA_ID_MUSICS_BY_GENRE = "__BY_GENRE__"; |
| |
| public static final String createTrackMediaID(String categoryType, String categoryValue, |
| MediaMetadata track) { |
| // MediaIDs are of the form <categoryType>/<categoryValue>|<musicUniqueId>, to make it easy to |
| // find the category (like genre) that a music was selected from, so we |
| // can correctly build the playing queue. This is specially useful when |
| // one music can appear in more than one list, like "by genre -> genre_1" |
| // and "by artist -> artist_1". |
| return categoryType + "/" + categoryValue + "|" + |
| track.getString(MediaMetadata.METADATA_KEY_MEDIA_ID); |
| } |
| |
| public static final String createBrowseCategoryMediaID(String categoryType, String categoryValue) { |
| return categoryType + "/" + categoryValue; |
| } |
| |
| /** |
| * Extracts unique musicID from the mediaID. mediaID is, by this sample's convention, a |
| * concatenation of category (eg "by_genre"), categoryValue (eg "Classical") and unique |
| * musicID. This is necessary so we know where the user selected the music from, when the music |
| * exists in more than one music list, and thus we are able to correctly build the playing queue. |
| * |
| * @param musicID |
| * @return |
| */ |
| public static final String extractMusicIDFromMediaID(String musicID) { |
| String[] segments = musicID.split("\\|", 2); |
| return segments.length == 2 ? segments[1] : null; |
| } |
| |
| /** |
| * Extracts category and categoryValue from the mediaID. mediaID is, by this sample's |
| * convention, a concatenation of category (eg "by_genre"), categoryValue (eg "Classical") and |
| * mediaID. This is necessary so we know where the user selected the music from, when the music |
| * exists in more than one music list, and thus we are able to correctly build the playing queue. |
| * |
| * @param mediaID |
| * @return |
| */ |
| public static final String[] extractBrowseCategoryFromMediaID(String mediaID) { |
| if (mediaID.indexOf('|') >= 0) { |
| mediaID = mediaID.split("\\|")[0]; |
| } |
| if (mediaID.indexOf('/') == 0) { |
| return new String[]{mediaID, null}; |
| } else { |
| return mediaID.split("/", 2); |
| } |
| } |
| |
| public static final String extractBrowseCategoryValueFromMediaID(String mediaID) { |
| String[] categoryAndValue = extractBrowseCategoryFromMediaID(mediaID); |
| if (categoryAndValue != null && categoryAndValue.length == 2) { |
| return categoryAndValue[1]; |
| } |
| return null; |
| } |
| } |