mirror of https://github.com/TeamNewPipe/NewPipe
126 lines
3.8 KiB
Java
126 lines
3.8 KiB
Java
package org.schabi.newpipe.player.notification;
|
|
|
|
import static org.schabi.newpipe.player.helper.PlayerHelper.MinimizeMode.MINIMIZE_ON_EXIT_MODE_NONE;
|
|
import static org.schabi.newpipe.player.notification.NotificationConstants.ACTION_RECREATE_NOTIFICATION;
|
|
|
|
import android.content.Intent;
|
|
import android.graphics.Bitmap;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
|
|
import com.google.android.exoplayer2.Player.RepeatMode;
|
|
|
|
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
|
import org.schabi.newpipe.player.Player;
|
|
import org.schabi.newpipe.player.helper.PlayerHelper;
|
|
import org.schabi.newpipe.player.ui.PlayerUi;
|
|
|
|
public final class NotificationPlayerUi extends PlayerUi {
|
|
private boolean foregroundNotificationAlreadyCreated = false;
|
|
private final NotificationUtil notificationUtil;
|
|
|
|
public NotificationPlayerUi(@NonNull final Player player) {
|
|
super(player);
|
|
notificationUtil = new NotificationUtil(player);
|
|
}
|
|
|
|
@Override
|
|
public void initPlayer() {
|
|
super.initPlayer();
|
|
if (!foregroundNotificationAlreadyCreated) {
|
|
notificationUtil.createNotificationAndStartForeground();
|
|
foregroundNotificationAlreadyCreated = true;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void destroy() {
|
|
super.destroy();
|
|
notificationUtil.cancelNotificationAndStopForeground();
|
|
}
|
|
|
|
@Override
|
|
public void onThumbnailLoaded(@Nullable final Bitmap bitmap) {
|
|
super.onThumbnailLoaded(bitmap);
|
|
notificationUtil.updateThumbnail();
|
|
}
|
|
|
|
@Override
|
|
public void onBlocked() {
|
|
super.onBlocked();
|
|
notificationUtil.createNotificationIfNeededAndUpdate(false);
|
|
}
|
|
|
|
@Override
|
|
public void onPlaying() {
|
|
super.onPlaying();
|
|
notificationUtil.createNotificationIfNeededAndUpdate(false);
|
|
}
|
|
|
|
@Override
|
|
public void onBuffering() {
|
|
super.onBuffering();
|
|
if (notificationUtil.shouldUpdateBufferingSlot()) {
|
|
notificationUtil.createNotificationIfNeededAndUpdate(false);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onPaused() {
|
|
super.onPaused();
|
|
|
|
// Remove running notification when user does not want minimization to background or popup
|
|
if (PlayerHelper.getMinimizeOnExitAction(context) == MINIMIZE_ON_EXIT_MODE_NONE
|
|
&& player.videoPlayerSelected()) {
|
|
notificationUtil.cancelNotificationAndStopForeground();
|
|
} else {
|
|
notificationUtil.createNotificationIfNeededAndUpdate(false);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onPausedSeek() {
|
|
super.onPausedSeek();
|
|
notificationUtil.createNotificationIfNeededAndUpdate(false);
|
|
}
|
|
|
|
@Override
|
|
public void onCompleted() {
|
|
super.onCompleted();
|
|
notificationUtil.createNotificationIfNeededAndUpdate(false);
|
|
}
|
|
|
|
@Override
|
|
public void onRepeatModeChanged(@RepeatMode final int repeatMode) {
|
|
super.onRepeatModeChanged(repeatMode);
|
|
notificationUtil.createNotificationIfNeededAndUpdate(false);
|
|
}
|
|
|
|
@Override
|
|
public void onShuffleModeEnabledChanged(final boolean shuffleModeEnabled) {
|
|
super.onShuffleModeEnabledChanged(shuffleModeEnabled);
|
|
notificationUtil.createNotificationIfNeededAndUpdate(false);
|
|
}
|
|
|
|
@Override
|
|
public void onBroadcastReceived(final Intent intent) {
|
|
super.onBroadcastReceived(intent);
|
|
if (ACTION_RECREATE_NOTIFICATION.equals(intent.getAction())) {
|
|
notificationUtil.createNotificationIfNeededAndUpdate(true);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onMetadataChanged(@NonNull final StreamInfo info) {
|
|
super.onMetadataChanged(info);
|
|
notificationUtil.createNotificationIfNeededAndUpdate(true);
|
|
}
|
|
|
|
@Override
|
|
public void onPlayQueueEdited() {
|
|
super.onPlayQueueEdited();
|
|
notificationUtil.createNotificationIfNeededAndUpdate(false);
|
|
}
|
|
}
|