android.support.v4.media.MediaMetadataCompat

Here are the examples of the java api class android.support.v4.media.MediaMetadataCompat taken from open source projects.

1. MusicProviderTest#testUpdateMusicArt()

Project: android-UniversalMusicPlayer
File: MusicProviderTest.java
@Test
public void testUpdateMusicArt() throws Exception {
    Bitmap bIcon = Bitmap.createBitmap(2, 2, Bitmap.Config.ALPHA_8);
    Bitmap bArt = Bitmap.createBitmap(2, 2, Bitmap.Config.ALPHA_8);
    MediaMetadataCompat metadata = provider.getShuffledMusic().iterator().next();
    String musicId = metadata.getDescription().getMediaId();
    assertNotEquals(bArt, metadata.getBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART));
    assertNotEquals(bIcon, metadata.getBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON));
    provider.updateMusicArt(musicId, bArt, bIcon);
    MediaMetadataCompat newMetadata = provider.getMusic(musicId);
    assertEquals(bArt, newMetadata.getBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART));
    assertEquals(bIcon, newMetadata.getBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON));
}

2. QueueHelper#convertToQueue()

Project: LyricHere
File: QueueHelper.java
private static List<MediaSessionCompat.QueueItem> convertToQueue(Iterable<MediaMetadataCompat> tracks, String... categories) {
    List<MediaSessionCompat.QueueItem> queue = new ArrayList<>();
    int count = 0;
    for (MediaMetadataCompat track : tracks) {
        // We create a hierarchy-aware mediaID, so we know what the queue is about by looking
        // at the QueueItem media IDs.
        String hierarchyAwareMediaID = MediaIDHelper.createMediaID(track.getDescription().getMediaId(), categories);
        MediaMetadataCompat trackCopy = new MediaMetadataCompat.Builder(track).putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, hierarchyAwareMediaID).build();
        // 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.
        MediaSessionCompat.QueueItem item = new MediaSessionCompat.QueueItem(trackCopy.getDescription(), count++);
        queue.add(item);
    }
    return queue;
}

3. MusicService#setCustomAction()

Project: LyricHere
File: MusicService.java
private void setCustomAction(PlaybackStateCompat.Builder stateBuilder) {
    MediaMetadataCompat currentMusic = getCurrentPlayingMusic();
    if (currentMusic != null) {
        // Set appropriate "Favorite" icon on Custom action:
        String musicId = currentMusic.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID);
        int favoriteIcon = R.drawable.ic_star_off;
        if (mMusicProvider.isFavorite(musicId)) {
            favoriteIcon = R.drawable.ic_star_on;
        }
        LogUtils.d(TAG, "updatePlaybackState, setting Favorite custom action of music ", musicId, " current favorite=", mMusicProvider.isFavorite(musicId));
        stateBuilder.addCustomAction(CUSTOM_ACTION_THUMBS_UP, getString(R.string.favorite), favoriteIcon);
    }
}

4. QueueHelper#getRandomQueue()

Project: android-UniversalMusicPlayer
File: QueueHelper.java
/**
     * Create a random queue with at most {@link #RANDOM_QUEUE_SIZE} elements.
     *
     * @param musicProvider the provider used for fetching music.
     * @return list containing {@link MediaSessionCompat.QueueItem}'s
     */
public static List<MediaSessionCompat.QueueItem> getRandomQueue(MusicProvider musicProvider) {
    List<MediaMetadataCompat> result = new ArrayList<>(RANDOM_QUEUE_SIZE);
    Iterable<MediaMetadataCompat> shuffled = musicProvider.getShuffledMusic();
    for (MediaMetadataCompat metadata : shuffled) {
        if (result.size() == RANDOM_QUEUE_SIZE) {
            break;
        }
        result.add(metadata);
    }
    LogHelper.d(TAG, "getRandomQueue: result.size=", result.size());
    return convertToQueue(result, MEDIA_ID_MUSICS_BY_SEARCH, "random");
}

5. QueueHelper#convertToQueue()

Project: android-UniversalMusicPlayer
File: QueueHelper.java
private static List<MediaSessionCompat.QueueItem> convertToQueue(Iterable<MediaMetadataCompat> tracks, String... categories) {
    List<MediaSessionCompat.QueueItem> queue = new ArrayList<>();
    int count = 0;
    for (MediaMetadataCompat track : tracks) {
        // We create a hierarchy-aware mediaID, so we know what the queue is about by looking
        // at the QueueItem media IDs.
        String hierarchyAwareMediaID = MediaIDHelper.createMediaID(track.getDescription().getMediaId(), categories);
        MediaMetadataCompat trackCopy = new MediaMetadataCompat.Builder(track).putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, hierarchyAwareMediaID).build();
        // 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.
        MediaSessionCompat.QueueItem item = new MediaSessionCompat.QueueItem(trackCopy.getDescription(), count++);
        queue.add(item);
    }
    return queue;
}

