From fe6506179c4592c79bcfd16cabd0b9e74dbdaa6d Mon Sep 17 00:00:00 2001 From: Bnyro Date: Tue, 17 Jan 2023 18:38:39 +0100 Subject: [PATCH] Ability to skip silence when playing videos --- .../libretube/constants/PreferenceKeys.kt | 1 + .../libretube/ui/sheets/PlaybackSpeedSheet.kt | 14 +++++++++-- .../libretube/ui/views/CustomExoPlayerView.kt | 10 +++++++- .../main/res/layout/playback_bottom_sheet.xml | 23 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 46 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt index f460c9f94..486a858d7 100644 --- a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt +++ b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt @@ -88,6 +88,7 @@ object PreferenceKeys { const val DOUBLE_TAP_TO_SEEK = "double_tap_seek" const val PAUSE_ON_QUIT = "pause_on_quit" const val ALTERNATIVE_PIP_CONTROLS = "alternative_pip_controls" + const val SKIP_SILENCE = "skip_silence" /** * Background mode diff --git a/app/src/main/java/com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt index dc0d670b3..4bf141c9e 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt @@ -4,13 +4,15 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import com.github.libretube.constants.PreferenceKeys import com.github.libretube.databinding.PlaybackBottomSheetBinding import com.github.libretube.extensions.round +import com.github.libretube.util.PreferenceHelper +import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.PlaybackParameters -import com.google.android.exoplayer2.Player class PlaybackSpeedSheet( - private val player: Player + private val player: ExoPlayer ) : ExpandedBottomSheet() { private lateinit var binding: PlaybackBottomSheetBinding @@ -28,6 +30,9 @@ class PlaybackSpeedSheet( binding.speed.value = player.playbackParameters.speed binding.pitch.value = player.playbackParameters.pitch + PreferenceHelper.getBoolean(PreferenceKeys.SKIP_SILENCE, false).let { + binding.skipSilence.isChecked = it + } binding.speed.addOnChangeListener { _, _, _ -> onChange() @@ -46,6 +51,11 @@ class PlaybackSpeedSheet( binding.pitch.value = 1f onChange() } + + binding.skipSilence.setOnCheckedChangeListener { _, isChecked -> + player.skipSilenceEnabled = isChecked + PreferenceHelper.putBoolean(PreferenceKeys.SKIP_SILENCE, isChecked) + } } private fun onChange() { diff --git a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt index 05f9a1bd8..0ab60b343 100644 --- a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt +++ b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt @@ -15,6 +15,7 @@ import android.widget.ImageView import android.widget.TextView import androidx.core.content.ContextCompat import com.github.libretube.R +import com.github.libretube.constants.PreferenceKeys import com.github.libretube.databinding.DoubleTapOverlayBinding import com.github.libretube.databinding.ExoStyledPlayerControlViewBinding import com.github.libretube.databinding.PlayerGestureControlsViewBinding @@ -33,6 +34,8 @@ import com.github.libretube.util.BrightnessHelper import com.github.libretube.util.PlayerGestureController import com.github.libretube.util.PlayerHelper import com.github.libretube.util.PlayingQueue +import com.github.libretube.util.PreferenceHelper +import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.PlaybackParameters import com.google.android.exoplayer2.Player import com.google.android.exoplayer2.trackselection.TrackSelector @@ -111,6 +114,9 @@ internal class CustomExoPlayerView( PlayerHelper.playbackSpeed.toFloat(), 1.0f ) + PreferenceHelper.getBoolean(PreferenceKeys.SKIP_SILENCE, false).let { + (player as ExoPlayer).skipSilenceEnabled = true + } playbackPrefSet = true } @@ -484,7 +490,9 @@ internal class CustomExoPlayerView( } override fun onPlaybackSpeedClicked() { - player?.let { PlaybackSpeedSheet(it).show(supportFragmentManager) } + player?.let { + PlaybackSpeedSheet(it as ExoPlayer).show(supportFragmentManager) + } } override fun onResizeModeClicked() { diff --git a/app/src/main/res/layout/playback_bottom_sheet.xml b/app/src/main/res/layout/playback_bottom_sheet.xml index ab34782c3..b99366ce8 100644 --- a/app/src/main/res/layout/playback_bottom_sheet.xml +++ b/app/src/main/res/layout/playback_bottom_sheet.xml @@ -92,6 +92,29 @@ + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2146b817b..f97725a59 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -441,6 +441,7 @@ Audio only mode Turn LibreTube into a music player. Sleep timer + Skip silence Download Service