mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-30 23:03:00 +00:00 
			
		
		
		
	Remove SimplifyOptionalCallChains.
This commit is contained in:
		| @@ -255,11 +255,8 @@ public final class VideoDetailFragment | ||||
|             playerUi.ifPresent(MainPlayerUi::toggleFullscreen); | ||||
|         } | ||||
|  | ||||
|         //noinspection SimplifyOptionalCallChains | ||||
|         if (playAfterConnect | ||||
|                 || (currentInfo != null | ||||
|                 && isAutoplayEnabled() | ||||
|                 && !playerUi.isPresent())) { | ||||
|         if (playAfterConnect || (currentInfo != null && isAutoplayEnabled() | ||||
|                 && playerUi.isEmpty())) { | ||||
|             autoPlayEnabled = true; // forcefully start playing | ||||
|             openVideoPlayerAutoFullscreen(); | ||||
|         } | ||||
| @@ -1174,16 +1171,15 @@ public final class VideoDetailFragment | ||||
|      * be reused in a few milliseconds and the flickering would be annoying. | ||||
|      */ | ||||
|     private void hideMainPlayerOnLoadingNewStream() { | ||||
|         //noinspection SimplifyOptionalCallChains | ||||
|         if (!isPlayerServiceAvailable() || !getRoot().isPresent() | ||||
|                 || !player.videoPlayerSelected()) { | ||||
|         final var root = getRoot(); | ||||
|         if (!isPlayerServiceAvailable() || root.isEmpty() || !player.videoPlayerSelected()) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         removeVideoPlayerView(); | ||||
|         if (isAutoplayEnabled()) { | ||||
|             playerService.stopForImmediateReusing(); | ||||
|             getRoot().ifPresent(view -> view.setVisibility(View.GONE)); | ||||
|             root.ifPresent(view -> view.setVisibility(View.GONE)); | ||||
|         } else { | ||||
|             playerHolder.stopService(); | ||||
|         } | ||||
| @@ -1887,10 +1883,8 @@ public final class VideoDetailFragment | ||||
|     @Override | ||||
|     public void onFullscreenStateChanged(final boolean fullscreen) { | ||||
|         setupBrightness(); | ||||
|         //noinspection SimplifyOptionalCallChains | ||||
|         if (!isPlayerAndPlayerServiceAvailable() | ||||
|                 || !player.UIs().get(MainPlayerUi.class).isPresent() | ||||
|                 || getRoot().map(View::getParent).orElse(null) == null) { | ||||
|         if (!isPlayerAndPlayerServiceAvailable() || player.UIs().get(MainPlayerUi.class).isEmpty() | ||||
|                 || getRoot().map(View::getParent).isEmpty()) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -1695,18 +1695,16 @@ public final class Player implements PlaybackListener, Listener { | ||||
|     } | ||||
|  | ||||
|     private void saveStreamProgressState(final long progressMillis) { | ||||
|         //noinspection SimplifyOptionalCallChains | ||||
|         if (!getCurrentStreamInfo().isPresent() | ||||
|                 || !prefs.getBoolean(context.getString(R.string.enable_watch_history_key), true)) { | ||||
|         getCurrentStreamInfo().ifPresent(info -> { | ||||
|             if (!prefs.getBoolean(context.getString(R.string.enable_watch_history_key), true)) { | ||||
|                 return; | ||||
|             } | ||||
|             if (DEBUG) { | ||||
|                 Log.d(TAG, "saveStreamProgressState() called with: progressMillis=" + progressMillis | ||||
|                     + ", currentMetadata=[" + getCurrentStreamInfo().get().getName() + "]"); | ||||
|                         + ", currentMetadata=[" + info.getName() + "]"); | ||||
|             } | ||||
|  | ||||
|         databaseUpdateDisposable | ||||
|                 .add(recordManager.saveStreamState(getCurrentStreamInfo().get(), progressMillis) | ||||
|             databaseUpdateDisposable.add(recordManager.saveStreamState(info, progressMillis) | ||||
|                     .observeOn(AndroidSchedulers.mainThread()) | ||||
|                     .doOnError(e -> { | ||||
|                         if (DEBUG) { | ||||
| @@ -1715,6 +1713,7 @@ public final class Player implements PlaybackListener, Listener { | ||||
|                     }) | ||||
|                     .onErrorComplete() | ||||
|                     .subscribe()); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     public void saveStreamProgressState() { | ||||
| @@ -2036,19 +2035,11 @@ public final class Player implements PlaybackListener, Listener { | ||||
|         // in livestreams) so we will be not able to execute the block below. | ||||
|         // Reload the play queue manager in this case, which is the behavior when we don't know the | ||||
|         // index of the video renderer or playQueueManagerReloadingNeeded returns true. | ||||
|         final Optional<StreamInfo> optCurrentStreamInfo = getCurrentStreamInfo(); | ||||
|         if (!optCurrentStreamInfo.isPresent()) { | ||||
|             reloadPlayQueueManager(); | ||||
|             setRecovery(); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         final StreamInfo info = optCurrentStreamInfo.get(); | ||||
|  | ||||
|         // In the case we don't know the source type, fallback to the one with video with audio or | ||||
|         // audio-only source. | ||||
|         final SourceType sourceType = videoResolver.getStreamSourceType().orElse( | ||||
|                 SourceType.VIDEO_WITH_AUDIO_OR_AUDIO_ONLY); | ||||
|         getCurrentStreamInfo().ifPresentOrElse(info -> { | ||||
|             // In the case we don't know the source type, fallback to the one with video with audio | ||||
|             // or audio-only source. | ||||
|             final SourceType sourceType = videoResolver.getStreamSourceType() | ||||
|                     .orElse(SourceType.VIDEO_WITH_AUDIO_OR_AUDIO_ONLY); | ||||
|  | ||||
|             if (playQueueManagerReloadingNeeded(sourceType, info, getVideoRendererIndex())) { | ||||
|                 reloadPlayQueueManager(); | ||||
| @@ -2059,8 +2050,7 @@ public final class Player implements PlaybackListener, Listener { | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
|             final DefaultTrackSelector.Parameters.Builder parametersBuilder = | ||||
|                     trackSelector.buildUponParameters(); | ||||
|                 final var parametersBuilder = trackSelector.buildUponParameters(); | ||||
|  | ||||
|                 // Enable/disable the video track and the ability to select subtitles | ||||
|                 parametersBuilder.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, !videoEnabled); | ||||
| @@ -2070,6 +2060,10 @@ public final class Player implements PlaybackListener, Listener { | ||||
|             } | ||||
|  | ||||
|             setRecovery(); | ||||
|         }, () -> { | ||||
|             reloadPlayQueueManager(); | ||||
|             setRecovery(); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -423,7 +423,7 @@ public class MediaSourceManager { | ||||
|     private Single<ManagedMediaSource> getLoadedMediaSource(@NonNull final PlayQueueItem stream) { | ||||
|         return stream.getStream().map(streamInfo -> { | ||||
|             final MediaSource source = playbackListener.sourceOf(stream, streamInfo); | ||||
|             if (source == null || !MediaItemTag.from(source.getMediaItem()).isPresent()) { | ||||
|             if (source == null || MediaItemTag.from(source.getMediaItem()).isEmpty()) { | ||||
|                 final String message = "Unable to resolve source from stream info. " | ||||
|                         + "URL: " + stream.getUrl() + ", " | ||||
|                         + "audio count: " + streamInfo.getAudioStreams().size() + ", " | ||||
|   | ||||
| @@ -8,6 +8,7 @@ import android.widget.ImageView; | ||||
|  | ||||
| import androidx.annotation.IntDef; | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.core.graphics.BitmapCompat; | ||||
| import androidx.core.math.MathUtils; | ||||
| import androidx.preference.PreferenceManager; | ||||
| @@ -16,7 +17,6 @@ import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.util.DeviceUtils; | ||||
|  | ||||
| import java.lang.annotation.Retention; | ||||
| import java.util.Optional; | ||||
| import java.util.function.IntSupplier; | ||||
|  | ||||
| import static java.lang.annotation.RetentionPolicy.SOURCE; | ||||
| @@ -66,21 +66,19 @@ public final class SeekbarPreviewThumbnailHelper { | ||||
|  | ||||
|     public static void tryResizeAndSetSeekbarPreviewThumbnail( | ||||
|             @NonNull final Context context, | ||||
|             @NonNull final Optional<Bitmap> optPreviewThumbnail, | ||||
|             @Nullable final Bitmap previewThumbnail, | ||||
|             @NonNull final ImageView currentSeekbarPreviewThumbnail, | ||||
|             @NonNull final IntSupplier baseViewWidthSupplier) { | ||||
|  | ||||
|         if (!optPreviewThumbnail.isPresent()) { | ||||
|         if (previewThumbnail == null) { | ||||
|             currentSeekbarPreviewThumbnail.setVisibility(View.GONE); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         currentSeekbarPreviewThumbnail.setVisibility(View.VISIBLE); | ||||
|         final Bitmap srcBitmap = optPreviewThumbnail.get(); | ||||
|  | ||||
|         // Resize original bitmap | ||||
|         try { | ||||
|             final int srcWidth = srcBitmap.getWidth() > 0 ? srcBitmap.getWidth() : 1; | ||||
|             final int srcWidth = previewThumbnail.getWidth() > 0 ? previewThumbnail.getWidth() : 1; | ||||
|             final int newWidth = MathUtils.clamp( | ||||
|                     // Use 1/4 of the width for the preview | ||||
|                     Math.round(baseViewWidthSupplier.getAsInt() / 4f), | ||||
| @@ -90,15 +88,16 @@ public final class SeekbarPreviewThumbnailHelper { | ||||
|                     Math.round(srcWidth * 2.5f)); | ||||
|  | ||||
|             final float scaleFactor = (float) newWidth / srcWidth; | ||||
|             final int newHeight = (int) (srcBitmap.getHeight() * scaleFactor); | ||||
|             final int newHeight = (int) (previewThumbnail.getHeight() * scaleFactor); | ||||
|  | ||||
|             currentSeekbarPreviewThumbnail.setImageBitmap(BitmapCompat.createScaledBitmap(srcBitmap, | ||||
|                     newWidth, newHeight, null, true)); | ||||
|             currentSeekbarPreviewThumbnail.setImageBitmap( | ||||
|                     BitmapCompat.createScaledBitmap(previewThumbnail, newWidth, newHeight, null, | ||||
|                             true)); | ||||
|         } catch (final Exception ex) { | ||||
|             Log.e(TAG, "Failed to resize and set seekbar preview thumbnail", ex); | ||||
|             currentSeekbarPreviewThumbnail.setVisibility(View.GONE); | ||||
|         } finally { | ||||
|             srcBitmap.recycle(); | ||||
|             previewThumbnail.recycle(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -74,6 +74,7 @@ import org.schabi.newpipe.util.NavigationHelper; | ||||
| import org.schabi.newpipe.util.external_communication.KoreUtils; | ||||
| import org.schabi.newpipe.util.external_communication.ShareUtils; | ||||
|  | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.Objects; | ||||
| import java.util.Optional; | ||||
| @@ -746,15 +747,10 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh | ||||
|     } | ||||
|  | ||||
|     private int getNearestStreamSegmentPosition(final long playbackPosition) { | ||||
|         //noinspection SimplifyOptionalCallChains | ||||
|         if (!player.getCurrentStreamInfo().isPresent()) { | ||||
|             return 0; | ||||
|         } | ||||
|  | ||||
|         int nearestPosition = 0; | ||||
|         final List<StreamSegment> segments = player.getCurrentStreamInfo() | ||||
|                 .get() | ||||
|                 .getStreamSegments(); | ||||
|                 .map(StreamInfo::getStreamSegments) | ||||
|                 .orElse(Collections.emptyList()); | ||||
|  | ||||
|         for (int i = 0; i < segments.size(); i++) { | ||||
|             if (segments.get(i).getStartTimeSeconds() * 1000L > playbackPosition) { | ||||
|   | ||||
| @@ -566,7 +566,7 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa | ||||
|         SeekbarPreviewThumbnailHelper | ||||
|                 .tryResizeAndSetSeekbarPreviewThumbnail( | ||||
|                         player.getContext(), | ||||
|                         seekbarPreviewThumbnailHolder.getBitmapAt(progress), | ||||
|                         seekbarPreviewThumbnailHolder.getBitmapAt(progress).orElse(null), | ||||
|                         binding.currentSeekbarPreviewThumbnail, | ||||
|                         binding.subtitleView::getWidth); | ||||
|  | ||||
| @@ -982,12 +982,7 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa | ||||
|     } | ||||
|  | ||||
|     private void updateStreamRelatedViews() { | ||||
|         //noinspection SimplifyOptionalCallChains | ||||
|         if (!player.getCurrentStreamInfo().isPresent()) { | ||||
|             return; | ||||
|         } | ||||
|         final StreamInfo info = player.getCurrentStreamInfo().get(); | ||||
|  | ||||
|         player.getCurrentStreamInfo().ifPresent(info -> { | ||||
|             binding.qualityTextView.setVisibility(View.GONE); | ||||
|             binding.playbackSpeed.setVisibility(View.GONE); | ||||
|  | ||||
| @@ -1016,9 +1011,8 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa | ||||
|  | ||||
|                 case VIDEO_STREAM: | ||||
|                 case POST_LIVE_STREAM: | ||||
|                 //noinspection SimplifyOptionalCallChains | ||||
|                     if (player.getCurrentMetadata() != null | ||||
|                         && !player.getCurrentMetadata().getMaybeQuality().isPresent() | ||||
|                             && player.getCurrentMetadata().getMaybeQuality().isEmpty() | ||||
|                             || (info.getVideoStreams().isEmpty() | ||||
|                             && info.getVideoOnlyStreams().isEmpty())) { | ||||
|                         break; | ||||
| @@ -1037,6 +1031,7 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa | ||||
|  | ||||
|             buildPlaybackSpeedMenu(); | ||||
|             binding.playbackSpeed.setVisibility(View.VISIBLE); | ||||
|         }); | ||||
|     } | ||||
|     //endregion | ||||
|  | ||||
| @@ -1198,8 +1193,7 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa | ||||
|         if (menuItem.getGroupId() == POPUP_MENU_ID_QUALITY) { | ||||
|             final int menuItemIndex = menuItem.getItemId(); | ||||
|             @Nullable final MediaItemTag currentMetadata = player.getCurrentMetadata(); | ||||
|             //noinspection SimplifyOptionalCallChains | ||||
|             if (currentMetadata == null || !currentMetadata.getMaybeQuality().isPresent()) { | ||||
|             if (currentMetadata == null || currentMetadata.getMaybeQuality().isEmpty()) { | ||||
|                 return true; | ||||
|             } | ||||
|  | ||||
| @@ -1300,9 +1294,8 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa | ||||
|  | ||||
|         // Build UI | ||||
|         buildCaptionMenu(availableLanguages); | ||||
|         //noinspection SimplifyOptionalCallChains | ||||
|         if (player.getTrackSelector().getParameters().getRendererDisabled( | ||||
|                 player.getCaptionRendererIndex()) || !selectedTracks.isPresent()) { | ||||
|                 player.getCaptionRendererIndex()) || selectedTracks.isEmpty()) { | ||||
|             binding.captionTextView.setText(R.string.caption_none); | ||||
|         } else { | ||||
|             binding.captionTextView.setText(selectedTracks.get().language); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Isira Seneviratne
					Isira Seneviratne