6. FullScreenPlayerActivity#connectToSession()

Project: android-UniversalMusicPlayer
File: FullScreenPlayerActivity.java
private void connectToSession(MediaSessionCompat.Token token) throws RemoteException {
    MediaControllerCompat mediaController = new MediaControllerCompat(FullScreenPlayerActivity.this, token);
    if (mediaController.getMetadata() == null) {
        finish();
        return;
    }
    setSupportMediaController(mediaController);
    mediaController.registerCallback(mCallback);
    PlaybackStateCompat state = mediaController.getPlaybackState();
    updatePlaybackState(state);
    MediaMetadataCompat metadata = mediaController.getMetadata();
    if (metadata != null) {
        updateMediaDescription(metadata.getDescription());
        updateDuration(metadata);
    }
    updateProgress();
    if (state != null && (state.getState() == PlaybackStateCompat.STATE_PLAYING || state.getState() == PlaybackStateCompat.STATE_BUFFERING)) {
        scheduleSeekbarUpdate();
    }
}

7. CastPlayback#loadMedia()

Project: android-UniversalMusicPlayer
File: CastPlayback.java
private void loadMedia(String mediaId, boolean autoPlay) throws TransientNetworkDisconnectionException, NoConnectionException, JSONException {
    String musicId = MediaIDHelper.extractMusicIDFromMediaID(mediaId);
    MediaMetadataCompat track = mMusicProvider.getMusic(musicId);
    if (track == null) {
        throw new IllegalArgumentException("Invalid mediaId " + mediaId);
    }
    if (!TextUtils.equals(mediaId, mCurrentMediaId)) {
        mCurrentMediaId = mediaId;
        mCurrentPosition = 0;
    }
    JSONObject customData = new JSONObject();
    customData.put(ITEM_ID, mediaId);
    MediaInfo media = toCastMediaMetadata(track, customData);
    VideoCastManager.getInstance().loadMedia(media, autoPlay, mCurrentPosition, customData);
}

8. MusicProvider#createMediaItem()

Project: android-UniversalMusicPlayer
File: MusicProvider.java
private MediaBrowserCompat.MediaItem createMediaItem(MediaMetadataCompat metadata) {
    // Since mediaMetadata fields are immutable, we need to create a copy, so we
    // can set a hierarchy-aware mediaID. We will need to know the media hierarchy
    // when we get a onPlayFromMusicID call, so we can create the proper queue based
    // on where the music was selected from (by artist, by genre, random, etc)
    String genre = metadata.getString(MediaMetadataCompat.METADATA_KEY_GENRE);
    String hierarchyAwareMediaID = MediaIDHelper.createMediaID(metadata.getDescription().getMediaId(), MEDIA_ID_MUSICS_BY_GENRE, genre);
    MediaMetadataCompat copy = new MediaMetadataCompat.Builder(metadata).putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, hierarchyAwareMediaID).build();
    return new MediaBrowserCompat.MediaItem(copy.getDescription(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE);
}

9. MusicProvider#updateMusicArt()

Project: android-UniversalMusicPlayer
File: MusicProvider.java
public synchronized void updateMusicArt(String musicId, Bitmap albumArt, Bitmap icon) {
    MediaMetadataCompat metadata = getMusic(musicId);
    metadata = new MediaMetadataCompat.Builder(metadata).putBitmap(// example, on the lockscreen background when the media session is active.
    MediaMetadataCompat.METADATA_KEY_ALBUM_ART, albumArt).putBitmap(// necessary
    MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, icon).build();
    MutableMediaMetadata mutableMetadata = mMusicListById.get(musicId);
    if (mutableMetadata == null) {
        throw new IllegalStateException("Unexpected error: Inconsistent data structures in " + "MusicProvider");
    }
    mutableMetadata.metadata = metadata;
}

10. QueueManagerTest#testSetQueueFromMusic()

