List of usage examples for android.support.v4.media.session PlaybackStateCompat getBufferedPosition
public long getBufferedPosition()
From source file:org.opensilk.music.ui3.main.FooterScreenPresenter.java
void subscribeBroadcasts() { if (isSubscribed(broadcastSubscriptions)) { return;//w w w .j a v a 2s . c o m } Subscription s = playbackController.subscribePlayStateChanges(new Action1<PlaybackStateCompat>() { @Override public void call(PlaybackStateCompat playbackState) { final int state = playbackState.getState(); if (state == STATE_BUFFERING || state == STATE_CONNECTING) { setProgress(-1); } else { long position = playbackState.getPosition(); long duration = playbackState.getBufferedPosition(); if (position < 0 || duration <= 0) { setProgress(1000); } else { setProgress((int) (1000 * position / duration)); } Timber.v("Position discrepancy = %d", lastPosition - position); lastPosition = position; lastDuration = duration; lastPosSynced = true; subscribeProgress(MainPresenter.isPlaying(playbackState)); } } }); Subscription s2 = playbackController.subscribeMetaChanges(new Action1<MediaMetadataCompat>() { @Override public void call(MediaMetadataCompat mediaMetadata) { setTrackName(mediaMetadata.getString(METADATA_KEY_TITLE)); setArtistName(mediaMetadata.getString(METADATA_KEY_ARTIST)); updateArtwork(mediaMetadata.getBitmap(METADATA_KEY_ALBUM_ART)); } }); broadcastSubscriptions = new CompositeSubscription(s, s2); }
From source file:org.opensilk.music.ui3.nowplaying.NowPlayingScreenPresenter.java
void subscribeBroadcasts() { if (isSubscribed(broadcastSubscription)) return;//from w w w . ja v a 2s. c o m Subscription s1 = playbackController.subscribePlayStateChanges(new Action1<PlaybackStateCompat>() { @Override public void call(PlaybackStateCompat playbackState) { boolean playing = MainPresenter.isPlaying(playbackState); if (hasView()) { getView().play.setChecked(MainPresenter.isActive(playbackState)); getView().setVisualizerEnabled(playing); } isPlaying = playing; long position = playbackState.getPosition(); long duration = playbackState.getBufferedPosition(); updateProgress(position, duration); if (duration != lastDuration) { setTotalTimeText(duration); } Timber.v("Position discrepancy = %d", lastPosition - position); lastPosition = position; lastDuration = duration; lastPosSynced = true; //TODO shuffle/repeat } }); Subscription s2 = playbackController.subscribeMetaChanges(new Action1<MediaMetadataCompat>() { @Override public void call(MediaMetadataCompat mediaMetadata) { //TODO maybe should just set the large art uri in the metadata String track = mediaMetadata.getString(METADATA_KEY_TITLE); String artist = mediaMetadata.getString(METADATA_KEY_ARTIST); String albumArtist = mediaMetadata.getString(METADATA_KEY_ALBUM_ARTIST); String album = mediaMetadata.getString(METADATA_KEY_ALBUM); String uriString = mediaMetadata.getString(METADATA_KEY_ART_URI); Uri artworkUri = uriString != null ? Uri.parse(uriString) : null; Timber.d("%s, %s, %s, %s", artist, albumArtist, album, uriString); final ArtInfo artInfo = UtilsCommon.makeBestfitArtInfo(albumArtist, artist, album, artworkUri); Timber.d(artInfo.toString()); if (!artInfo.equals(lastArtInfo)) { lastArtInfo = artInfo; if (hasView() && getView().artwork != null) { requestor.newRequest(getView().artwork, getView().paletteObserver, artInfo, ArtworkType.LARGE); } } //Todo update display } }); final long interval = 250; Subscription s3 = Observable.interval(interval, TimeUnit.MILLISECONDS) .observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Long>() { @Override public void call(Long aLong) { long position = lastPosition; if (lastPosSynced) { lastPosSynced = false; } else if (isPlaying) { position += interval + 10; lastPosition = position; } long duration = lastDuration; updateProgress(position, duration); } }); broadcastSubscription = new CompositeSubscription(s1, s2, s3); }