X-Git-Url: https://git.mdrn.pl/wl-app.git/blobdiff_plain/48b2fe9f7c2dc3d9aeaaa6dbfb27c7da4f3235ff..269195b3729c1bdc22e9053ee4ebca667ea8549d:/Android/app/src/main/java/com/moiseum/wolnelektury/view/player/service/AudiobookLibrary.java?ds=sidebyside diff --git a/Android/app/src/main/java/com/moiseum/wolnelektury/view/player/service/AudiobookLibrary.java b/Android/app/src/main/java/com/moiseum/wolnelektury/view/player/service/AudiobookLibrary.java new file mode 100755 index 0000000..1fc9918 --- /dev/null +++ b/Android/app/src/main/java/com/moiseum/wolnelektury/view/player/service/AudiobookLibrary.java @@ -0,0 +1,148 @@ +/* + * 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.moiseum.wolnelektury.view.player.service; + +import android.content.Context; +import android.support.v4.media.MediaBrowserCompat; +import android.support.v4.media.MediaMetadataCompat; + +import com.moiseum.wolnelektury.connection.models.BookDetailsModel; +import com.moiseum.wolnelektury.connection.models.MediaModel; +import com.moiseum.wolnelektury.utils.StringUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.TreeMap; + + +public class AudiobookLibrary { + + private static final TreeMap music = new TreeMap<>(); +// private static final HashMap albumRes = new HashMap<>(); + private static final HashMap musicFileName = new HashMap<>(); + + 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(), +// AudiobookLibrary.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_TITLE, + MediaMetadataCompat.METADATA_KEY_ARTIST, + MediaMetadataCompat.METADATA_KEY_ALBUM, + MediaMetadataCompat.METADATA_KEY_AUTHOR, + MediaMetadataCompat.METADATA_KEY_GENRE, + MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI + }) { + builder.putString(key, metadataWithoutBitmap.getString(key)); + } + builder.putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, metadataWithoutBitmap.getLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER)); + builder.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, metadataWithoutBitmap.getLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS)); +// builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, albumArt); + return builder.build(); + } + + public static void createAudiobookMetadata(BookDetailsModel book) { + music.clear(); + int index = 0; + List medias = book.getAudiobookMediaModels(); + + for (MediaModel model : medias) { + createMediaMetadataCompat( + model.getUrl(), + model.getName(), + model.getArtist(), + book.getTitle(), + StringUtils.joinCategory(book.getAuthors(), ", "), + StringUtils.joinCategory(book.getGenres(), ", "), + book.getCoverThumb(), + model.getUrl(), + index++, + medias.size() + ); + } + } + + private static void createMediaMetadataCompat( + String mediaId, + String title, + String artist, + String album, + String author, + String genre, + String artUrl, + String musicFilename, + int trackNumber, + int tracksCount + ) { + music.put( + mediaId, + new MediaMetadataCompat.Builder() + .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, mediaId) + .putString(MediaMetadataCompat.METADATA_KEY_TITLE, title) + .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist) + .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, album) + .putString(MediaMetadataCompat.METADATA_KEY_AUTHOR, author) + .putString(MediaMetadataCompat.METADATA_KEY_GENRE, genre) + .putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, artUrl) +// .putString( +// MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, +// getAlbumArtUri(albumArtResName)) + .putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, trackNumber) + .putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, tracksCount) + .build()); +// albumRes.put(mediaId, albumArtResId); + musicFileName.put(mediaId, musicFilename); + } +} \ No newline at end of file