Project: android-UniversalMusicPlayer
File: QueueManagerTest.java
@Test
public void testSetQueueFromMusic() throws Exception {
    QueueManager queueManager = createQueueManagerWithValidation(null, -1, null);
    // get the first music of the first genre and build a hierarchy-aware version of its
    // mediaId
    String genre = provider.getGenres().iterator().next();
    MediaMetadataCompat metadata = provider.getMusicsByGenre(genre).iterator().next();
    String hierarchyAwareMediaID = MediaIDHelper.createMediaID(metadata.getDescription().getMediaId(), MediaIDHelper.MEDIA_ID_MUSICS_BY_GENRE, genre);
    // set a queue from the hierarchyAwareMediaID. It should contain all music with the same
    // genre
    queueManager.setQueueFromMusic(hierarchyAwareMediaID);
    // count all songs with the same genre
    int count = 0;
    for (MediaMetadataCompat m : provider.getMusicsByGenre(genre)) {
        count++;
    }
    // check if size matches
    assertEquals(count, queueManager.getCurrentQueueSize());
    // Now check if all songs in current queue have the expected genre:
    for (int i = 0; i < queueManager.getCurrentQueueSize(); i++) {
        MediaSessionCompat.QueueItem item = queueManager.getCurrentMusic();
        String musicId = MediaIDHelper.extractMusicIDFromMediaID(item.getDescription().getMediaId());
        String itemGenre = provider.getMusic(musicId).getString(MediaMetadataCompat.METADATA_KEY_GENRE);
        assertEquals(genre, itemGenre);
        queueManager.skipQueuePosition(1);
    }
}

11. MusicService#updateMetadata()

Project: LyricHere
File: MusicService.java
private void updateMetadata() {
    if (!QueueHelper.isIndexPlayable(mCurrentIndexOnQueue, mPlayingQueue)) {
        LogUtils.e(TAG, "Can't retrieve current metadata.");
        updatePlaybackState(getResources().getString(R.string.error_no_metadata));
        return;
    }
    MediaSessionCompat.QueueItem queueItem = mPlayingQueue.get(mCurrentIndexOnQueue);
    String musicId = MediaIDHelper.extractMusicIDFromMediaID(queueItem.getDescription().getMediaId());
    MediaMetadataCompat track = mMusicProvider.getMusic(musicId);
    if (track == null) {
        throw new IllegalArgumentException("Invalid musicId " + musicId);
    }
    final String trackId = track.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID);
    if (!TextUtils.equals(musicId, trackId)) {
        IllegalStateException e = new IllegalStateException("track ID should match musicId.");
        LogUtils.e(TAG, "track ID should match musicId.", " musicId=", musicId, " trackId=", trackId, " mediaId from queueItem=", queueItem.getDescription().getMediaId(), " title from queueItem=", queueItem.getDescription().getTitle(), " mediaId from track=", track.getDescription().getMediaId(), " title from track=", track.getDescription().getTitle(), " source.hashcode from track=", track.getString(MusicProvider.CUSTOM_METADATA_TRACK_SOURCE).hashCode(), e);
        throw e;
    }
    LogUtils.d(TAG, "Updating metadata for MusicID= " + musicId);
    mSession.setMetadata(track);
    // locked screen and in other places.
    if (track.getDescription().getIconBitmap() == null && track.getDescription().getIconUri() != null) {
        String albumUri = track.getDescription().getIconUri().toString();
        AlbumArtCache.getInstance().fetch(albumUri, new AlbumArtCache.FetchListener() {

            @Override
            public void onFetched(String artUrl, Bitmap bitmap, Bitmap icon) {
                MediaSessionCompat.QueueItem queueItem = mPlayingQueue.get(mCurrentIndexOnQueue);
                MediaMetadataCompat track = mMusicProvider.getMusic(trackId);
                track = new MediaMetadataCompat.Builder(track).putBitmap(// example, on the lockscreen background when the media session is active.
                MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bitmap).putBitmap(// necessary..
                MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, icon).build();
                mMusicProvider.updateMusic(trackId, track);
                // If we are still playing the same music
                String currentPlayingId = MediaIDHelper.extractMusicIDFromMediaID(queueItem.getDescription().getMediaId());
                if (trackId.equals(currentPlayingId)) {
                    mSession.setMetadata(track);
                }
            }
        });
    }
}

12. CustomMRControllerDialog#updateViews()

