mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 15:23:00 +00:00 
			
		
		
		
	Merge pull request #8651 from Isira-Seneviratne/Use_limiting_methods
Use range-limiting methods.
This commit is contained in:
		| @@ -30,6 +30,7 @@ import androidx.appcompat.app.AppCompatActivity; | |||||||
| import androidx.appcompat.content.res.AppCompatResources; | import androidx.appcompat.content.res.AppCompatResources; | ||||||
| import androidx.core.app.NotificationCompat; | import androidx.core.app.NotificationCompat; | ||||||
| import androidx.core.app.ServiceCompat; | import androidx.core.app.ServiceCompat; | ||||||
|  | import androidx.core.math.MathUtils; | ||||||
| import androidx.fragment.app.FragmentManager; | import androidx.fragment.app.FragmentManager; | ||||||
| import androidx.preference.PreferenceManager; | import androidx.preference.PreferenceManager; | ||||||
|  |  | ||||||
| @@ -451,7 +452,7 @@ public class RouterActivity extends AppCompatActivity { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         selectedRadioPosition = Math.min(Math.max(-1, selectedRadioPosition), choices.size() - 1); |         selectedRadioPosition = MathUtils.clamp(selectedRadioPosition, -1, choices.size() - 1); | ||||||
|         if (selectedRadioPosition != -1) { |         if (selectedRadioPosition != -1) { | ||||||
|             ((RadioButton) radioGroup.getChildAt(selectedRadioPosition)).setChecked(true); |             ((RadioButton) radioGroup.getChildAt(selectedRadioPosition)).setChecked(true); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -62,6 +62,7 @@ import android.view.LayoutInflater; | |||||||
|  |  | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||||
|  | import androidx.core.math.MathUtils; | ||||||
| import androidx.preference.PreferenceManager; | import androidx.preference.PreferenceManager; | ||||||
|  |  | ||||||
| import com.google.android.exoplayer2.C; | import com.google.android.exoplayer2.C; | ||||||
| @@ -591,7 +592,7 @@ public final class Player implements PlaybackListener, Listener { | |||||||
|         final long duration = simpleExoPlayer.getDuration(); |         final long duration = simpleExoPlayer.getDuration(); | ||||||
|  |  | ||||||
|         // No checks due to https://github.com/TeamNewPipe/NewPipe/pull/7195#issuecomment-962624380 |         // No checks due to https://github.com/TeamNewPipe/NewPipe/pull/7195#issuecomment-962624380 | ||||||
|         setRecovery(queuePos, Math.max(0, Math.min(windowPos, duration))); |         setRecovery(queuePos, MathUtils.clamp(windowPos, 0, duration)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void setRecovery(final int queuePos, final long windowPos) { |     private void setRecovery(final int queuePos, final long windowPos) { | ||||||
| @@ -1534,14 +1535,8 @@ public final class Player implements PlaybackListener, Listener { | |||||||
|         } |         } | ||||||
|         if (!exoPlayerIsNull()) { |         if (!exoPlayerIsNull()) { | ||||||
|             // prevent invalid positions when fast-forwarding/-rewinding |             // prevent invalid positions when fast-forwarding/-rewinding | ||||||
|             long normalizedPositionMillis = positionMillis; |             simpleExoPlayer.seekTo(MathUtils.clamp(positionMillis, 0, | ||||||
|             if (normalizedPositionMillis < 0) { |                     simpleExoPlayer.getDuration())); | ||||||
|                 normalizedPositionMillis = 0; |  | ||||||
|             } else if (normalizedPositionMillis > simpleExoPlayer.getDuration()) { |  | ||||||
|                 normalizedPositionMillis = simpleExoPlayer.getDuration(); |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             simpleExoPlayer.seekTo(normalizedPositionMillis); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -233,22 +233,14 @@ class PopupPlayerGestureListener( | |||||||
|  |  | ||||||
|         isMoving = true |         isMoving = true | ||||||
|  |  | ||||||
|         val diffX: Float = (movingEvent.rawX - initialEvent.rawX) |         val diffX = (movingEvent.rawX - initialEvent.rawX) | ||||||
|         var posX: Float = (initialPopupX + diffX) |         val posX = (initialPopupX + diffX).coerceIn( | ||||||
|         val diffY: Float = (movingEvent.rawY - initialEvent.rawY) |             0f, (playerUi.screenWidth - playerUi.popupLayoutParams.width).toFloat() | ||||||
|         var posY: Float = (initialPopupY + diffY) |         ) | ||||||
|  |         val diffY = (movingEvent.rawY - initialEvent.rawY) | ||||||
|         if (posX > playerUi.screenWidth - playerUi.popupLayoutParams.width) { |         val posY = (initialPopupY + diffY).coerceIn( | ||||||
|             posX = (playerUi.screenWidth - playerUi.popupLayoutParams.width).toFloat() |             0f, (playerUi.screenHeight - playerUi.popupLayoutParams.height).toFloat() | ||||||
|         } else if (posX < 0) { |         ) | ||||||
|             posX = 0f |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         if (posY > playerUi.screenHeight - playerUi.popupLayoutParams.height) { |  | ||||||
|             posY = (playerUi.screenHeight - playerUi.popupLayoutParams.height).toFloat() |  | ||||||
|         } else if (posY < 0) { |  | ||||||
|             posY = 0f |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         playerUi.popupLayoutParams.x = posX.toInt() |         playerUi.popupLayoutParams.x = posX.toInt() | ||||||
|         playerUi.popupLayoutParams.y = posY.toInt() |         playerUi.popupLayoutParams.y = posY.toInt() | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ import androidx.annotation.NonNull; | |||||||
| import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||||
| import androidx.annotation.StringRes; | import androidx.annotation.StringRes; | ||||||
| import androidx.appcompat.app.AlertDialog; | import androidx.appcompat.app.AlertDialog; | ||||||
|  | import androidx.core.math.MathUtils; | ||||||
| import androidx.fragment.app.DialogFragment; | import androidx.fragment.app.DialogFragment; | ||||||
| import androidx.preference.PreferenceManager; | import androidx.preference.PreferenceManager; | ||||||
|  |  | ||||||
| @@ -527,7 +528,7 @@ public class PlaybackParameterDialog extends DialogFragment { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void setAndUpdateTempo(final double newTempo) { |     private void setAndUpdateTempo(final double newTempo) { | ||||||
|         this.tempo = calcValidTempo(newTempo); |         this.tempo = MathUtils.clamp(newTempo, MIN_PITCH_OR_SPEED, MAX_PITCH_OR_SPEED); | ||||||
|  |  | ||||||
|         binding.tempoSeekbar.setProgress(QUADRATIC_STRATEGY.progressOf(tempo)); |         binding.tempoSeekbar.setProgress(QUADRATIC_STRATEGY.progressOf(tempo)); | ||||||
|         setText(binding.tempoCurrentText, PlayerHelper::formatSpeed, tempo); |         setText(binding.tempoCurrentText, PlayerHelper::formatSpeed, tempo); | ||||||
| @@ -546,13 +547,8 @@ public class PlaybackParameterDialog extends DialogFragment { | |||||||
|                 pitchPercent); |                 pitchPercent); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private double calcValidTempo(final double newTempo) { |  | ||||||
|         return Math.max(MIN_PITCH_OR_SPEED, Math.min(MAX_PITCH_OR_SPEED, newTempo)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private double calcValidPitch(final double newPitch) { |     private double calcValidPitch(final double newPitch) { | ||||||
|         final double calcPitch = |         final double calcPitch = MathUtils.clamp(newPitch, MIN_PITCH_OR_SPEED, MAX_PITCH_OR_SPEED); | ||||||
|                 Math.max(MIN_PITCH_OR_SPEED, Math.min(MAX_PITCH_OR_SPEED, newPitch)); |  | ||||||
|  |  | ||||||
|         if (!isCurrentPitchControlModeSemitone()) { |         if (!isCurrentPitchControlModeSemitone()) { | ||||||
|             return calcPitch; |             return calcPitch; | ||||||
|   | |||||||
| @@ -1,5 +1,7 @@ | |||||||
| package org.schabi.newpipe.player.helper; | package org.schabi.newpipe.player.helper; | ||||||
|  |  | ||||||
|  | import androidx.core.math.MathUtils; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Converts between percent and 12-tone equal temperament semitones. |  * Converts between percent and 12-tone equal temperament semitones. | ||||||
|  * <br/> |  * <br/> | ||||||
| @@ -33,6 +35,6 @@ public final class PlayerSemitoneHelper { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static int ensureSemitonesInRange(final int semitones) { |     private static int ensureSemitonesInRange(final int semitones) { | ||||||
|         return Math.max(-SEMITONE_COUNT, Math.min(SEMITONE_COUNT, semitones)); |         return MathUtils.clamp(semitones, -SEMITONE_COUNT, SEMITONE_COUNT); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,5 +1,7 @@ | |||||||
| package org.schabi.newpipe.player.playqueue; | package org.schabi.newpipe.player.playqueue; | ||||||
|  |  | ||||||
|  | import androidx.annotation.NonNull; | ||||||
|  | import androidx.core.math.MathUtils; | ||||||
| import androidx.recyclerview.widget.ItemTouchHelper; | import androidx.recyclerview.widget.ItemTouchHelper; | ||||||
| import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||||
|  |  | ||||||
| @@ -16,18 +18,21 @@ public abstract class PlayQueueItemTouchCallback extends ItemTouchHelper.SimpleC | |||||||
|     public abstract void onSwiped(int index); |     public abstract void onSwiped(int index); | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public int interpolateOutOfBoundsScroll(final RecyclerView recyclerView, final int viewSize, |     public int interpolateOutOfBoundsScroll(@NonNull final RecyclerView recyclerView, | ||||||
|                                             final int viewSizeOutOfBounds, final int totalSize, |                                             final int viewSize, | ||||||
|  |                                             final int viewSizeOutOfBounds, | ||||||
|  |                                             final int totalSize, | ||||||
|                                             final long msSinceStartScroll) { |                                             final long msSinceStartScroll) { | ||||||
|         final int standardSpeed = super.interpolateOutOfBoundsScroll(recyclerView, viewSize, |         final int standardSpeed = super.interpolateOutOfBoundsScroll(recyclerView, viewSize, | ||||||
|                 viewSizeOutOfBounds, totalSize, msSinceStartScroll); |                 viewSizeOutOfBounds, totalSize, msSinceStartScroll); | ||||||
|         final int clampedAbsVelocity = Math.max(MINIMUM_INITIAL_DRAG_VELOCITY, |         final int clampedAbsVelocity = MathUtils.clamp(Math.abs(standardSpeed), | ||||||
|                 Math.min(Math.abs(standardSpeed), MAXIMUM_INITIAL_DRAG_VELOCITY)); |                 MINIMUM_INITIAL_DRAG_VELOCITY, MAXIMUM_INITIAL_DRAG_VELOCITY); | ||||||
|         return clampedAbsVelocity * (int) Math.signum(viewSizeOutOfBounds); |         return clampedAbsVelocity * (int) Math.signum(viewSizeOutOfBounds); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public boolean onMove(final RecyclerView recyclerView, final RecyclerView.ViewHolder source, |     public boolean onMove(@NonNull final RecyclerView recyclerView, | ||||||
|  |                           final RecyclerView.ViewHolder source, | ||||||
|                           final RecyclerView.ViewHolder target) { |                           final RecyclerView.ViewHolder target) { | ||||||
|         if (source.getItemViewType() != target.getItemViewType()) { |         if (source.getItemViewType() != target.getItemViewType()) { | ||||||
|             return false; |             return false; | ||||||
|   | |||||||
| @@ -8,13 +8,13 @@ import android.widget.ImageView; | |||||||
|  |  | ||||||
| import androidx.annotation.IntDef; | import androidx.annotation.IntDef; | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
|  | import androidx.core.math.MathUtils; | ||||||
| import androidx.preference.PreferenceManager; | import androidx.preference.PreferenceManager; | ||||||
|  |  | ||||||
| import org.schabi.newpipe.R; | import org.schabi.newpipe.R; | ||||||
| import org.schabi.newpipe.util.DeviceUtils; | import org.schabi.newpipe.util.DeviceUtils; | ||||||
|  |  | ||||||
| import java.lang.annotation.Retention; | import java.lang.annotation.Retention; | ||||||
| import java.util.Objects; |  | ||||||
| import java.util.Optional; | import java.util.Optional; | ||||||
| import java.util.function.IntSupplier; | import java.util.function.IntSupplier; | ||||||
|  |  | ||||||
| @@ -79,19 +79,14 @@ public final class SeekbarPreviewThumbnailHelper { | |||||||
|  |  | ||||||
|         // Resize original bitmap |         // Resize original bitmap | ||||||
|         try { |         try { | ||||||
|             Objects.requireNonNull(srcBitmap); |  | ||||||
|  |  | ||||||
|             final int srcWidth = srcBitmap.getWidth() > 0 ? srcBitmap.getWidth() : 1; |             final int srcWidth = srcBitmap.getWidth() > 0 ? srcBitmap.getWidth() : 1; | ||||||
|             final int newWidth = Math.max( |             final int newWidth = MathUtils.clamp( | ||||||
|                     Math.min( |                     // Use 1/4 of the width for the preview | ||||||
|                             // Use 1/4 of the width for the preview |                     Math.round(baseViewWidthSupplier.getAsInt() / 4f), | ||||||
|                             Math.round(baseViewWidthSupplier.getAsInt() / 4f), |                     // But have a min width of 10dp | ||||||
|                             // Scaling more than that factor looks really pixelated -> max |                     DeviceUtils.dpToPx(10, context), | ||||||
|                             Math.round(srcWidth * 2.5f) |                     // And scaling more than that factor looks really pixelated -> max | ||||||
|                     ), |                     Math.round(srcWidth * 2.5f)); | ||||||
|                     // Min width = 10dp |  | ||||||
|                     DeviceUtils.dpToPx(10, context) |  | ||||||
|             ); |  | ||||||
|  |  | ||||||
|             final float scaleFactor = (float) newWidth / srcWidth; |             final float scaleFactor = (float) newWidth / srcWidth; | ||||||
|             final int newHeight = (int) (srcBitmap.getHeight() * scaleFactor); |             final int newHeight = (int) (srcBitmap.getHeight() * scaleFactor); | ||||||
|   | |||||||
| @@ -27,6 +27,7 @@ import android.widget.LinearLayout; | |||||||
|  |  | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.core.content.ContextCompat; | import androidx.core.content.ContextCompat; | ||||||
|  | import androidx.core.math.MathUtils; | ||||||
|  |  | ||||||
| import com.google.android.exoplayer2.ui.AspectRatioFrameLayout; | import com.google.android.exoplayer2.ui.AspectRatioFrameLayout; | ||||||
| import com.google.android.exoplayer2.ui.SubtitleView; | import com.google.android.exoplayer2.ui.SubtitleView; | ||||||
| @@ -247,17 +248,10 @@ public final class PopupPlayerUi extends VideoPlayerUi { | |||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (popupLayoutParams.x < 0) { |         popupLayoutParams.x = MathUtils.clamp(popupLayoutParams.x, 0, screenWidth | ||||||
|             popupLayoutParams.x = 0; |                 - popupLayoutParams.width); | ||||||
|         } else if (popupLayoutParams.x > screenWidth - popupLayoutParams.width) { |         popupLayoutParams.y = MathUtils.clamp(popupLayoutParams.y, 0, screenHeight | ||||||
|             popupLayoutParams.x = screenWidth - popupLayoutParams.width; |                 - popupLayoutParams.height); | ||||||
|         } |  | ||||||
|  |  | ||||||
|         if (popupLayoutParams.y < 0) { |  | ||||||
|             popupLayoutParams.y = 0; |  | ||||||
|         } else if (popupLayoutParams.y > screenHeight - popupLayoutParams.height) { |  | ||||||
|             popupLayoutParams.y = screenHeight - popupLayoutParams.height; |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void updateScreenSize() { |     public void updateScreenSize() { | ||||||
|   | |||||||
| @@ -43,6 +43,7 @@ import androidx.appcompat.content.res.AppCompatResources; | |||||||
| import androidx.appcompat.view.ContextThemeWrapper; | import androidx.appcompat.view.ContextThemeWrapper; | ||||||
| import androidx.appcompat.widget.PopupMenu; | import androidx.appcompat.widget.PopupMenu; | ||||||
| import androidx.core.graphics.Insets; | import androidx.core.graphics.Insets; | ||||||
|  | import androidx.core.math.MathUtils; | ||||||
| import androidx.core.view.ViewCompat; | import androidx.core.view.ViewCompat; | ||||||
| import androidx.core.view.WindowInsetsCompat; | import androidx.core.view.WindowInsetsCompat; | ||||||
|  |  | ||||||
| @@ -580,16 +581,9 @@ public abstract class VideoPlayerUi extends PlayerUi | |||||||
|                     currentSeekbarLeft - (binding.seekbarPreviewContainer.getWidth() / 2); |                     currentSeekbarLeft - (binding.seekbarPreviewContainer.getWidth() / 2); | ||||||
|  |  | ||||||
|             // Fix the position so it's within the boundaries |             // Fix the position so it's within the boundaries | ||||||
|             final int checkedContainerLeft = |             final int checkedContainerLeft = MathUtils.clamp(uncheckedContainerLeft, | ||||||
|                     Math.max( |                     0, binding.playbackWindowRoot.getWidth() | ||||||
|                             Math.min( |                             - binding.seekbarPreviewContainer.getWidth()); | ||||||
|                                     uncheckedContainerLeft, |  | ||||||
|                                     // Max left |  | ||||||
|                                     binding.playbackWindowRoot.getWidth() |  | ||||||
|                                             - binding.seekbarPreviewContainer.getWidth() |  | ||||||
|                             ), |  | ||||||
|                             0 // Min left |  | ||||||
|                     ); |  | ||||||
|  |  | ||||||
|             // See also: https://stackoverflow.com/a/23249734 |             // See also: https://stackoverflow.com/a/23249734 | ||||||
|             final LinearLayout.LayoutParams params = |             final LinearLayout.LayoutParams params = | ||||||
|   | |||||||
| @@ -13,6 +13,7 @@ import android.util.DisplayMetrics; | |||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.annotation.PluralsRes; | import androidx.annotation.PluralsRes; | ||||||
| import androidx.annotation.StringRes; | import androidx.annotation.StringRes; | ||||||
|  | import androidx.core.math.MathUtils; | ||||||
| import androidx.preference.PreferenceManager; | import androidx.preference.PreferenceManager; | ||||||
|  |  | ||||||
| import org.ocpsoft.prettytime.PrettyTime; | import org.ocpsoft.prettytime.PrettyTime; | ||||||
| @@ -247,8 +248,7 @@ public final class Localization { | |||||||
|         // is not the responsibility of this method handle long numbers |         // is not the responsibility of this method handle long numbers | ||||||
|         // (it probably will fall in the "other" category, |         // (it probably will fall in the "other" category, | ||||||
|         // or some language have some specific rule... then we have to change it) |         // or some language have some specific rule... then we have to change it) | ||||||
|         final int safeCount = count > Integer.MAX_VALUE ? Integer.MAX_VALUE |         final int safeCount = (int) MathUtils.clamp(count, Integer.MIN_VALUE, Integer.MAX_VALUE); | ||||||
|                 : count < Integer.MIN_VALUE ? Integer.MIN_VALUE : (int) count; |  | ||||||
|         return context.getResources().getQuantityString(pluralId, safeCount, formattedCount); |         return context.getResources().getQuantityString(pluralId, safeCount, formattedCount); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Stypox
					Stypox