diff --git a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java index 784c9140b..d4e5f19ce 100644 --- a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java +++ b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java @@ -53,7 +53,6 @@ import android.widget.Toast; import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.Player; -import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import org.schabi.newpipe.BuildConfig; import org.schabi.newpipe.MainActivity; @@ -67,8 +66,6 @@ import org.schabi.newpipe.extractor.services.youtube.YoutubeStreamExtractor; import org.schabi.newpipe.extractor.stream.StreamInfo; import org.schabi.newpipe.player.event.PlayerEventListener; import org.schabi.newpipe.player.old.PlayVideoActivity; -import org.schabi.newpipe.player.playback.MediaSourceManager; -import org.schabi.newpipe.playlist.PlayQueue; import org.schabi.newpipe.playlist.PlayQueueItem; import org.schabi.newpipe.playlist.SinglePlayQueue; import org.schabi.newpipe.report.ErrorActivity; @@ -593,6 +590,9 @@ public final class PopupVideoPlayer extends Service { intentFilter.addAction(ACTION_PLAY_PAUSE); intentFilter.addAction(ACTION_OPEN_DETAIL); intentFilter.addAction(ACTION_REPEAT); + + intentFilter.addAction(Intent.ACTION_SCREEN_ON); + intentFilter.addAction(Intent.ACTION_SCREEN_OFF); } @Override @@ -612,6 +612,12 @@ public final class PopupVideoPlayer extends Service { case ACTION_REPEAT: onRepeatClicked(); break; + case Intent.ACTION_SCREEN_ON: + enableVideoRenderer(true); + break; + case Intent.ACTION_SCREEN_OFF: + enableVideoRenderer(false); + break; } } @@ -663,6 +669,20 @@ public final class PopupVideoPlayer extends Service { showAndAnimateControl(R.drawable.ic_replay_white, false); } + /*////////////////////////////////////////////////////////////////////////// + // Utils + //////////////////////////////////////////////////////////////////////////*/ + + public void enableVideoRenderer(final boolean enable) { + final int videoRendererIndex = getVideoRendererIndex(); + if (trackSelector != null && videoRendererIndex != -1) { + trackSelector.setRendererDisabled(videoRendererIndex, !enable); + } + } + + /*////////////////////////////////////////////////////////////////////////// + // Getters + //////////////////////////////////////////////////////////////////////////*/ @SuppressWarnings("WeakerAccess") public TextView getResizingIndicator() { diff --git a/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java index 7f79048b7..38542aa86 100644 --- a/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java +++ b/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java @@ -63,6 +63,7 @@ import com.google.android.exoplayer2.ui.AspectRatioFrameLayout; import org.schabi.newpipe.R; import org.schabi.newpipe.extractor.MediaFormat; +import org.schabi.newpipe.extractor.stream.AudioStream; import org.schabi.newpipe.extractor.stream.StreamInfo; import org.schabi.newpipe.extractor.stream.VideoStream; import org.schabi.newpipe.playlist.PlayQueueItem; @@ -106,7 +107,6 @@ public abstract class VideoPlayer extends BasePlayer implements SimpleExoPlayer. private static final TrackSelection.Factory FIXED_FACTORY = new FixedTrackSelection.Factory(); private List trackGroupInfos; - private int videoRendererIndex = -1; private TrackGroupArray videoTrackGroups; private TrackGroup selectedVideoTrackGroup; @@ -414,11 +414,9 @@ public abstract class VideoPlayer extends BasePlayer implements SimpleExoPlayer. if (trackSelector.getCurrentMappedTrackInfo() == null) return; qualityTextView.setVisibility(View.GONE); - for (int t = 0; t < simpleExoPlayer.getRendererCount(); t++) { - if (simpleExoPlayer.getRendererType(t) == C.TRACK_TYPE_VIDEO) { - videoRendererIndex = t; - } - } + final int videoRendererIndex = getVideoRendererIndex(); + if (videoRendererIndex == -1) return; + videoTrackGroups = trackSelector.getCurrentMappedTrackInfo().getTrackGroups(videoRendererIndex); final TrackSelection trackSelection = trackSelections.get(videoRendererIndex); if (trackSelection != null) { @@ -544,9 +542,12 @@ public abstract class VideoPlayer extends BasePlayer implements SimpleExoPlayer. } trackSelector.setParameters(parameters); - // Override the selection with the selected quality in case of different frame rate - final MappingTrackSelector.SelectionOverride override = new MappingTrackSelector.SelectionOverride(FIXED_FACTORY, info.group, info.track); - trackSelector.setSelectionOverride(videoRendererIndex, videoTrackGroups, override); + final int videoRendererIndex = getVideoRendererIndex(); + if (videoRendererIndex != -1) { + // Override the selection with the selected quality in case of different frame rate + final MappingTrackSelector.SelectionOverride override = new MappingTrackSelector.SelectionOverride(FIXED_FACTORY, info.group, info.track); + trackSelector.setSelectionOverride(videoRendererIndex, videoTrackGroups, override); + } return true; } else if (playbackSpeedPopupMenuGroupId == menuItem.getGroupId()) { @@ -626,6 +627,18 @@ public abstract class VideoPlayer extends BasePlayer implements SimpleExoPlayer. // Utils //////////////////////////////////////////////////////////////////////////*/ + public int getVideoRendererIndex() { + if (simpleExoPlayer == null) return -1; + + for (int t = 0; t < simpleExoPlayer.getRendererCount(); t++) { + if (simpleExoPlayer.getRendererType(t) == C.TRACK_TYPE_VIDEO) { + return t; + } + } + + return -1; + } + public String resolutionStringOf(final Format format) { final String frameRate = format.frameRate > 0 ? String.valueOf((int) format.frameRate) : ""; return Math.min(format.width, format.height) + "p" + frameRate; diff --git a/app/src/main/java/org/schabi/newpipe/playlist/PlayQueue.java b/app/src/main/java/org/schabi/newpipe/playlist/PlayQueue.java index e52bca98a..33017c4a7 100644 --- a/app/src/main/java/org/schabi/newpipe/playlist/PlayQueue.java +++ b/app/src/main/java/org/schabi/newpipe/playlist/PlayQueue.java @@ -194,8 +194,6 @@ public abstract class PlayQueue implements Serializable { * Will emit a {@link SelectEvent} if the index is not the current playing index. * */ public synchronized void setIndex(final int index) { - if (index == getIndex()) return; - final int oldIndex = getIndex(); int newIndex = index;