Project: AntennaPod
File: CustomMRControllerDialog.java
private void updateViews() {
    if (!viewsCreated || token == null || mediaController == null) {
        rootView.setVisibility(View.GONE);
        return;
    }
    MediaMetadataCompat metadata = mediaController.getMetadata();
    MediaDescriptionCompat description = metadata == null ? null : metadata.getDescription();
    if (description == null) {
        rootView.setVisibility(View.GONE);
        return;
    }
    PlaybackStateCompat state = mediaController.getPlaybackState();
    MediaRouter.RouteInfo route = MediaRouter.getInstance(getContext()).getSelectedRoute();
    CharSequence title = description.getTitle();
    boolean hasTitle = !TextUtils.isEmpty(title);
    CharSequence subtitle = description.getSubtitle();
    boolean hasSubtitle = !TextUtils.isEmpty(subtitle);
    boolean showTitle = false;
    boolean showSubtitle = false;
    if (route.getPresentationDisplayId() != MediaRouter.RouteInfo.PRESENTATION_DISPLAY_ID_NONE) {
        // The user is currently casting screen.
        titleView.setText(android.support.v7.mediarouter.R.string.mr_controller_casting_screen);
        showTitle = true;
    } else if (state == null || state.getState() == PlaybackStateCompat.STATE_NONE) {
        // (Only exception is bluetooth where we don't show anything.)
        if (!route.isDeviceTypeBluetooth()) {
            titleView.setText(android.support.v7.mediarouter.R.string.mr_controller_no_media_selected);
            showTitle = true;
        }
    } else if (!hasTitle && !hasSubtitle) {
        titleView.setText(android.support.v7.mediarouter.R.string.mr_controller_no_info_available);
        showTitle = true;
    } else {
        if (hasTitle) {
            titleView.setText(title);
            showTitle = true;
        }
        if (hasSubtitle) {
            subtitleView.setText(subtitle);
            showSubtitle = true;
        }
    }
    if (showSubtitle) {
        titleView.setSingleLine();
    } else {
        titleView.setMaxLines(2);
    }
    titleView.setVisibility(showTitle ? View.VISIBLE : View.GONE);
    subtitleView.setVisibility(showSubtitle ? View.VISIBLE : View.GONE);
    updateState();
    if (rootView.getVisibility() != View.VISIBLE) {
        artView.setVisibility(View.GONE);
        rootView.setVisibility(View.VISIBLE);
    }
    if (fetchArtSubscription != null) {
        fetchArtSubscription.unsubscribe();
    }
    fetchArtSubscription = Observable.fromCallable(() -> fetchArt(description)).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe( result -> {
        fetchArtSubscription = null;
        if (result.first != null) {
            artView.setBackgroundColor(result.second);
            artView.setImageBitmap(result.first);
            artView.setVisibility(View.VISIBLE);
        } else {
            artView.setVisibility(View.GONE);
        }
    },  error -> Log.e(TAG, Log.getStackTraceString(error)));
}

13. QueueManager#updateMetadata()

Project: android-UniversalMusicPlayer
File: QueueManager.java
public void updateMetadata() {
    MediaSessionCompat.QueueItem currentMusic = getCurrentMusic();
    if (currentMusic == null) {
        mListener.onMetadataRetrieveError();
        return;
    }
    final String musicId = MediaIDHelper.extractMusicIDFromMediaID(currentMusic.getDescription().getMediaId());
    MediaMetadataCompat metadata = mMusicProvider.getMusic(musicId);
    if (metadata == null) {
        throw new IllegalArgumentException("Invalid musicId " + musicId);
    }
    mListener.onMetadataChanged(metadata);
    // locked screen and in other places.
    if (metadata.getDescription().getIconBitmap() == null && metadata.getDescription().getIconUri() != null) {
        String albumUri = metadata.getDescription().getIconUri().toString();
        AlbumArtCache.getInstance().fetch(albumUri, new AlbumArtCache.FetchListener() {

            @Override
            public void onFetched(String artUrl, Bitmap bitmap, Bitmap icon) {
                mMusicProvider.updateMusicArt(musicId, bitmap, icon);
                // If we are still playing the same music, notify the listeners:
                MediaSessionCompat.QueueItem currentMusic = getCurrentMusic();
                if (currentMusic == null) {
                    return;
                }
                String currentPlayingId = MediaIDHelper.extractMusicIDFromMediaID(currentMusic.getDescription().getMediaId());
                if (musicId.equals(currentPlayingId)) {
                    mListener.onMetadataChanged(mMusicProvider.getMusic(currentPlayingId));
                }
            }
        });
    }
}

14. QueueHelperTest#testGetPlayingQueueForSelectedPlayableMedia()

