2 * Copyright 2017 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.moiseum.wolnelektury.view.player.service;
19 import android.content.Context;
20 import android.support.v4.media.MediaBrowserCompat;
21 import android.support.v4.media.MediaMetadataCompat;
23 import com.moiseum.wolnelektury.connection.models.BookDetailsModel;
24 import com.moiseum.wolnelektury.connection.models.MediaModel;
25 import com.moiseum.wolnelektury.utils.StringUtils;
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.List;
30 import java.util.TreeMap;
33 public class AudiobookLibrary {
35 private static final TreeMap<String, MediaMetadataCompat> music = new TreeMap<>();
36 // private static final HashMap<String, Integer> albumRes = new HashMap<>();
37 private static final HashMap<String, String> musicFileName = new HashMap<>();
39 public static String getRoot() {
43 // private static String getAlbumArtUri(String albumArtResName) {
44 // return ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
45 // BuildConfig.APPLICATION_ID + "/drawable/" + albumArtResName;
48 public static String getMusicFilename(String mediaId) {
49 return musicFileName.containsKey(mediaId) ? musicFileName.get(mediaId) : null;
52 // private static int getAlbumRes(String mediaId) {
53 // return albumRes.containsKey(mediaId) ? albumRes.get(mediaId) : 0;
56 // public static Bitmap getAlbumBitmap(Context context, String mediaId) {
57 // return BitmapFactory.decodeResource(context.getResources(),
58 // AudiobookLibrary.getAlbumRes(mediaId));
61 public static List<MediaBrowserCompat.MediaItem> getMediaItems() {
62 List<MediaBrowserCompat.MediaItem> result = new ArrayList<>();
63 for (MediaMetadataCompat metadata : music.values()) {
65 new MediaBrowserCompat.MediaItem(
66 metadata.getDescription(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE));
71 public static MediaMetadataCompat getMetadata(Context context, String mediaId) {
72 MediaMetadataCompat metadataWithoutBitmap = music.get(mediaId);
73 // Bitmap albumArt = getAlbumBitmap(context, mediaId);
75 // Since MediaMetadataCompat is immutable, we need to create a copy to set the album art.
76 // We don't set it initially on all items so that they don't take unnecessary memory.
77 MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder();
80 MediaMetadataCompat.METADATA_KEY_MEDIA_ID,
81 MediaMetadataCompat.METADATA_KEY_TITLE,
82 MediaMetadataCompat.METADATA_KEY_ARTIST,
83 MediaMetadataCompat.METADATA_KEY_ALBUM,
84 MediaMetadataCompat.METADATA_KEY_AUTHOR,
85 MediaMetadataCompat.METADATA_KEY_GENRE,
86 MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI
88 builder.putString(key, metadataWithoutBitmap.getString(key));
90 builder.putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, metadataWithoutBitmap.getLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER));
91 builder.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, metadataWithoutBitmap.getLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS));
92 // builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, albumArt);
93 return builder.build();
96 public static void createAudiobookMetadata(BookDetailsModel book) {
99 List<MediaModel> medias = book.getAudiobookMediaModels();
101 for (MediaModel model : medias) {
102 createMediaMetadataCompat(
107 StringUtils.joinCategory(book.getAuthors(), ", "),
108 StringUtils.joinCategory(book.getGenres(), ", "),
109 book.getCoverThumb(),
117 private static void createMediaMetadataCompat(
125 String musicFilename,
131 new MediaMetadataCompat.Builder()
132 .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, mediaId)
133 .putString(MediaMetadataCompat.METADATA_KEY_TITLE, title)
134 .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist)
135 .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, album)
136 .putString(MediaMetadataCompat.METADATA_KEY_AUTHOR, author)
137 .putString(MediaMetadataCompat.METADATA_KEY_GENRE, genre)
138 .putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, artUrl)
140 // MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI,
141 // getAlbumArtUri(albumArtResName))
142 .putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, trackNumber)
143 .putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, tracksCount)
145 // albumRes.put(mediaId, albumArtResId);
146 musicFileName.put(mediaId, musicFilename);