mirror of https://github.com/TeamNewPipe/NewPipe
100 lines
3.0 KiB
Java
100 lines
3.0 KiB
Java
package org.schabi.newpipe.player.playback;
|
|
|
|
import android.net.Uri;
|
|
import android.os.Bundle;
|
|
import android.support.v4.media.MediaDescriptionCompat;
|
|
import android.support.v4.media.MediaMetadataCompat;
|
|
|
|
import org.schabi.newpipe.player.Player;
|
|
import org.schabi.newpipe.player.mediasession.MediaSessionCallback;
|
|
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
|
|
|
|
public class PlayerMediaSession implements MediaSessionCallback {
|
|
private final Player player;
|
|
|
|
public PlayerMediaSession(final Player player) {
|
|
this.player = player;
|
|
}
|
|
|
|
@Override
|
|
public void playPrevious() {
|
|
player.playPrevious();
|
|
}
|
|
|
|
@Override
|
|
public void playNext() {
|
|
player.playNext();
|
|
}
|
|
|
|
@Override
|
|
public void playItemAtIndex(final int index) {
|
|
if (player.getPlayQueue() == null) {
|
|
return;
|
|
}
|
|
player.selectQueueItem(player.getPlayQueue().getItem(index));
|
|
}
|
|
|
|
@Override
|
|
public int getCurrentPlayingIndex() {
|
|
if (player.getPlayQueue() == null) {
|
|
return -1;
|
|
}
|
|
return player.getPlayQueue().getIndex();
|
|
}
|
|
|
|
@Override
|
|
public int getQueueSize() {
|
|
if (player.getPlayQueue() == null) {
|
|
return -1;
|
|
}
|
|
return player.getPlayQueue().size();
|
|
}
|
|
|
|
@Override
|
|
public MediaDescriptionCompat getQueueMetadata(final int index) {
|
|
if (player.getPlayQueue() == null) {
|
|
return null;
|
|
}
|
|
final PlayQueueItem item = player.getPlayQueue().getItem(index);
|
|
if (item == null) {
|
|
return null;
|
|
}
|
|
|
|
final MediaDescriptionCompat.Builder descriptionBuilder
|
|
= new MediaDescriptionCompat.Builder()
|
|
.setMediaId(String.valueOf(index))
|
|
.setTitle(item.getTitle())
|
|
.setSubtitle(item.getUploader());
|
|
|
|
// set additional metadata for A2DP/AVRCP
|
|
final Bundle additionalMetadata = new Bundle();
|
|
additionalMetadata.putString(MediaMetadataCompat.METADATA_KEY_TITLE, item.getTitle());
|
|
additionalMetadata.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, item.getUploader());
|
|
additionalMetadata
|
|
.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, item.getDuration() * 1000);
|
|
additionalMetadata.putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, index + 1);
|
|
additionalMetadata
|
|
.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, player.getPlayQueue().size());
|
|
descriptionBuilder.setExtras(additionalMetadata);
|
|
|
|
final Uri thumbnailUri = Uri.parse(item.getThumbnailUrl());
|
|
if (thumbnailUri != null) {
|
|
descriptionBuilder.setIconUri(thumbnailUri);
|
|
}
|
|
|
|
return descriptionBuilder.build();
|
|
}
|
|
|
|
@Override
|
|
public void play() {
|
|
player.play();
|
|
// hide the player controls even if the play command came from the media session
|
|
player.hideControls(0, 0);
|
|
}
|
|
|
|
@Override
|
|
public void pause() {
|
|
player.pause();
|
|
}
|
|
}
|