Project: android-UniversalMusicPlayer
File: QueueHelperTest.java
@Test
public void testGetPlayingQueueForSelectedPlayableMedia() throws Exception {
    MediaMetadataCompat selectedMusic = provider.getMusicsByGenre("Genre 1").iterator().next();
    String selectedGenre = selectedMusic.getString(MediaMetadataCompat.METADATA_KEY_GENRE);
    assertEquals("Genre 1", selectedGenre);
    String mediaId = MediaIDHelper.createMediaID(selectedMusic.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID), MediaIDHelper.MEDIA_ID_MUSICS_BY_GENRE, selectedGenre);
    List<MediaSessionCompat.QueueItem> queue = QueueHelper.getPlayingQueue(mediaId, provider);
    assertNotNull(queue);
    assertFalse(queue.isEmpty());
    // sort by music title to simplify assertions below
    Collections.sort(queue, new Comparator<MediaSessionCompat.QueueItem>() {

        @Override
        public int compare(MediaSessionCompat.QueueItem lhs, MediaSessionCompat.QueueItem rhs) {
            return String.valueOf(lhs.getDescription().getTitle()).compareTo(String.valueOf(rhs.getDescription().getTitle()));
        }
    });
    // assert they are all of the expected genre
    for (MediaSessionCompat.QueueItem item : queue) {
        String musicId = MediaIDHelper.extractMusicIDFromMediaID(item.getDescription().getMediaId());
        MediaMetadataCompat metadata = provider.getMusic(musicId);
        assertEquals(selectedGenre, metadata.getString(MediaMetadataCompat.METADATA_KEY_GENRE));
    }
    // assert that all the tracks are what we expect
    assertEquals("Music 1", queue.get(0).getDescription().getTitle());
    assertEquals("Music 2", queue.get(1).getDescription().getTitle());
    assertEquals("Music 3", queue.get(2).getDescription().getTitle());
}

15. MusicProviderTest#testFavorite()

Project: android-UniversalMusicPlayer
File: MusicProviderTest.java
@Test
public void testFavorite() throws Exception {
    MediaMetadataCompat metadata = provider.getShuffledMusic().iterator().next();
    String musicId = metadata.getDescription().getMediaId();
    assertFalse(provider.isFavorite(musicId));
    provider.setFavorite(musicId, true);
    assertTrue(provider.isFavorite(musicId));
    provider.setFavorite(musicId, false);
    assertFalse(provider.isFavorite(musicId));
}

16. MusicProviderTest#testSearchMusicByArtist()

Project: android-UniversalMusicPlayer
File: MusicProviderTest.java
@Test
public void testSearchMusicByArtist() throws Exception {
    int count = 0;
    for (MediaMetadataCompat metadata : provider.searchMusicByArtist("Joe")) {
        String title = metadata.getString(MediaMetadataCompat.METADATA_KEY_ARTIST);
        assertTrue(title.contains("Joe"));
        count++;
    }
    assertEquals(3, count);
}

17. MusicProviderTest#testSearchMusicByAlbum()

Project: android-UniversalMusicPlayer
File: MusicProviderTest.java
@Test
public void testSearchMusicByAlbum() throws Exception {
    int count = 0;
    for (MediaMetadataCompat metadata : provider.searchMusicByAlbum("Album")) {
        String title = metadata.getString(MediaMetadataCompat.METADATA_KEY_ALBUM);
        assertTrue(title.contains("Album"));
        count++;
    }
    assertEquals(5, count);
}

18. MusicProviderTest#testSearchBySongTitle()

Project: android-UniversalMusicPlayer
File: MusicProviderTest.java
@Test
public void testSearchBySongTitle() throws Exception {
    int count = 0;
    for (MediaMetadataCompat metadata : provider.searchMusicBySongTitle("Romantic")) {
        String title = metadata.getString(MediaMetadataCompat.METADATA_KEY_TITLE);
        assertTrue(title.contains("Romantic"));
        count++;
    }
    assertEquals(2, count);
}

19. MusicProviderTest#testGetMusicsByGenre()

Project: android-UniversalMusicPlayer
File: MusicProviderTest.java
@Test
public void testGetMusicsByGenre() throws Exception {
    int count = 0;
    for (MediaMetadataCompat metadata : provider.getMusicsByGenre("Genre 1")) {
        String genre = metadata.getString(MediaMetadataCompat.METADATA_KEY_GENRE);
        assertEquals("Genre 1", genre);
        count++;
    }
    assertEquals(3, count);
}