Search in sources :

Example 16 with PlaybackStateCompat

use of android.support.v4.media.session.PlaybackStateCompat in project Gadgetbridge by Freeyourgadget.

the class NotificationListener method handleMediaSessionNotification.

/**
 * Try to handle media session notifications that tell info about the current play state.
 *
 * @param mediaSession The mediasession to handle.
 * @return true if notification was handled, false otherwise
 */
public boolean handleMediaSessionNotification(MediaSessionCompat.Token mediaSession) {
    final MusicSpec musicSpec = new MusicSpec();
    final MusicStateSpec stateSpec = new MusicStateSpec();
    MediaControllerCompat c;
    try {
        c = new MediaControllerCompat(getApplicationContext(), mediaSession);
        PlaybackStateCompat s = c.getPlaybackState();
        stateSpec.position = (int) (s.getPosition() / 1000);
        stateSpec.playRate = Math.round(100 * s.getPlaybackSpeed());
        stateSpec.repeat = 1;
        stateSpec.shuffle = 1;
        switch(s.getState()) {
            case PlaybackStateCompat.STATE_PLAYING:
                stateSpec.state = MusicStateSpec.STATE_PLAYING;
                break;
            case PlaybackStateCompat.STATE_STOPPED:
                stateSpec.state = MusicStateSpec.STATE_STOPPED;
                break;
            case PlaybackStateCompat.STATE_PAUSED:
                stateSpec.state = MusicStateSpec.STATE_PAUSED;
                break;
            default:
                stateSpec.state = MusicStateSpec.STATE_UNKNOWN;
                break;
        }
        MediaMetadataCompat d = c.getMetadata();
        if (d == null)
            return false;
        if (d.containsKey(MediaMetadata.METADATA_KEY_ARTIST))
            musicSpec.artist = d.getString(MediaMetadataCompat.METADATA_KEY_ARTIST);
        if (d.containsKey(MediaMetadata.METADATA_KEY_ALBUM))
            musicSpec.album = d.getString(MediaMetadataCompat.METADATA_KEY_ALBUM);
        if (d.containsKey(MediaMetadata.METADATA_KEY_TITLE))
            musicSpec.track = d.getString(MediaMetadataCompat.METADATA_KEY_TITLE);
        if (d.containsKey(MediaMetadata.METADATA_KEY_DURATION))
            musicSpec.duration = (int) d.getLong(MediaMetadataCompat.METADATA_KEY_DURATION) / 1000;
        if (d.containsKey(MediaMetadata.METADATA_KEY_NUM_TRACKS))
            musicSpec.trackCount = (int) d.getLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS);
        if (d.containsKey(MediaMetadata.METADATA_KEY_TRACK_NUMBER))
            musicSpec.trackNr = (int) d.getLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER);
        // finally, tell the device about it
        if (mSetMusicInfoRunnable != null) {
            mHandler.removeCallbacks(mSetMusicInfoRunnable);
        }
        mSetMusicInfoRunnable = new Runnable() {

            @Override
            public void run() {
                GBApplication.deviceService().onSetMusicInfo(musicSpec);
            }
        };
        mHandler.postDelayed(mSetMusicInfoRunnable, 100);
        if (mSetMusicStateRunnable != null) {
            mHandler.removeCallbacks(mSetMusicStateRunnable);
        }
        mSetMusicStateRunnable = new Runnable() {

            @Override
            public void run() {
                GBApplication.deviceService().onSetMusicState(stateSpec);
            }
        };
        mHandler.postDelayed(mSetMusicStateRunnable, 100);
        return true;
    } catch (NullPointerException | RemoteException | SecurityException e) {
        return false;
    }
}
Also used : MusicStateSpec(nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec) PlaybackStateCompat(android.support.v4.media.session.PlaybackStateCompat) MediaMetadataCompat(android.support.v4.media.MediaMetadataCompat) MusicSpec(nodomain.freeyourgadget.gadgetbridge.model.MusicSpec) MediaControllerCompat(android.support.v4.media.session.MediaControllerCompat) RemoteException(android.os.RemoteException)

Aggregations

PlaybackStateCompat (android.support.v4.media.session.PlaybackStateCompat)13 MediaControllerCompat (android.support.v4.media.session.MediaControllerCompat)10 MediaMetadataCompat (android.support.v4.media.MediaMetadataCompat)6 RemoteException (android.os.RemoteException)4 View (android.view.View)4 ImageView (android.widget.ImageView)3 TextView (android.widget.TextView)3 PendingIntent (android.app.PendingIntent)2 ComponentName (android.content.ComponentName)2 Context (android.content.Context)2 Configuration (android.content.res.Configuration)2 Bitmap (android.graphics.Bitmap)2 Drawable (android.graphics.drawable.Drawable)2 Uri (android.net.Uri)2 Bundle (android.os.Bundle)2 NonNull (android.support.annotation.NonNull)2 MediaDescriptionCompat (android.support.v4.media.MediaDescriptionCompat)2 MediaSessionCompat (android.support.v4.media.session.MediaSessionCompat)2 Pair (android.support.v4.util.Pair)2 MarginLayoutParamsCompat (android.support.v4.view.MarginLayoutParamsCompat)2