Example usage for android.support.v4.media.session PlaybackStateCompat getPosition

List of usage examples for android.support.v4.media.session PlaybackStateCompat getPosition

Introduction

In this page you can find the example usage for android.support.v4.media.session PlaybackStateCompat getPosition.

Prototype

public long getPosition() 

Source Link

Document

Get the playback position in ms at last position update time.

Usage

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());
}