diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 18e424524..3136774e1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -38,9 +38,6 @@ - - NavigationHelper.installKore(context)) - .setNegativeButton(R.string.cancel, (DialogInterface dialog, int which) -> { - }); - builder.create().show(); - } - - private void setupActionBarOnError(final String url) { - if (DEBUG) Log.d(TAG, "setupActionBarHandlerOnError() called with: url = [" + url + "]"); - Log.e("-----", "missing code"); - }*/ - - private void setupActionBar(final StreamInfo info) { - if (DEBUG) Log.d(TAG, "setupActionBarHandler() called with: info = [" + info + "]"); - boolean isExternalPlayerEnabled = PreferenceManager.getDefaultSharedPreferences(activity) - .getBoolean(activity.getString(R.string.use_external_video_player_key), false); - - sortedVideoStreams = ListHelper.getSortedStreamVideosList( - activity, - info.getVideoStreams(), - info.getVideoOnlyStreams(), - false); - selectedVideoStreamIndex = ListHelper.getDefaultResolutionIndex(activity, sortedVideoStreams); - - /*final StreamItemAdapter streamsAdapter = - new StreamItemAdapter<>(activity, - new StreamSizeWrapper<>(sortedVideoStreams, activity), isExternalPlayerEnabled); - - spinnerToolbar.setAdapter(streamsAdapter); - spinnerToolbar.setSelection(selectedVideoStreamIndex); - spinnerToolbar.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - selectedVideoStreamIndex = position; - } - - @Override - public void onNothingSelected(AdapterView parent) { - } - });*/ - } - /*////////////////////////////////////////////////////////////////////////// // OwnStack //////////////////////////////////////////////////////////////////////////*/ @@ -866,7 +730,7 @@ public class VideoDetailFragment if (DEBUG) Log.d(TAG, "onBackPressed() called"); // If we are in fullscreen mode just exit from it via first back press - if (player != null && player.isInFullscreen()) { + if (player != null && player.isFullscreen()) { if (!PlayerHelper.isTablet(activity)) player.onPause(); restoreDefaultOrientation(); setAutoplay(false); @@ -874,11 +738,10 @@ public class VideoDetailFragment } // If we have something in history of played items we replay it here - boolean isPreviousCanBePlayed = player != null + if (player != null && player.getPlayQueue() != null && player.videoPlayerSelected() - && player.getPlayQueue().previous(); - if (isPreviousCanBePlayed) { + && player.getPlayQueue().previous()) { return true; } // That means that we are on the start of the stack, @@ -930,9 +793,8 @@ public class VideoDetailFragment } public void selectAndLoadVideo(int serviceId, String videoUrl, String name, PlayQueue playQueue) { - boolean streamIsTheSame = this.playQueue != null && this.playQueue.equals(playQueue); // Situation when user switches from players to main player. All needed data is here, we can start watching - if (streamIsTheSame) { + if (this.playQueue != null && this.playQueue.equals(playQueue)) { openVideoPlayer(); return; } @@ -1056,7 +918,7 @@ public class VideoDetailFragment .getBoolean(activity.getString(R.string.use_external_audio_player_key), false); // If a user watched video inside fullscreen mode and than chose another player return to non-fullscreen mode - if (player != null && player.isInFullscreen()) player.toggleFullscreen(); + if (player != null && player.isFullscreen()) player.toggleFullscreen(); if (!useExternalAudioPlayer && android.os.Build.VERSION.SDK_INT >= 16) { openNormalBackgroundPlayer(append); @@ -1072,18 +934,16 @@ public class VideoDetailFragment } // See UI changes while remote playQueue changes - if (!bounded) startService(false); + if (!bound) startService(false); // If a user watched video inside fullscreen mode and than chose another player return to non-fullscreen mode - if (player != null && player.isInFullscreen()) player.toggleFullscreen(); + if (player != null && player.isFullscreen()) player.toggleFullscreen(); PlayQueue queue = setupPlayQueueForIntent(append); if (append) { NavigationHelper.enqueueOnPopupPlayer(activity, queue, false); } else { - Runnable onAllow = () -> NavigationHelper.playOnPopupPlayer(activity, queue, true); - if (shouldAskBeforeClearingQueue()) showClearingQueueConfirmation(onAllow); - else onAllow.run(); + replaceQueueIfUserConfirms(() -> NavigationHelper.playOnPopupPlayer(activity, queue, true)); } } @@ -1093,27 +953,23 @@ public class VideoDetailFragment VideoStream selectedVideoStream = getSelectedVideoStream(); startOnExternalPlayer(activity, currentInfo, selectedVideoStream); } else { - Runnable onAllow = this::openNormalPlayer; - if (shouldAskBeforeClearingQueue()) showClearingQueueConfirmation(onAllow); - else onAllow.run(); + replaceQueueIfUserConfirms(this::openMainPlayer); } } private void openNormalBackgroundPlayer(final boolean append) { // See UI changes while remote playQueue changes - if (!bounded) startService(false); + if (!bound) startService(false); PlayQueue queue = setupPlayQueueForIntent(append); if (append) { NavigationHelper.enqueueOnBackgroundPlayer(activity, queue, false); } else { - Runnable onAllow = () -> NavigationHelper.playOnBackgroundPlayer(activity, queue, true); - if (shouldAskBeforeClearingQueue()) showClearingQueueConfirmation(onAllow); - else onAllow.run(); + replaceQueueIfUserConfirms(() -> NavigationHelper.playOnBackgroundPlayer(activity, queue, true)); } } - private void openNormalPlayer() { + private void openMainPlayer() { if (playerService == null) { startService(true); return; @@ -1144,7 +1000,7 @@ public class VideoDetailFragment PlayQueue queue = playQueue; // Size can be 0 because queue removes bad stream automatically when error occurs - if (playQueue == null || playQueue.size() == 0) + if (queue == null || queue.size() == 0) queue = new SinglePlayQueue(currentInfo); return queue; @@ -1284,18 +1140,18 @@ public class VideoDetailFragment boolean isPortrait = metrics.heightPixels > metrics.widthPixels; int height; - if (player != null && player.isInFullscreen()) + if (player != null && player.isFullscreen()) height = isInMultiWindow() ? getView().getHeight() : activity.getWindow().getDecorView().getHeight(); else height = isPortrait ? (int) (metrics.widthPixels / (16.0f / 9.0f)) - : (int) (metrics.heightPixels / 2f); + : (int) (metrics.heightPixels / 2.0f); thumbnailImageView.setLayoutParams(new FrameLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, height)); thumbnailImageView.setMinimumHeight(height); if (player != null) { int maxHeight = (int) (metrics.heightPixels * MAX_PLAYER_HEIGHT); - player.getSurfaceView().setHeights(height, player.isInFullscreen() ? height : maxHeight); + player.getSurfaceView().setHeights(height, player.isFullscreen() ? height : maxHeight); } } @@ -1353,7 +1209,7 @@ public class VideoDetailFragment private void restoreDefaultOrientation() { if (player == null || !player.videoPlayerSelected() || activity == null) return; - if (player != null && player.isInFullscreen()) player.toggleFullscreen(); + if (player != null && player.isFullscreen()) player.toggleFullscreen(); // This will show systemUI and pause the player. // User can tap on Play button and video will be in fullscreen mode again // Note for tablet: trying to avoid orientation changes since it's not easy to physically rotate the tablet every time @@ -1375,7 +1231,6 @@ public class VideoDetailFragment contentRootLayoutHiding.setVisibility(View.INVISIBLE); } - //animateView(spinnerToolbar, false, 200); animateView(thumbnailPlayButton, false, 50); animateView(detailDurationView, false, 100); animateView(detailPositionView, false, 100); @@ -1392,7 +1247,7 @@ public class VideoDetailFragment if(relatedStreamsLayout != null){ if(showRelatedStreams){ - relatedStreamsLayout.setVisibility(player != null && player.isInFullscreen() ? View.GONE : View.INVISIBLE); + relatedStreamsLayout.setVisibility(player != null && player.isFullscreen() ? View.GONE : View.INVISIBLE); }else{ relatedStreamsLayout.setVisibility(View.GONE); } @@ -1419,7 +1274,7 @@ public class VideoDetailFragment getChildFragmentManager().beginTransaction() .replace(R.id.relatedStreamsLayout, RelatedVideosFragment.getInstance(info)) .commitNow(); - relatedStreamsLayout.setVisibility(player != null && player.isInFullscreen() ? View.GONE : View.VISIBLE); + relatedStreamsLayout.setVisibility(player != null && player.isFullscreen() ? View.GONE : View.VISIBLE); } } @@ -1506,9 +1361,6 @@ public class VideoDetailFragment prepareDescription(info.getDescription()); updateProgressInfo(info); - - //animateView(spinnerToolbar, true, 500); - setupActionBar(info); initThumbnailViews(info); if (player == null || player.isPlayerStopped()) @@ -1527,7 +1379,6 @@ public class VideoDetailFragment case LIVE_STREAM: case AUDIO_LIVE_STREAM: detailControlsDownload.setVisibility(View.GONE); - spinnerToolbar.setVisibility(View.GONE); break; default: if(info.getAudioStreams().isEmpty()) detailControlsBackground.setVisibility(View.GONE); @@ -1535,7 +1386,6 @@ public class VideoDetailFragment || !info.getVideoOnlyStreams().isEmpty()) break; detailControlsPopup.setVisibility(View.GONE); - spinnerToolbar.setVisibility(View.GONE); thumbnailPlayButton.setImageResource(R.drawable.ic_headset_white_24dp); break; } @@ -1629,8 +1479,8 @@ public class VideoDetailFragment }, e -> { if (DEBUG) e.printStackTrace(); }, () -> { - animateView(positionView, false, 0); - animateView(detailPositionView, false, 0); + positionView.setVisibility(View.GONE); + detailPositionView.setVisibility(View.GONE); }); } @@ -1653,15 +1503,16 @@ public class VideoDetailFragment @Override public void onQueueUpdate(PlayQueue queue) { playQueue = queue; + StackItem stackWithQueue; // This should be the only place where we push data to stack. It will allow to have live instance of PlayQueue with actual // information about deleted/added items inside Channel/Playlist queue and makes possible to have a history of played items if (stack.isEmpty() || !stack.peek().getPlayQueue().equals(queue)) { stack.push(new StackItem(serviceId, url, name, playQueue)); - } else if (findQueueInStack(queue) != null) { + } else if ((stackWithQueue = findQueueInStack(queue)) != null) { // On every MainPlayer service's destroy() playQueue gets disposed and no longer able to track progress. // That's why we update our cached disposed queue with the new one that is active and have the same history // Without that the cached playQueue will have an old recovery position - findQueueInStack(queue).setPlayQueue(queue); + stackWithQueue.setPlayQueue(queue); } if (DEBUG) { @@ -1679,7 +1530,7 @@ public class VideoDetailFragment restoreDefaultOrientation(); break; case BasePlayer.STATE_PLAYING: - if (positionView.getAlpha() != 1f + if (positionView.getAlpha() != 1.0f && player.getPlayQueue() != null && player.getPlayQueue().getItem() != null && player.getPlayQueue().getItem().getUrl().equals(url)) { @@ -1725,7 +1576,7 @@ public class VideoDetailFragment public void onPlayerError(ExoPlaybackException error) { if (error.type == ExoPlaybackException.TYPE_SOURCE || error.type == ExoPlaybackException.TYPE_UNEXPECTED) { hideMainPlayer(); - if (playerService != null && player.isInFullscreen()) + if (playerService != null && player.isFullscreen()) player.toggleFullscreen(); } } @@ -1824,7 +1675,7 @@ public class VideoDetailFragment // Listener implementation public void hideSystemUiIfNeeded() { - if (player != null && player.isInFullscreen() && bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) + if (player != null && player.isFullscreen() && bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) hideSystemUi(); } @@ -1897,11 +1748,19 @@ public class VideoDetailFragment return item; } - private boolean shouldAskBeforeClearingQueue() { - PlayQueue activeQueue = player != null ? player.getPlayQueue() : null; + private void replaceQueueIfUserConfirms(final Runnable onAllow) { + @Nullable final PlayQueue activeQueue = player == null ? null : player.getPlayQueue(); + // Player will have STATE_IDLE when a user pressed back button - return isClearingQueueConfirmationRequired(activity) && playerIsNotStopped() - && activeQueue != null && !activeQueue.equals(playQueue) && activeQueue.getStreams().size() > 1; + if (isClearingQueueConfirmationRequired(activity) + && playerIsNotStopped() + && activeQueue != null + && !activeQueue.equals(playQueue) + && activeQueue.getStreams().size() > 1) { + showClearingQueueConfirmation(onAllow); + } else { + onAllow.run(); + } } private void showClearingQueueConfirmation(Runnable onAllow) { @@ -1964,13 +1823,13 @@ public class VideoDetailFragment // Disable click because overlay buttons located on top of buttons from the player setOverlayElementsClickable(false); hideSystemUiIfNeeded(); - boolean needToExpand = isLandscape() + // Conditions when the player should be expanded to fullscreen + if (isLandscape() && player != null && player.isPlaying() - && !player.isInFullscreen() + && !player.isFullscreen() && !PlayerHelper.isTablet(activity) - && player.videoPlayerSelected(); - if (needToExpand) player.toggleFullscreen(); + && player.videoPlayerSelected()) player.toggleFullscreen(); break; case BottomSheetBehavior.STATE_COLLAPSED: // Re-enable clicks @@ -1979,7 +1838,7 @@ public class VideoDetailFragment break; case BottomSheetBehavior.STATE_DRAGGING: case BottomSheetBehavior.STATE_SETTLING: - if (player != null && player.isInFullscreen()) showSystemUi(); + if (player != null && player.isFullscreen()) showSystemUi(); if (player != null && player.isControlsVisible()) player.hideControls(0, 0); break; } @@ -1997,8 +1856,8 @@ public class VideoDetailFragment } private void updateOverlayData(@Nullable String title, @Nullable String uploader, @Nullable String thumbnailUrl) { - overlayTitleTextView.setText(!TextUtils.isEmpty(title) ? title : ""); - overlayChannelTextView.setText(!TextUtils.isEmpty(uploader) ? uploader : ""); + overlayTitleTextView.setText(TextUtils.isEmpty(title) ? "" : title); + overlayChannelTextView.setText(TextUtils.isEmpty(uploader) ? "" : uploader); overlayThumbnailImageView.setImageResource(R.drawable.dummy_thumbnail_dark); if (!TextUtils.isEmpty(thumbnailUrl)) imageLoader.displayImage(thumbnailUrl, overlayThumbnailImageView, @@ -2006,8 +1865,7 @@ public class VideoDetailFragment } private void setOverlayPlayPauseImage() { - boolean playing = player != null && player.getPlayer().getPlayWhenReady(); - int attr = playing ? R.attr.pause : R.attr.play; + int attr = player != null && player.getPlayer().getPlayWhenReady() ? R.attr.pause : R.attr.play; overlayPlayPauseButton.setImageResource(ThemeHelper.resolveResourceIdFromAttr(activity, attr)); } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java index f2e8aa244..5fd470745 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java @@ -436,16 +436,16 @@ public class SearchFragment if (TextUtils.isEmpty(searchString) || TextUtils.isEmpty(searchEditText.getText())) { searchToolbarContainer.setTranslationX(100); - searchToolbarContainer.setAlpha(0f); + searchToolbarContainer.setAlpha(0.0f); searchToolbarContainer.setVisibility(View.VISIBLE); searchToolbarContainer.animate() .translationX(0) - .alpha(1f) + .alpha(1.0f) .setDuration(200) .setInterpolator(new DecelerateInterpolator()).start(); } else { searchToolbarContainer.setTranslationX(0); - searchToolbarContainer.setAlpha(1f); + searchToolbarContainer.setAlpha(1.0f); searchToolbarContainer.setVisibility(View.VISIBLE); } } diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java index e408f49f6..99b38aae7 100644 --- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java +++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java @@ -337,7 +337,7 @@ public final class BackgroundPlayer extends Service { @Override public void onPrepared(boolean playWhenReady) { super.onPrepared(playWhenReady); - simpleExoPlayer.setVolume(1f); + simpleExoPlayer.setVolume(1.0f); } @Override diff --git a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java index 490419c64..c31654473 100644 --- a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java +++ b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java @@ -158,7 +158,7 @@ public abstract class BasePlayer implements // Playback //////////////////////////////////////////////////////////////////////////*/ - protected static final float[] PLAYBACK_SPEEDS = {0.5f, 0.75f, 1f, 1.25f, 1.5f, 1.75f, 2f}; + protected static final float[] PLAYBACK_SPEEDS = {0.5f, 0.75f, 1.0f, 1.25f, 1.5f, 1.75f, 2.0f}; protected PlayQueue playQueue; protected PlayQueueAdapter playQueueAdapter; @@ -227,7 +227,7 @@ public abstract class BasePlayer implements public void setup() { if (simpleExoPlayer == null) { - initPlayer(/*playOnInit=*/true); + initPlayer(true); } initListeners(); } @@ -274,7 +274,7 @@ public abstract class BasePlayer implements return; } - boolean same = playQueue != null && playQueue.equals(queue); + boolean samePlayQueue = playQueue != null && playQueue.equals(queue); final int repeatMode = intent.getIntExtra(REPEAT_MODE, getRepeatMode()); final float playbackSpeed = intent.getFloatExtra(PLAYBACK_SPEED, getPlaybackSpeed()); @@ -282,6 +282,14 @@ public abstract class BasePlayer implements final boolean playbackSkipSilence = intent.getBooleanExtra(PLAYBACK_SKIP_SILENCE, getPlaybackSkipSilence()); + /* + * There are 3 situations when playback shouldn't be started from scratch (zero timestamp): + * 1. User pressed on a timestamp link and the same video should be rewound to that timestamp + * 2. User changed a player from, for example. main to popup, or from audio to main, etc + * 3. User chose to resume a video based on a saved timestamp from history of played videos + * In those cases time will be saved because re-init of the play queue is a not an instant task + * and requires network calls + * */ // seek to timestamp if stream is already playing if (simpleExoPlayer != null && queue.size() == 1 @@ -289,21 +297,20 @@ public abstract class BasePlayer implements && playQueue.size() == 1 && playQueue.getItem() != null && queue.getItem().getUrl().equals(playQueue.getItem().getUrl()) - && queue.getItem().getRecoveryPosition() != PlayQueueItem.RECOVERY_UNSET - && simpleExoPlayer.getPlaybackState() != Player.STATE_IDLE) { + && queue.getItem().getRecoveryPosition() != PlayQueueItem.RECOVERY_UNSET) { // Player can have state = IDLE when playback is stopped or failed and we should retry() in this case if (simpleExoPlayer.getPlaybackState() == Player.STATE_IDLE) simpleExoPlayer.retry(); simpleExoPlayer.seekTo(playQueue.getIndex(), queue.getItem().getRecoveryPosition()); return; - } else if (same && !playQueue.isDisposed() && simpleExoPlayer != null) { + } else if (samePlayQueue && !playQueue.isDisposed() && simpleExoPlayer != null) { // Do not re-init the same PlayQueue. Save time // Player can have state = IDLE when playback is stopped or failed and we should retry() in this case if (simpleExoPlayer.getPlaybackState() == Player.STATE_IDLE) simpleExoPlayer.retry(); return; } else if (intent.getBooleanExtra(RESUME_PLAYBACK, false) && isPlaybackResumeEnabled() - && !same) { + && !samePlayQueue) { final PlayQueueItem item = queue.getItem(); if (item != null && item.getRecoveryPosition() == PlayQueueItem.RECOVERY_UNSET) { stateLoader = recordManager.loadStreamState(item) @@ -313,19 +320,16 @@ public abstract class BasePlayer implements .subscribe( state -> { queue.setRecovery(queue.getIndex(), state.getProgressTime()); - initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence, - /*playOnInit=*/true); + initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence, true); }, error -> { if (DEBUG) error.printStackTrace(); // In case any error we can start playback without history - initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence, - /*playOnInit=*/true); + initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence, true); }, () -> { // Completed but not found in history - initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence, - /*playOnInit=*/true); + initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence, true); } ); databaseUpdateReactor.add(stateLoader); @@ -334,8 +338,7 @@ public abstract class BasePlayer implements } // Good to go... // In a case of equal PlayQueues we can re-init old one but only when it is disposed - initPlayback(same ? playQueue : queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence, - /*playOnInit=*/true); + initPlayback(samePlayQueue ? playQueue : queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence, true); } protected void initPlayback(@NonNull final PlayQueue queue, diff --git a/app/src/main/java/org/schabi/newpipe/player/MainPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainPlayer.java index 61b69ac5e..f1f9b51da 100644 --- a/app/src/main/java/org/schabi/newpipe/player/MainPlayer.java +++ b/app/src/main/java/org/schabi/newpipe/player/MainPlayer.java @@ -184,8 +184,6 @@ public final class MainPlayer extends Service { playerImpl.destroy(); } if (notificationManager != null) notificationManager.cancel(NOTIFICATION_ID); - playerImpl = null; - lockManager = null; stopForeground(true); stopSelf(); @@ -197,7 +195,7 @@ public final class MainPlayer extends Service { boolean isLandscape() { // DisplayMetrics from activity context knows about MultiWindow feature while DisplayMetrics from app context doesn't - final DisplayMetrics metrics = playerImpl != null && playerImpl.getParentActivity() != null ? + final DisplayMetrics metrics = (playerImpl != null && playerImpl.getParentActivity() != null) ? playerImpl.getParentActivity().getResources().getDisplayMetrics() : getResources().getDisplayMetrics(); return metrics.heightPixels < metrics.widthPixels; 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 c29cfd19c..632044b06 100644 --- a/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java +++ b/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java @@ -797,9 +797,9 @@ public abstract class VideoPlayer extends BasePlayer if (drawableId == -1) { if (controlAnimationView.getVisibility() == View.VISIBLE) { controlViewAnimator = ObjectAnimator.ofPropertyValuesHolder(controlAnimationView, - PropertyValuesHolder.ofFloat(View.ALPHA, 1f, 0f), - PropertyValuesHolder.ofFloat(View.SCALE_X, 1.4f, 1f), - PropertyValuesHolder.ofFloat(View.SCALE_Y, 1.4f, 1f) + PropertyValuesHolder.ofFloat(View.ALPHA, 1.0f, 0.0f), + PropertyValuesHolder.ofFloat(View.SCALE_X, 1.4f, 1.0f), + PropertyValuesHolder.ofFloat(View.SCALE_Y, 1.4f, 1.0f) ).setDuration(DEFAULT_CONTROLS_DURATION); controlViewAnimator.addListener(new AnimatorListenerAdapter() { @Override @@ -812,8 +812,8 @@ public abstract class VideoPlayer extends BasePlayer return; } - float scaleFrom = goneOnEnd ? 1f : 1f, scaleTo = goneOnEnd ? 1.8f : 1.4f; - float alphaFrom = goneOnEnd ? 1f : 0f, alphaTo = goneOnEnd ? 0f : 1f; + float scaleFrom = goneOnEnd ? 1.0f : 1.0f, scaleTo = goneOnEnd ? 1.8f : 1.4f; + float alphaFrom = goneOnEnd ? 1.0f : 0.0f, alphaTo = goneOnEnd ? 0.0f : 1.0f; controlViewAnimator = ObjectAnimator.ofPropertyValuesHolder(controlAnimationView, diff --git a/app/src/main/java/org/schabi/newpipe/player/VideoPlayerImpl.java b/app/src/main/java/org/schabi/newpipe/player/VideoPlayerImpl.java index efbe06457..aad20b0ad 100644 --- a/app/src/main/java/org/schabi/newpipe/player/VideoPlayerImpl.java +++ b/app/src/main/java/org/schabi/newpipe/player/VideoPlayerImpl.java @@ -270,14 +270,14 @@ public class VideoPlayerImpl extends VideoPlayer final float captionScale, @NonNull final CaptionStyleCompat captionStyle) { if (popupPlayerSelected()) { - float captionRatio = (captionScale - 1f) / 5f + 1f; + float captionRatio = (captionScale - 1.0f) / 5.0f + 1.0f; view.setFractionalTextSize(SubtitleView.DEFAULT_TEXT_SIZE_FRACTION * captionRatio); view.setApplyEmbeddedStyles(captionStyle.equals(CaptionStyleCompat.DEFAULT)); view.setStyle(captionStyle); } else { final DisplayMetrics metrics = context.getResources().getDisplayMetrics(); final int minimumLength = Math.min(metrics.heightPixels, metrics.widthPixels); - final float captionRatioInverse = 20f + 4f * (1f - captionScale); + final float captionRatioInverse = 20f + 4f * (1.0f - captionScale); view.setFixedTextSize(TypedValue.COMPLEX_UNIT_PX, (float) minimumLength / captionRatioInverse); view.setApplyEmbeddedStyles(captionStyle.equals(CaptionStyleCompat.DEFAULT)); @@ -300,7 +300,7 @@ public class VideoPlayerImpl extends VideoPlayer moreOptionsButton.setVisibility(View.GONE); getTopControlsRoot().setOrientation(LinearLayout.HORIZONTAL); primaryControls.getLayoutParams().width = LinearLayout.LayoutParams.WRAP_CONTENT; - secondaryControls.setAlpha(1f); + secondaryControls.setAlpha(1.0f); secondaryControls.setVisibility(View.VISIBLE); secondaryControls.setTranslationY(0); shareButton.setVisibility(View.GONE); @@ -333,7 +333,7 @@ public class VideoPlayerImpl extends VideoPlayer getTopControlsRoot().setClickable(true); getTopControlsRoot().setFocusable(true); } - if (!isInFullscreen()) { + if (!isFullscreen()) { titleTextView.setVisibility(View.GONE); channelTextView.setVisibility(View.GONE); } else { @@ -602,10 +602,10 @@ public class VideoPlayerImpl extends VideoPlayer isFullscreen = !isFullscreen; setControlsSize(); - fragmentListener.onFullscreenStateChanged(isInFullscreen()); + fragmentListener.onFullscreenStateChanged(isFullscreen()); } - if (!isInFullscreen()) { + if (!isFullscreen()) { titleTextView.setVisibility(View.GONE); channelTextView.setVisibility(View.GONE); playerCloseButton.setVisibility(videoPlayerSelected() ? View.VISIBLE : View.GONE); @@ -674,7 +674,7 @@ public class VideoPlayerImpl extends VideoPlayer @Override public boolean onLongClick(View v) { - if (v.getId() == moreOptionsButton.getId() && isInFullscreen()) { + if (v.getId() == moreOptionsButton.getId() && isFullscreen()) { fragmentListener.onMoreOptionsLongClicked(); hideControls(0, 0); hideSystemUIIfNeeded(); @@ -690,7 +690,7 @@ public class VideoPlayerImpl extends VideoPlayer updatePlaybackButtons(); getControlsRoot().setVisibility(View.INVISIBLE); - animateView(queueLayout, SLIDE_AND_ALPHA, /*visible=*/true, + animateView(queueLayout, SLIDE_AND_ALPHA,true, DEFAULT_CONTROLS_DURATION); itemsList.scrollToPosition(playQueue.getIndex()); @@ -699,7 +699,7 @@ public class VideoPlayerImpl extends VideoPlayer public void onQueueClosed() { if (!queueVisible) return; - animateView(queueLayout, SLIDE_AND_ALPHA, /*visible=*/false, + animateView(queueLayout, SLIDE_AND_ALPHA,false, DEFAULT_CONTROLS_DURATION, 0, () -> { // Even when queueLayout is GONE it receives touch events and ruins normal behavior of the app. This line fixes it queueLayout.setTranslationY(-queueLayout.getHeight() * 5); @@ -765,12 +765,12 @@ public class VideoPlayerImpl extends VideoPlayer boolean showButton = videoPlayerSelected() && (orientationLocked || isVerticalVideo || tabletInLandscape); screenRotationButton.setVisibility(showButton ? View.VISIBLE : View.GONE); screenRotationButton.setImageDrawable(service.getResources().getDrawable( - isInFullscreen() ? R.drawable.ic_fullscreen_exit_white : R.drawable.ic_fullscreen_white)); + isFullscreen() ? R.drawable.ic_fullscreen_exit_white : R.drawable.ic_fullscreen_white)); } private void prepareOrientation() { boolean orientationLocked = PlayerHelper.globalScreenOrientationLocked(service); - if (orientationLocked && isInFullscreen() && service.isLandscape() == isVerticalVideo && fragmentListener != null) + if (orientationLocked && isFullscreen() && service.isLandscape() == isVerticalVideo && fragmentListener != null) fragmentListener.onScreenRotationButtonClicked(); } @@ -893,7 +893,7 @@ public class VideoPlayerImpl extends VideoPlayer @Override public void onBlocked() { super.onBlocked(); - playPauseButton.setImageResource(R.drawable.ic_pause_white); + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white); animatePlayButtons(false, 100); getRootView().setKeepScreenOn(false); @@ -1185,7 +1185,7 @@ public class VideoPlayerImpl extends VideoPlayer return distanceFromCloseButton(popupMotionEvent) <= getClosingRadius(); } - public boolean isInFullscreen() { + public boolean isFullscreen() { return isFullscreen; } @@ -1216,8 +1216,7 @@ public class VideoPlayerImpl extends VideoPlayer getControlsVisibilityHandler().removeCallbacksAndMessages(null); getControlsVisibilityHandler().postDelayed(() -> animateView(getControlsRoot(), false, duration, 0, - this::hideSystemUIIfNeeded), - /*delayMillis=*/delay + this::hideSystemUIIfNeeded), delay ); } @@ -1225,24 +1224,13 @@ public class VideoPlayerImpl extends VideoPlayer if (playQueue == null) return; - if (playQueue.getIndex() == 0) - playPreviousButton.setVisibility(View.INVISIBLE); - else - playPreviousButton.setVisibility(View.VISIBLE); - - if (playQueue.getIndex() + 1 == playQueue.getStreams().size()) - playNextButton.setVisibility(View.INVISIBLE); - else - playNextButton.setVisibility(View.VISIBLE); - - if (playQueue.getStreams().size() <= 1 || popupPlayerSelected()) - queueButton.setVisibility(View.GONE); - else - queueButton.setVisibility(View.VISIBLE); + playPreviousButton.setVisibility(playQueue.getIndex() == 0 ? View.INVISIBLE : View.VISIBLE); + playNextButton.setVisibility(playQueue.getIndex() + 1 == playQueue.getStreams().size() ? View.INVISIBLE : View.VISIBLE); + queueButton.setVisibility(playQueue.getStreams().size() <= 1 || popupPlayerSelected() ? View.GONE : View.VISIBLE); } private void showSystemUIPartially() { - if (isInFullscreen() && getParentActivity() != null) { + if (isFullscreen() && getParentActivity() != null) { int visibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE; getParentActivity().getWindow().getDecorView().setSystemUiVisibility(visibility); } @@ -1330,7 +1318,7 @@ public class VideoPlayerImpl extends VideoPlayer public void checkLandscape() { AppCompatActivity parent = getParentActivity(); - boolean videoInLandscapeButNotInFullscreen = service.isLandscape() && !isInFullscreen() && videoPlayerSelected() && !audioOnly; + boolean videoInLandscapeButNotInFullscreen = service.isLandscape() && !isFullscreen() && videoPlayerSelected() && !audioOnly; boolean playingState = getCurrentState() != STATE_COMPLETED && getCurrentState() != STATE_PAUSED; if (parent != null && videoInLandscapeButNotInFullscreen && playingState && !PlayerHelper.isTablet(service)) toggleFullscreen(); @@ -1421,7 +1409,7 @@ public class VideoPlayerImpl extends VideoPlayer if (DEBUG) Log.d(TAG, "initPopup() called"); // Popup is already added to windowManager - if (isPopupHasParent()) return; + if (popupHasParent()) return; updateScreenSize(); @@ -1430,13 +1418,10 @@ public class VideoPlayerImpl extends VideoPlayer SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(service); popupWidth = popupRememberSizeAndPos ? sharedPreferences.getFloat(POPUP_SAVED_WIDTH, defaultSize) : defaultSize; popupHeight = getMinimumVideoHeight(popupWidth); - final int layoutParamType = Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O ? - WindowManager.LayoutParams.TYPE_PHONE : - WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; popupLayoutParams = new WindowManager.LayoutParams( (int) popupWidth, (int) popupHeight, - layoutParamType, + popupLayoutParamType(), IDLE_WINDOW_FLAGS, PixelFormat.TRANSLUCENT); popupLayoutParams.gravity = Gravity.LEFT | Gravity.TOP; @@ -1470,15 +1455,12 @@ public class VideoPlayerImpl extends VideoPlayer closeOverlayView = View.inflate(service, R.layout.player_popup_close_overlay, null); closeOverlayButton = closeOverlayView.findViewById(R.id.closeButton); - final int layoutParamType = Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O ? - WindowManager.LayoutParams.TYPE_PHONE : - WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; final int flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; WindowManager.LayoutParams closeOverlayLayoutParams = new WindowManager.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, - layoutParamType, + popupLayoutParamType(), flags, PixelFormat.TRANSLUCENT); closeOverlayLayoutParams.gravity = Gravity.LEFT | Gravity.TOP; @@ -1600,6 +1582,12 @@ public class VideoPlayerImpl extends VideoPlayer windowManager.updateViewLayout(getRootView(), popupLayoutParams); } + private int popupLayoutParamType() { + return Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O ? + WindowManager.LayoutParams.TYPE_PHONE : + WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } + /*////////////////////////////////////////////////////////////////////////// // Misc //////////////////////////////////////////////////////////////////////////*/ @@ -1617,7 +1605,7 @@ public class VideoPlayerImpl extends VideoPlayer public void removePopupFromView() { boolean isCloseOverlayHasParent = closeOverlayView != null && closeOverlayView.getParent() != null; - if (isPopupHasParent()) + if (popupHasParent()) windowManager.removeView(getRootView()); if (isCloseOverlayHasParent) windowManager.removeView(closeOverlayView); @@ -1651,7 +1639,7 @@ public class VideoPlayerImpl extends VideoPlayer }).start(); } - private boolean isPopupHasParent() { + private boolean popupHasParent() { View root = getRootView(); return root != null && root.getLayoutParams() instanceof WindowManager.LayoutParams && root.getParent() != null; } diff --git a/app/src/main/java/org/schabi/newpipe/player/event/PlayerGestureListener.java b/app/src/main/java/org/schabi/newpipe/player/event/PlayerGestureListener.java index bb9ede4d7..f8b402103 100644 --- a/app/src/main/java/org/schabi/newpipe/player/event/PlayerGestureListener.java +++ b/app/src/main/java/org/schabi/newpipe/player/event/PlayerGestureListener.java @@ -160,10 +160,7 @@ public class PlayerGestureListener extends GestureDetector.SimpleOnGestureListen isMovingInMain = true; - boolean acceptVolumeArea = initialEvent.getX() > playerImpl.getRootView().getWidth() / 2.0; - boolean acceptBrightnessArea = initialEvent.getX() <= playerImpl.getRootView().getWidth() / 2.0; - - if (isVolumeGestureEnabled && acceptVolumeArea) { + if (isVolumeGestureEnabled && initialEvent.getX() > playerImpl.getRootView().getWidth() / 2.0) { playerImpl.getVolumeProgressBar().incrementProgressBy((int) distanceY); float currentProgressPercent = (float) playerImpl.getVolumeProgressBar().getProgress() / playerImpl.getMaxGestureLength(); @@ -172,14 +169,11 @@ public class PlayerGestureListener extends GestureDetector.SimpleOnGestureListen if (DEBUG) Log.d(TAG, "onScroll().volumeControl, currentVolume = " + currentVolume); - final int resId = - currentProgressPercent <= 0 ? R.drawable.ic_volume_off_white_72dp + playerImpl.getVolumeImageView().setImageDrawable( + AppCompatResources.getDrawable(service, currentProgressPercent <= 0 ? R.drawable.ic_volume_off_white_72dp : currentProgressPercent < 0.25 ? R.drawable.ic_volume_mute_white_72dp : currentProgressPercent < 0.75 ? R.drawable.ic_volume_down_white_72dp - : R.drawable.ic_volume_up_white_72dp; - - playerImpl.getVolumeImageView().setImageDrawable( - AppCompatResources.getDrawable(service, resId) + : R.drawable.ic_volume_up_white_72dp) ); if (playerImpl.getVolumeRelativeLayout().getVisibility() != View.VISIBLE) { @@ -188,7 +182,7 @@ public class PlayerGestureListener extends GestureDetector.SimpleOnGestureListen if (playerImpl.getBrightnessRelativeLayout().getVisibility() == View.VISIBLE) { playerImpl.getBrightnessRelativeLayout().setVisibility(View.GONE); } - } else if (isBrightnessGestureEnabled && acceptBrightnessArea) { + } else if (isBrightnessGestureEnabled && initialEvent.getX() <= playerImpl.getRootView().getWidth() / 2.0) { Activity parent = playerImpl.getParentActivity(); if (parent == null) return true; @@ -203,13 +197,11 @@ public class PlayerGestureListener extends GestureDetector.SimpleOnGestureListen if (DEBUG) Log.d(TAG, "onScroll().brightnessControl, currentBrightness = " + currentProgressPercent); - final int resId = - currentProgressPercent < 0.25 ? R.drawable.ic_brightness_low_white_72dp - : currentProgressPercent < 0.75 ? R.drawable.ic_brightness_medium_white_72dp - : R.drawable.ic_brightness_high_white_72dp; - playerImpl.getBrightnessImageView().setImageDrawable( - AppCompatResources.getDrawable(service, resId) + AppCompatResources.getDrawable(service, + currentProgressPercent < 0.25 ? R.drawable.ic_brightness_low_white_72dp + : currentProgressPercent < 0.75 ? R.drawable.ic_brightness_medium_white_72dp + : R.drawable.ic_brightness_high_white_72dp) ); if (playerImpl.getBrightnessRelativeLayout().getVisibility() != View.VISIBLE) { @@ -247,7 +239,7 @@ public class PlayerGestureListener extends GestureDetector.SimpleOnGestureListen switch (event.getAction()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_MOVE: - v.getParent().requestDisallowInterceptTouchEvent(playerImpl.isInFullscreen()); + v.getParent().requestDisallowInterceptTouchEvent(playerImpl.isFullscreen()); return true; case MotionEvent.ACTION_UP: v.getParent().requestDisallowInterceptTouchEvent(false); diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java b/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java index 8f344390a..ff9d0c477 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java @@ -114,7 +114,7 @@ public class AudioReactor implements AudioManager.OnAudioFocusChangeListener, private void onAudioFocusGain() { Log.d(TAG, "onAudioFocusGain() called"); player.setVolume(DUCK_AUDIO_TO); - animateAudio(DUCK_AUDIO_TO, 1f); + animateAudio(DUCK_AUDIO_TO, 1.0f); if (PlayerHelper.isResumeAfterAudioFocusGain(context)) { player.setPlayWhenReady(true); diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java index 6afb5a322..82003231d 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java @@ -222,14 +222,10 @@ public class PlayerHelper { @AutoplayType public static int getAutoplayType(@NonNull final Context context) { - final String defaultType = context.getString(R.string.autoplay_wifi_key); - final String always = context.getString(R.string.autoplay_always_key); - final String never = context.getString(R.string.autoplay_never_key); - - final String type = getAutoplayType(context, defaultType); - if (type.equals(always)) { + final String type = getAutoplayType(context, context.getString(R.string.autoplay_wifi_key)); + if (type.equals(context.getString(R.string.autoplay_always_key))) { return AUTOPLAY_TYPE_ALWAYS; - } else if (type.equals(never)) { + } else if (type.equals(context.getString(R.string.autoplay_never_key))) { return AUTOPLAY_TYPE_NEVER; } else { return AUTOPLAY_TYPE_WIFI; @@ -307,12 +303,12 @@ public class PlayerHelper { * Very small - 0.25f, Small - 0.5f, Normal - 1.0f, Large - 1.5f, Very Large - 2.0f * */ public static float getCaptionScale(@NonNull final Context context) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return 1f; + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return 1.0f; final CaptioningManager captioningManager = (CaptioningManager) context.getSystemService(Context.CAPTIONING_SERVICE); if (captioningManager == null || !captioningManager.isEnabled()) { - return 1f; + return 1.0f; } return captioningManager.getFontScale(); @@ -330,8 +326,8 @@ public class PlayerHelper { public static boolean globalScreenOrientationLocked(Context context) { // 1: Screen orientation changes using accelerometer // 0: Screen orientation is locked - return !(android.provider.Settings.System.getInt( - context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 1); + return android.provider.Settings.System.getInt( + context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 0; } public static boolean isTablet(@NonNull final Context context) { diff --git a/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java b/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java index 16bffea9a..5a5a9e1fd 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java +++ b/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java @@ -158,7 +158,7 @@ public class OggFromWebMWriter implements Closeable { switch (webm_track.kind) { case Audio: resolution = getSampleFrequencyFromTrack(webm_track.bMetadata); - if (resolution == 0f) { + if (resolution == 0.0f) { throw new RuntimeException("cannot get the audio sample rate"); } break; @@ -167,7 +167,7 @@ public class OggFromWebMWriter implements Closeable { if (webm_track.defaultDuration == 0) { throw new RuntimeException("missing default frame time"); } - resolution = 1000f / ((float) webm_track.defaultDuration / webm_segment.info.timecodeScale); + resolution = 1000.0f / ((float) webm_track.defaultDuration / webm_segment.info.timecodeScale); break; default: throw new RuntimeException("not implemented"); @@ -358,7 +358,7 @@ public class OggFromWebMWriter implements Closeable { } } - return 0f; + return 0.0f; } private void clearSegmentTable() { diff --git a/app/src/main/java/org/schabi/newpipe/streams/SubtitleConverter.java b/app/src/main/java/org/schabi/newpipe/streams/SubtitleConverter.java index c41db4373..9c6fa977d 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/SubtitleConverter.java +++ b/app/src/main/java/org/schabi/newpipe/streams/SubtitleConverter.java @@ -292,7 +292,7 @@ public class SubtitleConverter { time += Integer.parseInt(units[0]) * 3600000;// hours time += Integer.parseInt(units[1]) * 60000;//minutes - time += Float.parseFloat(units[2]) * 1000f;// seconds and milliseconds (if present) + time += Float.parseFloat(units[2]) * 1000.0f;// seconds and milliseconds (if present) // frames and sub-frames are ignored (not implemented) // time += units[3] * fps; diff --git a/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java b/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java index 8525fabd2..fa2cc43e2 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java +++ b/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java @@ -612,7 +612,7 @@ public class WebMWriter implements Closeable { int offset = withLength ? 1 : 0; byte[] buffer = new byte[offset + length]; - long marker = (long) Math.floor((length - 1f) / 8f); + long marker = (long) Math.floor((length - 1.0f) / 8.0f); float mul = 1; for (int i = length - 1; i >= 0; i--, mul *= 0x100) { diff --git a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java index 8b867a328..f0fd7e41b 100644 --- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java @@ -73,9 +73,7 @@ public class NavigationHelper { if (cacheKey != null) intent.putExtra(VideoPlayer.PLAY_QUEUE_KEY, cacheKey); if (quality != null) intent.putExtra(VideoPlayer.PLAYBACK_QUALITY, quality); intent.putExtra(VideoPlayer.RESUME_PLAYBACK, resumePlayback); - - int playerType = intent.getIntExtra(VideoPlayer.PLAYER_TYPE, VideoPlayer.PLAYER_TYPE_VIDEO); - intent.putExtra(VideoPlayer.PLAYER_TYPE, playerType); + intent.putExtra(VideoPlayer.PLAYER_TYPE, VideoPlayer.PLAYER_TYPE_VIDEO); return intent; } @@ -122,7 +120,24 @@ public class NavigationHelper { public static void playOnMainPlayer(final FragmentManager fragmentManager, final PlayQueue queue, boolean autoPlay) { PlayQueueItem currentStream = queue.getItem(); - NavigationHelper.openVideoDetailFragment(fragmentManager, currentStream.getServiceId(), currentStream.getUrl(), currentStream.getTitle(), autoPlay, queue); + openVideoDetailFragment(fragmentManager, currentStream.getServiceId(), currentStream.getUrl(), currentStream.getTitle(), autoPlay, queue); + } + + public static void playOnMainPlayer(@NonNull final Context context, + @NonNull final PlayQueue queue, + @NonNull final StreamingService.LinkType linkType, + @NonNull final String url, + @NonNull final String title, + final boolean autoPlay, + final boolean resumePlayback) { + + Intent intent = getPlayerIntent(context, MainActivity.class, queue, resumePlayback); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(Constants.KEY_LINK_TYPE, linkType); + intent.putExtra(Constants.KEY_URL, url); + intent.putExtra(Constants.KEY_TITLE, title); + intent.putExtra(VideoDetailFragment.AUTO_PLAY, autoPlay); + context.startActivity(intent); } public static void playOnPopupPlayer(final Context context, final PlayQueue queue, final boolean resumePlayback) { diff --git a/app/src/main/java/org/schabi/newpipe/views/ExpandableSurfaceView.java b/app/src/main/java/org/schabi/newpipe/views/ExpandableSurfaceView.java index df012eafd..f5a7df471 100644 --- a/app/src/main/java/org/schabi/newpipe/views/ExpandableSurfaceView.java +++ b/app/src/main/java/org/schabi/newpipe/views/ExpandableSurfaceView.java @@ -11,7 +11,7 @@ public class ExpandableSurfaceView extends SurfaceView { private int resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT; private int baseHeight = 0; private int maxHeight = 0; - private float videoAspectRatio = 0f; + private float videoAspectRatio = 0.0f; private float scaleX = 1.0f; private float scaleY = 1.0f; @@ -22,7 +22,7 @@ public class ExpandableSurfaceView extends SurfaceView { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - if (videoAspectRatio == 0f) return; + if (videoAspectRatio == 0.0f) return; int width = MeasureSpec.getSize(widthMeasureSpec); boolean verticalVideo = videoAspectRatio < 1; diff --git a/app/src/main/java/us/shandian/giga/postprocessing/Postprocessing.java b/app/src/main/java/us/shandian/giga/postprocessing/Postprocessing.java index 773ff92d1..bf9202a75 100644 --- a/app/src/main/java/us/shandian/giga/postprocessing/Postprocessing.java +++ b/app/src/main/java/us/shandian/giga/postprocessing/Postprocessing.java @@ -89,7 +89,7 @@ public abstract class Postprocessing implements Serializable { } public void setTemporalDir(@NonNull File directory) { - long rnd = (int) (Math.random() * 100000f); + long rnd = (int) (Math.random() * 100000.0f); tempFile = new File(directory, rnd + "_" + System.nanoTime() + ".tmp"); } diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java index 8420e343b..aa7e42abc 100644 --- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java +++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java @@ -198,7 +198,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb } else { h.progress.setMarquee(false); h.status.setText("100%"); - h.progress.setProgress(1f); + h.progress.setProgress(1.0f); h.size.setText(Utility.formatBytes(item.mission.length)); } } @@ -231,7 +231,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb double progress; if (mission.unknownLength) { progress = Double.NaN; - h.progress.setProgress(0f); + h.progress.setProgress(0.0f); } else { progress = done / length; } @@ -298,7 +298,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb for (int i = 0; i < h.lastSpeed.length; i++) { averageSpeed += h.lastSpeed[i]; } - averageSpeed /= h.lastSpeed.length + 1f; + averageSpeed /= h.lastSpeed.length + 1.0f; } String speedStr = Utility.formatSpeed(averageSpeed); diff --git a/app/src/main/java/us/shandian/giga/ui/common/ProgressDrawable.java b/app/src/main/java/us/shandian/giga/ui/common/ProgressDrawable.java index 3f638d418..bec947540 100644 --- a/app/src/main/java/us/shandian/giga/ui/common/ProgressDrawable.java +++ b/app/src/main/java/us/shandian/giga/ui/common/ProgressDrawable.java @@ -26,7 +26,7 @@ public class ProgressDrawable extends Drawable { public ProgressDrawable() { mMarqueeLine = null;// marquee disabled - mMarqueeProgress = 0f; + mMarqueeProgress = 0.0f; mMarqueeSize = 0; mMarqueeNext = 0; } @@ -122,7 +122,7 @@ public class ProgressDrawable extends Drawable { } private void setupMarquee(int width, int height) { - mMarqueeSize = (int) ((width * 10f) / 100f);// the size is 10% of the width + mMarqueeSize = (int) ((width * 10.0f) / 100.0f);// the size is 10% of the width mMarqueeLine.rewind(); mMarqueeLine.moveTo(-mMarqueeSize, -mMarqueeSize); diff --git a/app/src/main/res/layout/toolbar_layout.xml b/app/src/main/res/layout/toolbar_layout.xml index 5d224bda8..318d16ff5 100644 --- a/app/src/main/res/layout/toolbar_layout.xml +++ b/app/src/main/res/layout/toolbar_layout.xml @@ -19,15 +19,6 @@ app:popupTheme="@style/ThemeOverlay.AppCompat.ActionBar" app:titleTextAppearance="@style/Toolbar.Title"> - -