diff --git a/app/src/main/java/org/schabi/newpipe/views/player/PlayerFastSeekOverlay.kt b/app/src/main/java/org/schabi/newpipe/views/player/PlayerFastSeekOverlay.kt index f185f5861..a1ea3d901 100644 --- a/app/src/main/java/org/schabi/newpipe/views/player/PlayerFastSeekOverlay.kt +++ b/app/src/main/java/org/schabi/newpipe/views/player/PlayerFastSeekOverlay.kt @@ -58,7 +58,7 @@ class PlayerFastSeekOverlay(context: Context, attrs: AttributeSet?) : initTap = false - secondsView.stop() + secondsView.stopAnimation() } override fun onDoubleTapProgressDown(portion: DisplayPortion) { @@ -86,8 +86,6 @@ class PlayerFastSeekOverlay(context: Context, attrs: AttributeSet?) : wasForwarding = shouldForward if (!initTap) { - // Start animation - secondsView.start() initTap = true } } @@ -104,6 +102,8 @@ class PlayerFastSeekOverlay(context: Context, attrs: AttributeSet?) : if (initTap) performListener?.onDoubleTabEnd() initTap = false + + secondsView.stopAnimation() } private fun changeConstraints(forward: Boolean) { @@ -115,7 +115,7 @@ class PlayerFastSeekOverlay(context: Context, attrs: AttributeSet?) : secondsView.id, if (forward) END else START, PARENT_ID, if (forward) END else START ) - secondsView.start() + secondsView.startAnimation() applyTo(rootConstraintLayout) } } diff --git a/app/src/main/java/org/schabi/newpipe/views/player/SecondsView.kt b/app/src/main/java/org/schabi/newpipe/views/player/SecondsView.kt index 69dd09a07..d209d24da 100644 --- a/app/src/main/java/org/schabi/newpipe/views/player/SecondsView.kt +++ b/app/src/main/java/org/schabi/newpipe/views/player/SecondsView.kt @@ -8,6 +8,7 @@ import android.view.LayoutInflater import android.widget.LinearLayout import org.schabi.newpipe.R import org.schabi.newpipe.databinding.PlayerFastSeekSecondsViewBinding +import org.schabi.newpipe.util.DeviceUtils class SecondsView(context: Context, attrs: AttributeSet?) : LinearLayout(context, attrs) { @@ -33,6 +34,9 @@ class SecondsView(context: Context, attrs: AttributeSet?) : LinearLayout(context field = value } + // Done as a field so that we don't have to compute on each tab if animations are enabled + private val animationsEnabled = DeviceUtils.hasAnimationsAnimatorDurationEnabled(context) + val binding = PlayerFastSeekSecondsViewBinding.inflate(LayoutInflater.from(context), this) init { @@ -44,12 +48,18 @@ class SecondsView(context: Context, attrs: AttributeSet?) : LinearLayout(context binding.triangleContainer.rotation = if (isForward) 0f else 180f } - fun start() { - stop() - firstAnimator.start() + fun startAnimation() { + stopAnimation() + + if (animationsEnabled) { + firstAnimator.start() + } else { + // If no animations are enable show the arrow(s) without animation + showWithoutAnimation() + } } - fun stop() { + fun stopAnimation() { firstAnimator.cancel() secondAnimator.cancel() thirdAnimator.cancel() @@ -65,6 +75,12 @@ class SecondsView(context: Context, attrs: AttributeSet?) : LinearLayout(context binding.icon3.alpha = 0f } + private fun showWithoutAnimation() { + binding.icon1.alpha = 1f + binding.icon2.alpha = 1f + binding.icon3.alpha = 1f + } + private val firstAnimator: ValueAnimator = CustomValueAnimator( { binding.icon1.alpha = 0f