fix: small codestyle fixes
This commit is contained in:
parent
2edc223e77
commit
b567d428ad
|
@ -103,7 +103,7 @@ public class DownloadDialog extends DialogFragment
|
|||
@State
|
||||
AudioTracksWrapper wrappedAudioTracks;
|
||||
@State
|
||||
int selectedAudioStreamIndex;
|
||||
int selectedAudioTrackIndex;
|
||||
@State
|
||||
int selectedVideoIndex; // set in the constructor
|
||||
@State
|
||||
|
@ -173,7 +173,7 @@ public class DownloadDialog extends DialogFragment
|
|||
final List<List<AudioStream>> groupedAudioStreams =
|
||||
ListHelper.getGroupedAudioStreams(context, audioStreams);
|
||||
this.wrappedAudioTracks = new AudioTracksWrapper(groupedAudioStreams, context);
|
||||
this.selectedAudioStreamIndex =
|
||||
this.selectedAudioTrackIndex =
|
||||
ListHelper.getDefaultAudioTrackGroup(context, groupedAudioStreams);
|
||||
|
||||
// TODO: Adapt this code when the downloader support other types of stream deliveries
|
||||
|
@ -433,7 +433,7 @@ public class DownloadDialog extends DialogFragment
|
|||
}
|
||||
|
||||
dialogBinding.audioTrackSpinner.setAdapter(audioTrackAdapter);
|
||||
dialogBinding.audioTrackSpinner.setSelection(selectedAudioStreamIndex);
|
||||
dialogBinding.audioTrackSpinner.setSelection(selectedAudioTrackIndex);
|
||||
}
|
||||
|
||||
private void setupAudioSpinner() {
|
||||
|
@ -619,8 +619,8 @@ public class DownloadDialog extends DialogFragment
|
|||
onItemSelectedSetFileName();
|
||||
break;
|
||||
case R.id.audio_track_spinner:
|
||||
final boolean trackChanged = selectedAudioStreamIndex != position;
|
||||
selectedAudioStreamIndex = position;
|
||||
final boolean trackChanged = selectedAudioTrackIndex != position;
|
||||
selectedAudioTrackIndex = position;
|
||||
if (trackChanged) {
|
||||
updateSecondaryStreams();
|
||||
fetchStreamsSize();
|
||||
|
@ -726,10 +726,10 @@ public class DownloadDialog extends DialogFragment
|
|||
}
|
||||
|
||||
private StreamSizeWrapper<AudioStream> getWrappedAudioStreams() {
|
||||
if (selectedAudioStreamIndex < 0 || selectedAudioStreamIndex > wrappedAudioTracks.size()) {
|
||||
if (selectedAudioTrackIndex < 0 || selectedAudioTrackIndex > wrappedAudioTracks.size()) {
|
||||
return StreamSizeWrapper.empty();
|
||||
}
|
||||
return wrappedAudioTracks.getTracksList().get(selectedAudioStreamIndex);
|
||||
return wrappedAudioTracks.getTracksList().get(selectedAudioTrackIndex);
|
||||
}
|
||||
|
||||
private int getSubtitleIndexBy(@NonNull final List<SubtitlesStream> streams) {
|
||||
|
|
|
@ -667,11 +667,8 @@ public final class PlayQueueActivity extends AppCompatActivity
|
|||
return;
|
||||
}
|
||||
|
||||
player.saveStreamProgressState();
|
||||
final String newAudioTrack = availableStreams.get(itemId).getAudioTrackId();
|
||||
player.setRecovery();
|
||||
player.setAudioTrack(newAudioTrack);
|
||||
player.reloadPlayQueueManager();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -180,13 +180,18 @@ public final class Player implements PlaybackListener, Listener {
|
|||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
// play queue might be null e.g. while player is starting
|
||||
@Nullable private PlayQueue playQueue;
|
||||
@Nullable
|
||||
private PlayQueue playQueue;
|
||||
|
||||
@Nullable private MediaSourceManager playQueueManager;
|
||||
@Nullable
|
||||
private MediaSourceManager playQueueManager;
|
||||
|
||||
@Nullable private PlayQueueItem currentItem;
|
||||
@Nullable private MediaItemTag currentMetadata;
|
||||
@Nullable private Bitmap currentThumbnail;
|
||||
@Nullable
|
||||
private PlayQueueItem currentItem;
|
||||
@Nullable
|
||||
private MediaItemTag currentMetadata;
|
||||
@Nullable
|
||||
private Bitmap currentThumbnail;
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Player
|
||||
|
@ -195,12 +200,17 @@ public final class Player implements PlaybackListener, Listener {
|
|||
private ExoPlayer simpleExoPlayer;
|
||||
private AudioReactor audioReactor;
|
||||
|
||||
@NonNull private final DefaultTrackSelector trackSelector;
|
||||
@NonNull private final LoadController loadController;
|
||||
@NonNull private final DefaultRenderersFactory renderFactory;
|
||||
@NonNull
|
||||
private final DefaultTrackSelector trackSelector;
|
||||
@NonNull
|
||||
private final LoadController loadController;
|
||||
@NonNull
|
||||
private final DefaultRenderersFactory renderFactory;
|
||||
|
||||
@NonNull private final VideoPlaybackResolver videoResolver;
|
||||
@NonNull private final AudioPlaybackResolver audioResolver;
|
||||
@NonNull
|
||||
private final VideoPlaybackResolver videoResolver;
|
||||
@NonNull
|
||||
private final AudioPlaybackResolver audioResolver;
|
||||
|
||||
private final PlayerService service; //TODO try to remove and replace everything with context
|
||||
|
||||
|
@ -225,24 +235,32 @@ public final class Player implements PlaybackListener, Listener {
|
|||
|
||||
private BroadcastReceiver broadcastReceiver;
|
||||
private IntentFilter intentFilter;
|
||||
@Nullable private PlayerServiceEventListener fragmentListener = null;
|
||||
@Nullable private PlayerEventListener activityListener = null;
|
||||
@Nullable
|
||||
private PlayerServiceEventListener fragmentListener = null;
|
||||
@Nullable
|
||||
private PlayerEventListener activityListener = null;
|
||||
|
||||
@NonNull private final SerialDisposable progressUpdateDisposable = new SerialDisposable();
|
||||
@NonNull private final CompositeDisposable databaseUpdateDisposable = new CompositeDisposable();
|
||||
@NonNull
|
||||
private final SerialDisposable progressUpdateDisposable = new SerialDisposable();
|
||||
@NonNull
|
||||
private final CompositeDisposable databaseUpdateDisposable = new CompositeDisposable();
|
||||
|
||||
// This is the only listener we need for thumbnail loading, since there is always at most only
|
||||
// one thumbnail being loaded at a time. This field is also here to maintain a strong reference,
|
||||
// which would otherwise be garbage collected since Picasso holds weak references to targets.
|
||||
@NonNull private final Target currentThumbnailTarget;
|
||||
@NonNull
|
||||
private final Target currentThumbnailTarget;
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Utils
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
@NonNull private final Context context;
|
||||
@NonNull private final SharedPreferences prefs;
|
||||
@NonNull private final HistoryRecordManager recordManager;
|
||||
@NonNull
|
||||
private final Context context;
|
||||
@NonNull
|
||||
private final SharedPreferences prefs;
|
||||
@NonNull
|
||||
private final HistoryRecordManager recordManager;
|
||||
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
|
@ -334,7 +352,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||
isAudioOnly = audioPlayerSelected();
|
||||
|
||||
if (intent.hasExtra(PLAYBACK_QUALITY)) {
|
||||
setPlaybackQuality(intent.getStringExtra(PLAYBACK_QUALITY));
|
||||
videoResolver.setPlaybackQuality(intent.getStringExtra(PLAYBACK_QUALITY));
|
||||
}
|
||||
|
||||
// Resolve enqueue intents
|
||||
|
@ -342,7 +360,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||
playQueue.append(newQueue.getStreams());
|
||||
return;
|
||||
|
||||
// Resolve enqueue next intents
|
||||
// Resolve enqueue next intents
|
||||
} else if (intent.getBooleanExtra(ENQUEUE_NEXT, false) && playQueue != null) {
|
||||
final int currentIndex = playQueue.getIndex();
|
||||
playQueue.append(newQueue.getStreams());
|
||||
|
@ -914,7 +932,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||
|
||||
private Disposable getProgressUpdateDisposable() {
|
||||
return Observable.interval(PROGRESS_LOOP_INTERVAL_MILLIS, MILLISECONDS,
|
||||
AndroidSchedulers.mainThread())
|
||||
AndroidSchedulers.mainThread())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(ignored -> triggerProgressUpdate(),
|
||||
error -> Log.e(TAG, "Progress update failure: ", error));
|
||||
|
@ -923,7 +941,6 @@ public final class Player implements PlaybackListener, Listener {
|
|||
//endregion
|
||||
|
||||
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Playback states
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
@ -1247,7 +1264,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||
.flatMap(MediaItemTag::getMaybeStreamInfo).orElse(null);
|
||||
final MediaItemTag.AudioTrack previousAudioTrack =
|
||||
Optional.ofNullable(currentMetadata)
|
||||
.flatMap(MediaItemTag::getMaybeAudioTrack).orElse(null);
|
||||
.flatMap(MediaItemTag::getMaybeAudioTrack).orElse(null);
|
||||
currentMetadata = tag;
|
||||
|
||||
if (!currentMetadata.getErrors().isEmpty()) {
|
||||
|
@ -1270,9 +1287,9 @@ public final class Player implements PlaybackListener, Listener {
|
|||
updateMetadataWith(info);
|
||||
} else if (previousAudioTrack == null
|
||||
|| tag.getMaybeAudioTrack()
|
||||
.map(t -> t.getSelectedAudioStreamIndex()
|
||||
!= previousAudioTrack.getSelectedAudioStreamIndex())
|
||||
.orElse(false)) {
|
||||
.map(t -> t.getSelectedAudioStreamIndex()
|
||||
!= previousAudioTrack.getSelectedAudioStreamIndex())
|
||||
.orElse(false)) {
|
||||
notifyAudioTrackUpdateToListeners();
|
||||
}
|
||||
});
|
||||
|
@ -1361,6 +1378,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||
// Errors
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
//region Errors
|
||||
|
||||
/**
|
||||
* Process exceptions produced by {@link com.google.android.exoplayer2.ExoPlayer ExoPlayer}.
|
||||
* <p>There are multiple types of errors:</p>
|
||||
|
@ -1387,8 +1405,9 @@ public final class Player implements PlaybackListener, Listener {
|
|||
* For any error above that is <b>not</b> explicitly <b>catchable</b>, the player will
|
||||
* create a notification so users are aware.
|
||||
* </ul>
|
||||
*
|
||||
* @see com.google.android.exoplayer2.Player.Listener#onPlayerError(PlaybackException)
|
||||
* */
|
||||
*/
|
||||
// Any error code not explicitly covered here are either unrelated to NewPipe use case
|
||||
// (e.g. DRM) or not recoverable (e.g. Decoder error). In both cases, the player should
|
||||
// shutdown.
|
||||
|
@ -2141,7 +2160,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||
// because the stream source will be probably the same as the current played
|
||||
if (sourceType == SourceType.VIDEO_WITH_SEPARATED_AUDIO
|
||||
|| (sourceType == SourceType.VIDEO_WITH_AUDIO_OR_AUDIO_ONLY
|
||||
&& isNullOrEmpty(streamInfo.getAudioStreams()))) {
|
||||
&& isNullOrEmpty(streamInfo.getAudioStreams()))) {
|
||||
// It's not needed to reload the play queue manager only if the content's stream type
|
||||
// is a video stream, a live stream or an ended live stream
|
||||
return !StreamTypeUtil.isVideo(streamType);
|
||||
|
@ -2203,12 +2222,18 @@ public final class Player implements PlaybackListener, Listener {
|
|||
}
|
||||
|
||||
public void setPlaybackQuality(@Nullable final String quality) {
|
||||
saveStreamProgressState();
|
||||
setRecovery();
|
||||
videoResolver.setPlaybackQuality(quality);
|
||||
reloadPlayQueueManager();
|
||||
}
|
||||
|
||||
public void setAudioTrack(@Nullable final String audioTrackId) {
|
||||
saveStreamProgressState();
|
||||
setRecovery();
|
||||
videoResolver.setAudioTrack(audioTrackId);
|
||||
audioResolver.setAudioTrack(audioTrackId);
|
||||
reloadPlayQueueManager();
|
||||
}
|
||||
|
||||
|
||||
|
@ -2286,7 +2311,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||
|
||||
/**
|
||||
* Get the video renderer index of the current playing stream.
|
||||
*
|
||||
* <p>
|
||||
* This method returns the video renderer index of the current
|
||||
* {@link MappingTrackSelector.MappedTrackInfo} or {@link #RENDERER_UNAVAILABLE} if the current
|
||||
* {@link MappingTrackSelector.MappedTrackInfo} is null or if there is no video renderer index.
|
||||
|
|
|
@ -38,6 +38,13 @@ public class AudioPlaybackResolver implements PlaybackResolver {
|
|||
this.dataSource = dataSource;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a media source providing audio. If a service has no separate {@link AudioStream}s we
|
||||
* use a video stream as audio source to support audio background playback.
|
||||
*
|
||||
* @param info of the stream
|
||||
* @return the audio source to use or null if none could be found
|
||||
*/
|
||||
@Override
|
||||
@Nullable
|
||||
public MediaSource resolve(@NonNull final StreamInfo info) {
|
||||
|
|
|
@ -110,7 +110,8 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa
|
|||
|
||||
protected PlayerBinding binding;
|
||||
private final Handler controlsVisibilityHandler = new Handler(Looper.getMainLooper());
|
||||
@Nullable private SurfaceHolderCallback surfaceHolderCallback;
|
||||
@Nullable
|
||||
private SurfaceHolderCallback surfaceHolderCallback;
|
||||
boolean surfaceIsSetup = false;
|
||||
|
||||
|
||||
|
@ -533,6 +534,7 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa
|
|||
|
||||
/**
|
||||
* Sets the current duration into the corresponding elements.
|
||||
*
|
||||
* @param currentProgress the current progress, in milliseconds
|
||||
*/
|
||||
private void updatePlayBackElementsCurrentDuration(final int currentProgress) {
|
||||
|
@ -545,6 +547,7 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa
|
|||
|
||||
/**
|
||||
* Sets the video duration time into all control components (e.g. seekbar).
|
||||
*
|
||||
* @param duration the video duration, in milliseconds
|
||||
*/
|
||||
private void setVideoDurationToControls(final int duration) {
|
||||
|
@ -1261,11 +1264,8 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa
|
|||
return;
|
||||
}
|
||||
|
||||
player.saveStreamProgressState();
|
||||
final String newResolution = availableStreams.get(menuItemIndex).getResolution();
|
||||
player.setRecovery();
|
||||
player.setPlaybackQuality(newResolution);
|
||||
player.reloadPlayQueueManager();
|
||||
|
||||
binding.qualityTextView.setText(menuItem.getTitle());
|
||||
}
|
||||
|
@ -1285,11 +1285,8 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa
|
|||
return;
|
||||
}
|
||||
|
||||
player.saveStreamProgressState();
|
||||
final String newAudioTrack = availableStreams.get(menuItemIndex).getAudioTrackId();
|
||||
player.setRecovery();
|
||||
player.setAudioTrack(newAudioTrack);
|
||||
player.reloadPlayQueueManager();
|
||||
|
||||
binding.audioTrackTextView.setText(menuItem.getTitle());
|
||||
}
|
||||
|
|
|
@ -715,9 +715,9 @@ public final class ListHelper {
|
|||
/**
|
||||
* Get a {@link Comparator} to compare {@link AudioStream}s by their tracks.
|
||||
*
|
||||
* <p>In this order:</p>
|
||||
* <p>Tracks will be compared this order:</p>
|
||||
* <ol>
|
||||
* <li>If {@code preferOriginalAudio}: is original audio</li>
|
||||
* <li>If {@code preferOriginalAudio}: use original audio</li>
|
||||
* <li>Language matches {@code preferredLanguage}</li>
|
||||
* <li>
|
||||
* Track type ranks highest in this order:
|
||||
|
@ -752,9 +752,9 @@ public final class ListHelper {
|
|||
/**
|
||||
* Get a {@link Comparator} to compare {@link AudioStream}s by their tracks.
|
||||
*
|
||||
* <p>In this order:</p>
|
||||
* <p>Tracks will be compared this order:</p>
|
||||
* <ol>
|
||||
* <li>If {@code preferOriginalAudio}: is original audio</li>
|
||||
* <li>If {@code preferOriginalAudio}: use original audio</li>
|
||||
* <li>Language matches {@code preferredLanguage}</li>
|
||||
* <li>
|
||||
* Track type ranks highest in this order:
|
||||
|
|
|
@ -224,6 +224,8 @@ public class StreamItemAdapter<T extends Stream, U extends Stream> extends BaseA
|
|||
public static class StreamSizeWrapper<T extends Stream> implements Serializable {
|
||||
private static final StreamSizeWrapper<Stream> EMPTY =
|
||||
new StreamSizeWrapper<>(Collections.emptyList(), null);
|
||||
private static final int SIZE_UNSET = -2;
|
||||
|
||||
private final List<T> streamsList;
|
||||
private final long[] streamSizes;
|
||||
private final String unknownSize;
|
||||
|
@ -251,7 +253,7 @@ public class StreamItemAdapter<T extends Stream, U extends Stream> extends BaseA
|
|||
final Callable<Boolean> fetchAndSet = () -> {
|
||||
boolean hasChanged = false;
|
||||
for (final X stream : streamsWrapper.getStreamsList()) {
|
||||
if (streamsWrapper.getSizeInBytes(stream) > -2) {
|
||||
if (streamsWrapper.getSizeInBytes(stream) > SIZE_UNSET) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -270,7 +272,7 @@ public class StreamItemAdapter<T extends Stream, U extends Stream> extends BaseA
|
|||
}
|
||||
|
||||
public void resetSizes() {
|
||||
Arrays.fill(streamSizes, -2);
|
||||
Arrays.fill(streamSizes, SIZE_UNSET);
|
||||
}
|
||||
|
||||
public static <X extends Stream> StreamSizeWrapper<X> empty() {
|
||||
|
|
Loading…
Reference in New Issue