2022-07-21 18:00:43 +02:00
|
|
|
package org.schabi.newpipe.player.mediasession;
|
|
|
|
|
|
|
|
import android.content.Intent;
|
2022-07-21 22:44:59 +02:00
|
|
|
import android.graphics.Bitmap;
|
2022-07-21 18:00:43 +02:00
|
|
|
import android.support.v4.media.session.MediaSessionCompat;
|
|
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
2022-07-21 22:44:59 +02:00
|
|
|
import androidx.annotation.Nullable;
|
2022-07-21 18:00:43 +02:00
|
|
|
|
|
|
|
import org.schabi.newpipe.R;
|
|
|
|
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
|
|
|
import org.schabi.newpipe.player.Player;
|
|
|
|
import org.schabi.newpipe.player.ui.PlayerUi;
|
|
|
|
import org.schabi.newpipe.util.StreamTypeUtil;
|
|
|
|
|
|
|
|
import java.util.Optional;
|
|
|
|
|
|
|
|
public class MediaSessionPlayerUi extends PlayerUi {
|
|
|
|
|
|
|
|
private MediaSessionManager mediaSessionManager;
|
|
|
|
|
|
|
|
public MediaSessionPlayerUi(@NonNull final Player player) {
|
|
|
|
super(player);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void initPlayer() {
|
|
|
|
super.initPlayer();
|
|
|
|
if (mediaSessionManager != null) {
|
|
|
|
mediaSessionManager.dispose();
|
|
|
|
}
|
2022-07-21 22:40:21 +02:00
|
|
|
mediaSessionManager = new MediaSessionManager(context, player);
|
2022-07-21 18:00:43 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void destroyPlayer() {
|
|
|
|
super.destroyPlayer();
|
|
|
|
if (mediaSessionManager != null) {
|
|
|
|
mediaSessionManager.dispose();
|
|
|
|
mediaSessionManager = null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onBroadcastReceived(final Intent intent) {
|
|
|
|
super.onBroadcastReceived(intent);
|
|
|
|
// TODO decide whether to handle ACTION_HEADSET_PLUG or not
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onMetadataChanged(@NonNull final StreamInfo info) {
|
|
|
|
super.onMetadataChanged(info);
|
|
|
|
|
|
|
|
final boolean showThumbnail = player.getPrefs().getBoolean(
|
|
|
|
context.getString(R.string.show_thumbnail_key), true);
|
|
|
|
|
|
|
|
mediaSessionManager.setMetadata(
|
|
|
|
player.getVideoTitle(),
|
|
|
|
player.getUploaderName(),
|
2022-07-22 10:17:22 +02:00
|
|
|
showThumbnail ? player.getThumbnail() : null,
|
2022-07-21 18:00:43 +02:00
|
|
|
StreamTypeUtil.isLiveStream(info.getStreamType()) ? -1 : info.getDuration()
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2022-07-21 22:44:59 +02:00
|
|
|
@Override
|
|
|
|
public void onThumbnailLoaded(@Nullable final Bitmap bitmap) {
|
|
|
|
super.onThumbnailLoaded(bitmap);
|
|
|
|
player.getCurrentStreamInfo().ifPresent(this::onMetadataChanged);
|
|
|
|
}
|
|
|
|
|
2022-07-21 18:00:43 +02:00
|
|
|
public void handleMediaButtonIntent(final Intent intent) {
|
|
|
|
if (mediaSessionManager != null) {
|
|
|
|
mediaSessionManager.handleMediaButtonIntent(intent);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public Optional<MediaSessionCompat.Token> getSessionToken() {
|
|
|
|
return Optional.ofNullable(mediaSessionManager).map(MediaSessionManager::getSessionToken);
|
|
|
|
}
|
|
|
|
}
|