List of usage examples for android.support.v4.media.session PlaybackStateCompat getPosition
public long getPosition()
From source file:com.murati.oszk.audiobook.ui.tv.TvPlaybackFragment.java
protected void updatePlaybackState(PlaybackStateCompat state) { if (mPlaybackControlsRow == null) { // We only update playback state after we get a valid metadata. return;//ww w. ja v a2 s .c om } mLastPosition = state.getPosition(); mLastPositionUpdateTime = state.getLastPositionUpdateTime(); switch (state.getState()) { case PlaybackStateCompat.STATE_PLAYING: startProgressAutomation(); mPlayPauseAction.setIndex(PlayPauseAction.PAUSE); break; case PlaybackStateCompat.STATE_PAUSED: stopProgressAutomation(); mPlayPauseAction.setIndex(PlayPauseAction.PLAY); break; } MediaControllerCompat controller = MediaControllerCompat.getMediaController(getActivity()); updatePlayListRow(controller.getQueue()); mRowsAdapter.notifyArrayItemRangeChanged(mRowsAdapter.indexOf(mPlaybackControlsRow), 1); }
From source file:com.bayapps.android.robophish.ui.tv.TvPlaybackFragment.java
protected void updatePlaybackState(PlaybackStateCompat state) { if (mPlaybackControlsRow == null) { // We only update playback state after we get a valid metadata. return;/*ww w . j av a 2 s .c om*/ } mLastPosition = state.getPosition(); mLastPositionUpdateTime = state.getLastPositionUpdateTime(); switch (state.getState()) { case PlaybackStateCompat.STATE_PLAYING: startProgressAutomation(); mPlayPauseAction.setIndex(PlayPauseAction.PAUSE); break; case PlaybackStateCompat.STATE_PAUSED: stopProgressAutomation(); mPlayPauseAction.setIndex(PlayPauseAction.PLAY); break; } MediaControllerCompat controller = getActivity().getSupportMediaController(); updatePlayListRow(controller.getQueue()); mRowsAdapter.notifyArrayItemRangeChanged(mRowsAdapter.indexOf(mPlaybackControlsRow), 1); }
From source file:net.simno.klingar.MediaNotificationManager.java
private void setNotificationPlaybackState(NotificationCompat.Builder builder) { PlaybackStateCompat playbackState = musicController.getPlaybackState(); if (playbackState == null || !started) { service.stopForeground(true);//from w w w . j av a 2 s . c o m return; } if (playbackState.getState() == PlaybackStateCompat.STATE_PLAYING && playbackState.getPosition() >= 0) { builder.setWhen(System.currentTimeMillis() - playbackState.getPosition()).setShowWhen(true) .setUsesChronometer(true); } else { builder.setWhen(0).setShowWhen(false).setUsesChronometer(false); } // Make sure that the notification can be dismissed by the user when we are not playing: builder.setOngoing(playbackState.getState() == PlaybackStateCompat.STATE_PLAYING); }
From source file:org.opensilk.music.ui3.main.FooterScreenPresenter.java
void subscribeBroadcasts() { if (isSubscribed(broadcastSubscriptions)) { return;/*from w w w.j av a 2 s. c om*/ } 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.runbuddy.tomahawk.views.PlaybackPanel.java
private void init() { mTextViewContainer = (FrameLayout) findViewById(R.id.textview_container); mPanelContainer = findViewById(R.id.panel_container); mStationContainer = findViewById(R.id.station_container); mStationContainerInner = findViewById(R.id.station_container_inner); mStationContainerInner.addOnLayoutChangeListener(mStationLayoutChangeListener); mArtistNameButton = (FrameLayout) mTextViewContainer.findViewById(R.id.artist_name_button); mArtistTextView = (TextView) mArtistNameButton.findViewById(R.id.artist_textview); mTrackTextView = (TextView) mTextViewContainer.findViewById(R.id.track_textview); mCompletionTimeTextView = (TextView) findViewById(R.id.completiontime_textview); mCurrentTimeTextView = (TextView) findViewById(R.id.currenttime_textview); mSeekTimeTextView = (TextView) findViewById(R.id.seektime_textview); mStationTextView = (TextView) findViewById(R.id.station_textview); mResolverImageView = (ImageView) findViewById(R.id.resolver_imageview); mPlayButton = (ImageView) findViewById(R.id.play_button); mPauseButton = (ImageView) findViewById(R.id.pause_button); mProgressBar = (ProgressBar) findViewById(R.id.progressbar); mProgressBarThumb = findViewById(R.id.progressbar_thumb); mPlayPauseButtonContainer = (FrameLayout) findViewById(R.id.circularprogressbar_container); mPlayPauseButton = (CircularProgressView) mPlayPauseButtonContainer.findViewById(R.id.circularprogressbar); mProgressBarUpdater = new ProgressBarUpdater(new ProgressBarUpdater.UpdateProgressRunnable() { @Override/* www . j av a2 s . co m*/ public void updateProgress(PlaybackStateCompat playbackState, long duration) { if (playbackState == null) { return; } long currentPosition = playbackState.getPosition(); if (playbackState.getState() != PlaybackStateCompat.STATE_PAUSED) { // Calculate the elapsed time between the last position update and now and unless // paused, we can assume (delta * speed) + current position is approximately the // latest position. This ensure that we do not repeatedly call the getPlaybackState() // on MediaControllerCompat. long timeDelta = SystemClock.elapsedRealtime() - playbackState.getLastPositionUpdateTime(); currentPosition += (int) timeDelta * playbackState.getPlaybackSpeed(); } mProgressBar.setProgress((int) ((float) currentPosition / duration * 10000)); mPlayPauseButton.setProgress((float) currentPosition / duration * 1000); mCurrentTimeTextView.setText(ViewUtils.durationToString(currentPosition)); } }); }
From source file:org.opensilk.music.ui3.nowplaying.NowPlayingScreenPresenter.java
void subscribeBroadcasts() { if (isSubscribed(broadcastSubscription)) return;// w w w .ja v a2 s . c om 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); }
From source file:nuclei.media.MediaPlayerController.java
@Override public int getCurrentPosition() { if (isEquals()) { PlaybackStateCompat state = mMediaControls.getPlaybackState(); if (state != null) { // KJB: NOTE: Pulled from media compat library // For some reason, it seems, that only API 21 doesn't do something equivalent // of this. weird. // Just to be safe, since this is important, doing it here. // It's a little redundant... but, I don't see how this would hurt anything // if it were executed twice (so long as getLastPositionUpdateTime is correct) // TODO: revisit this after support library 25.1.1 try { if ((state.getState() == PlaybackStateCompat.STATE_PLAYING || state.getState() == PlaybackStateCompat.STATE_FAST_FORWARDING || state.getState() == PlaybackStateCompat.STATE_REWINDING)) { final long updateTime = state.getLastPositionUpdateTime(); final long currentTime = SystemClock.elapsedRealtime(); if (updateTime > 0) { final float speed = state.getPlaybackSpeed(); final long duration = getDuration(); long position = (long) (speed * (currentTime - updateTime)) + state.getPosition(); if (duration >= 0 && position > duration) { position = duration; } else if (position < 0) { position = 0; }/*from w ww .j a va 2 s . c o m*/ return (int) position; } } } catch (Exception err) { // because weird things happen sometimes :( LOG.e("Error calculating latest position", err); } return (int) state.getPosition(); } } return -1; }
From source file:com.example.android.mediabrowserservice.QueueFragment.java
private void onPlaybackStateChanged(PlaybackStateCompat state) { LogHelper.d(TAG, "onPlaybackStateChanged ", state); if (state == null) { return;//from w w w .j a v a2s.c o m } mQueueAdapter.setActiveQueueItemId(state.getActiveQueueItemId()); mQueueAdapter.notifyDataSetChanged(); boolean enablePlay = false; StringBuilder statusBuilder = new StringBuilder(); switch (state.getState()) { case PlaybackState.STATE_PLAYING: statusBuilder.append("playing"); enablePlay = false; break; case PlaybackState.STATE_PAUSED: statusBuilder.append("paused"); enablePlay = true; break; case PlaybackState.STATE_STOPPED: statusBuilder.append("ended"); enablePlay = true; break; case PlaybackState.STATE_ERROR: statusBuilder.append("error: ").append(state.getErrorMessage()); break; case PlaybackState.STATE_BUFFERING: statusBuilder.append("buffering"); break; case PlaybackState.STATE_NONE: statusBuilder.append("none"); enablePlay = false; break; case PlaybackState.STATE_CONNECTING: statusBuilder.append("connecting"); break; default: statusBuilder.append(mPlaybackState); } statusBuilder.append(" -- At position: ").append(state.getPosition()); LogHelper.d(TAG, statusBuilder.toString()); if (enablePlay) { mPlayPause.setImageDrawable( ContextCompat.getDrawable(getActivity(), R.drawable.ic_play_arrow_white_24dp)); } else { mPlayPause.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_pause_white_24dp)); } mSkipPrevious.setEnabled((state.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS) != 0); mSkipNext.setEnabled((state.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0); LogHelper.d(TAG, "Queue From MediaController *** Title " + mMediaController.getQueueTitle() + "\n: Queue: " + mMediaController.getQueue() + "\n Metadata " + mMediaController.getMetadata()); }
From source file:com.example.android.supportv4.media.QueueFragment.java
private void onPlaybackStateChanged(PlaybackStateCompat state) { Log.d(TAG, "onPlaybackStateChanged " + state); if (state == null) { return;// w w w . j a v a 2s. c o m } mQueueAdapter.setActiveQueueItemId(state.getActiveQueueItemId()); mQueueAdapter.notifyDataSetChanged(); boolean enablePlay = false; StringBuilder statusBuilder = new StringBuilder(); switch (state.getState()) { case PlaybackStateCompat.STATE_PLAYING: statusBuilder.append("playing"); enablePlay = false; break; case PlaybackStateCompat.STATE_PAUSED: statusBuilder.append("paused"); enablePlay = true; break; case PlaybackStateCompat.STATE_STOPPED: statusBuilder.append("ended"); enablePlay = true; break; case PlaybackStateCompat.STATE_ERROR: statusBuilder.append("error: ").append(state.getErrorMessage()); break; case PlaybackStateCompat.STATE_BUFFERING: statusBuilder.append("buffering"); break; case PlaybackStateCompat.STATE_NONE: statusBuilder.append("none"); enablePlay = false; break; case PlaybackStateCompat.STATE_CONNECTING: statusBuilder.append("connecting"); break; default: statusBuilder.append(mPlaybackState); } statusBuilder.append(" -- At position: ").append(state.getPosition()); Log.d(TAG, statusBuilder.toString()); if (enablePlay) { mPlayPause.setImageDrawable( getActivity().getResources().getDrawable(R.drawable.ic_play_arrow_white_24dp)); } else { mPlayPause.setImageDrawable(getActivity().getResources().getDrawable(R.drawable.ic_pause_white_24dp)); } mSkipPrevious.setEnabled((state.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS) != 0); mSkipNext.setEnabled((state.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0); Log.d(TAG, "Queue From MediaController *** Title " + mMediaController.getQueueTitle() + "\n: Queue: " + mMediaController.getQueue() + "\n Metadata " + mMediaController.getMetadata()); }