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.player.Player;
|
|
|
|
import org.schabi.newpipe.player.ui.PlayerUi;
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2022-07-21 22:44:59 +02:00
|
|
|
@Override
|
|
|
|
public void onThumbnailLoaded(@Nullable final Bitmap bitmap) {
|
|
|
|
super.onThumbnailLoaded(bitmap);
|
2022-07-22 11:31:49 +02:00
|
|
|
if (mediaSessionManager != null) {
|
|
|
|
mediaSessionManager.triggerMetadataUpdate();
|
|
|
|
}
|
2022-07-21 22:44:59 +02:00
|
|
|
}
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|