Download File
Download Project
Settings
Line Wrap
Themes
default
ambiance
bespin
dracula
eclipse
material
mbo
mdn-like
neat
solarized dark
ttcn
zenburn
MusicLibrary.java
/* * Copyright 2017 The Android Open Source Project * * 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.mediasession.service.contentcatalogs; import android.content.ContentResolver; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.support.v4.media.MediaBrowserCompat; import android.support.v4.media.MediaMetadataCompat; import com.example.android.mediasession.BuildConfig; import com.example.android.mediasession.R; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.TreeMap; import java.util.concurrent.TimeUnit; public class MusicLibrary { private static final TreeMap
music = new TreeMap<>(); private static final HashMap
albumRes = new HashMap<>(); private static final HashMap
musicFileName = new HashMap<>(); static { createMediaMetadataCompat( "Jazz_In_Paris", "Jazz in Paris", "Media Right Productions", "Jazz & Blues", "Jazz", 103, TimeUnit.SECONDS, "jazz_in_paris.mp3", R.drawable.album_jazz_blues, "album_jazz_blues"); createMediaMetadataCompat( "The_Coldest_Shoulder", "The Coldest Shoulder", "The 126ers", "Youtube Audio Library Rock 2", "Rock", 160, TimeUnit.SECONDS, "the_coldest_shoulder.mp3", R.drawable.album_youtube_audio_library_rock_2, "album_youtube_audio_library_rock_2"); } public static String getRoot() { return "root"; } private static String getAlbumArtUri(String albumArtResName) { return ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + BuildConfig.APPLICATION_ID + "/drawable/" + albumArtResName; } public static String getMusicFilename(String mediaId) { return musicFileName.containsKey(mediaId) ? musicFileName.get(mediaId) : null; } private static int getAlbumRes(String mediaId) { return albumRes.containsKey(mediaId) ? albumRes.get(mediaId) : 0; } public static Bitmap getAlbumBitmap(Context context, String mediaId) { return BitmapFactory.decodeResource(context.getResources(), MusicLibrary.getAlbumRes(mediaId)); } public static List
getMediaItems() { List
result = new ArrayList<>(); for (MediaMetadataCompat metadata : music.values()) { result.add( new MediaBrowserCompat.MediaItem( metadata.getDescription(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE)); } return result; } public static MediaMetadataCompat getMetadata(Context context, String mediaId) { MediaMetadataCompat metadataWithoutBitmap = music.get(mediaId); Bitmap albumArt = getAlbumBitmap(context, mediaId); // Since MediaMetadataCompat is immutable, we need to create a copy to set the album art. // We don't set it initially on all items so that they don't take unnecessary memory. MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); for (String key : new String[]{ MediaMetadataCompat.METADATA_KEY_MEDIA_ID, MediaMetadataCompat.METADATA_KEY_ALBUM, MediaMetadataCompat.METADATA_KEY_ARTIST, MediaMetadataCompat.METADATA_KEY_GENRE, MediaMetadataCompat.METADATA_KEY_TITLE }) { builder.putString(key, metadataWithoutBitmap.getString(key)); } builder.putLong( MediaMetadataCompat.METADATA_KEY_DURATION, metadataWithoutBitmap.getLong(MediaMetadataCompat.METADATA_KEY_DURATION)); builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, albumArt); return builder.build(); } private static void createMediaMetadataCompat( String mediaId, String title, String artist, String album, String genre, long duration, TimeUnit durationUnit, String musicFilename, int albumArtResId, String albumArtResName) { music.put( mediaId, new MediaMetadataCompat.Builder() .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, mediaId) .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, album) .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist) .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, TimeUnit.MILLISECONDS.convert(duration, durationUnit)) .putString(MediaMetadataCompat.METADATA_KEY_GENRE, genre) .putString( MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, getAlbumArtUri(albumArtResName)) .putString( MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, getAlbumArtUri(albumArtResName)) .putString(MediaMetadataCompat.METADATA_KEY_TITLE, title) .build()); albumRes.put(mediaId, albumArtResId); musicFileName.put(mediaId, musicFilename); } }