Merge pull request #2790 from Bnyro/master

Apply the remembered playback params for all players
This commit is contained in:
Bnyro 2023-01-21 12:07:56 +01:00 committed by GitHub
commit 7a65a477d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 36 additions and 44 deletions

View File

@ -93,7 +93,6 @@ object PreferenceKeys {
/** /**
* Background mode * Background mode
*/ */
const val BACKGROUND_PLAYBACK_SPEED = "background_playback_speed"
const val AUDIO_ONLY_MODE = "audio_only_mode" const val AUDIO_ONLY_MODE = "audio_only_mode"
/** /**

View File

@ -22,7 +22,6 @@ import com.github.libretube.api.obj.Streams
import com.github.libretube.constants.BACKGROUND_CHANNEL_ID import com.github.libretube.constants.BACKGROUND_CHANNEL_ID
import com.github.libretube.constants.IntentData import com.github.libretube.constants.IntentData
import com.github.libretube.constants.PLAYER_NOTIFICATION_ID import com.github.libretube.constants.PLAYER_NOTIFICATION_ID
import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.db.obj.WatchPosition import com.github.libretube.db.obj.WatchPosition
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
@ -32,8 +31,8 @@ import com.github.libretube.extensions.toID
import com.github.libretube.extensions.toStreamItem import com.github.libretube.extensions.toStreamItem
import com.github.libretube.util.NowPlayingNotification import com.github.libretube.util.NowPlayingNotification
import com.github.libretube.util.PlayerHelper import com.github.libretube.util.PlayerHelper
import com.github.libretube.util.PlayerHelper.loadPlaybackParams
import com.github.libretube.util.PlayingQueue import com.github.libretube.util.PlayingQueue
import com.github.libretube.util.PreferenceHelper
import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.MediaItem import com.google.android.exoplayer2.MediaItem
import com.google.android.exoplayer2.PlaybackException import com.google.android.exoplayer2.PlaybackException
@ -223,13 +222,6 @@ class BackgroundMode : Service() {
} }
} }
// set the playback speed
val playbackSpeed = PreferenceHelper.getString(
PreferenceKeys.BACKGROUND_PLAYBACK_SPEED,
"1"
).toFloat()
player?.setPlaybackSpeed(playbackSpeed)
fetchSponsorBlockSegments() fetchSponsorBlockSegments()
} }
@ -244,6 +236,7 @@ class BackgroundMode : Service() {
.setAudioAttributes(PlayerHelper.getAudioAttributes(), true) .setAudioAttributes(PlayerHelper.getAudioAttributes(), true)
.setLoadControl(PlayerHelper.getLoadControl()) .setLoadControl(PlayerHelper.getLoadControl())
.build() .build()
.loadPlaybackParams()
/** /**
* Listens for changed playbackStates (e.g. pause, end) * Listens for changed playbackStates (e.g. pause, end)

View File

@ -20,6 +20,7 @@ import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setAspectRatio import com.github.libretube.ui.extensions.setAspectRatio
import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.models.PlayerViewModel
import com.github.libretube.util.PlayerHelper import com.github.libretube.util.PlayerHelper
import com.github.libretube.util.PlayerHelper.loadPlaybackParams
import com.github.libretube.util.WindowHelper import com.github.libretube.util.WindowHelper
import com.google.android.exoplayer2.C import com.google.android.exoplayer2.C
import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.ExoPlayer
@ -81,6 +82,7 @@ class OfflinePlayerActivity : BaseActivity() {
} }
}) })
} }
.loadPlaybackParams()
playerView = binding.player playerView = binding.player
playerView.setShowSubtitleButton(true) playerView.setShowSubtitleButton(true)

View File

@ -94,6 +94,7 @@ import com.github.libretube.util.LinkHandler
import com.github.libretube.util.NavigationHelper import com.github.libretube.util.NavigationHelper
import com.github.libretube.util.NowPlayingNotification import com.github.libretube.util.NowPlayingNotification
import com.github.libretube.util.PlayerHelper import com.github.libretube.util.PlayerHelper
import com.github.libretube.util.PlayerHelper.loadPlaybackParams
import com.github.libretube.util.PlayingQueue import com.github.libretube.util.PlayingQueue
import com.github.libretube.util.PreferenceHelper import com.github.libretube.util.PreferenceHelper
import com.github.libretube.util.SeekbarPreviewListener import com.github.libretube.util.SeekbarPreviewListener
@ -1346,6 +1347,7 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions {
.setHandleAudioBecomingNoisy(true) .setHandleAudioBecomingNoisy(true)
.setAudioAttributes(PlayerHelper.getAudioAttributes(), true) .setAudioAttributes(PlayerHelper.getAudioAttributes(), true)
.build() .build()
.loadPlaybackParams()
} }
/** /**

View File

@ -16,7 +16,6 @@ import android.widget.TextView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.databinding.DoubleTapOverlayBinding import com.github.libretube.databinding.DoubleTapOverlayBinding
import com.github.libretube.databinding.ExoStyledPlayerControlViewBinding import com.github.libretube.databinding.ExoStyledPlayerControlViewBinding
import com.github.libretube.databinding.PlayerGestureControlsViewBinding import com.github.libretube.databinding.PlayerGestureControlsViewBinding
@ -36,9 +35,7 @@ import com.github.libretube.util.BrightnessHelper
import com.github.libretube.util.PlayerGestureController import com.github.libretube.util.PlayerGestureController
import com.github.libretube.util.PlayerHelper import com.github.libretube.util.PlayerHelper
import com.github.libretube.util.PlayingQueue import com.github.libretube.util.PlayingQueue
import com.github.libretube.util.PreferenceHelper
import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.PlaybackParameters
import com.google.android.exoplayer2.Player import com.google.android.exoplayer2.Player
import com.google.android.exoplayer2.text.Cue import com.google.android.exoplayer2.text.Cue
import com.google.android.exoplayer2.trackselection.TrackSelector import com.google.android.exoplayer2.trackselection.TrackSelector
@ -92,9 +89,6 @@ internal class CustomExoPlayerView(
if (isControllerFullyVisible) hideController() else showController() if (isControllerFullyVisible) hideController() else showController()
} }
// saved to only load the playback speed once (for the first video)
private var playbackPrefSet = false
private val hideControllerRunnable = Runnable { private val hideControllerRunnable = Runnable {
hideController() hideController()
} }
@ -127,17 +121,6 @@ internal class CustomExoPlayerView(
// don't let the player view hide its controls automatically // don't let the player view hide its controls automatically
controllerShowTimeoutMs = -1 controllerShowTimeoutMs = -1
if (!playbackPrefSet) {
player?.playbackParameters = PlaybackParameters(
PlayerHelper.playbackSpeed.toFloat(),
1.0f
)
PreferenceHelper.getBoolean(PreferenceKeys.SKIP_SILENCE, false).let {
(player as ExoPlayer).skipSilenceEnabled = it
}
playbackPrefSet = true
}
// locking the player // locking the player
binding.lockPlayer.setOnClickListener { binding.lockPlayer.setOnClickListener {
// change the locked/unlocked icon // change the locked/unlocked icon
@ -218,9 +201,15 @@ internal class CustomExoPlayerView(
} }
} }
private fun cancelHideControllerTask() {
runCatching {
handler.removeCallbacks(hideControllerRunnable)
}
}
override fun hideController() { override fun hideController() {
// remove the callback to hide the controller // remove the callback to hide the controller
handler.removeCallbacks(hideControllerRunnable) cancelHideControllerTask()
super.hideController() super.hideController()
// hide system bars if in fullscreen // hide system bars if in fullscreen
@ -234,7 +223,7 @@ internal class CustomExoPlayerView(
override fun showController() { override fun showController() {
// remove the previous callback from the queue to prevent a flashing behavior // remove the previous callback from the queue to prevent a flashing behavior
handler.removeCallbacks(hideControllerRunnable) cancelHideControllerTask()
// automatically hide the controller after 2 seconds // automatically hide the controller after 2 seconds
handler.postDelayed(hideControllerRunnable, AUTO_HIDE_CONTROLLER_DELAY) handler.postDelayed(hideControllerRunnable, AUTO_HIDE_CONTROLLER_DELAY)
super.showController() super.showController()
@ -393,8 +382,8 @@ internal class CustomExoPlayerView(
doubleTapOverlayBinding?.apply { doubleTapOverlayBinding?.apply {
animateSeeking(rewindBTN, rewindIV, rewindTV, true) animateSeeking(rewindBTN, rewindIV, rewindTV, true)
runnableHandler.removeCallbacks(hideRewindButtonRunnable)
// start callback to hide the button // start callback to hide the button
runnableHandler.removeCallbacks(hideRewindButtonRunnable)
runnableHandler.postDelayed(hideRewindButtonRunnable, 700) runnableHandler.postDelayed(hideRewindButtonRunnable, 700)
} }
} }
@ -718,7 +707,7 @@ internal class CustomExoPlayerView(
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
// when a control is clicked, restart the countdown to hide the controller // when a control is clicked, restart the countdown to hide the controller
if (isControllerFullyVisible) { if (isControllerFullyVisible) {
handler.removeCallbacks(hideControllerRunnable) cancelHideControllerTask()
handler.postDelayed(hideControllerRunnable, AUTO_HIDE_CONTROLLER_DELAY) handler.postDelayed(hideControllerRunnable, AUTO_HIDE_CONTROLLER_DELAY)
} }
return super.onInterceptTouchEvent(ev) return super.onInterceptTouchEvent(ev)

View File

@ -18,7 +18,9 @@ import com.github.libretube.enums.AudioQuality
import com.github.libretube.enums.PlayerEvent import com.github.libretube.enums.PlayerEvent
import com.google.android.exoplayer2.C import com.google.android.exoplayer2.C
import com.google.android.exoplayer2.DefaultLoadControl import com.google.android.exoplayer2.DefaultLoadControl
import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.LoadControl import com.google.android.exoplayer2.LoadControl
import com.google.android.exoplayer2.PlaybackParameters
import com.google.android.exoplayer2.audio.AudioAttributes import com.google.android.exoplayer2.audio.AudioAttributes
import com.google.android.exoplayer2.ui.CaptionStyleCompat import com.google.android.exoplayer2.ui.CaptionStyleCompat
import com.google.android.exoplayer2.video.VideoSize import com.google.android.exoplayer2.video.VideoSize
@ -342,6 +344,12 @@ object PlayerHelper {
false false
) )
private val skipSilence: Boolean
get() = PreferenceHelper.getBoolean(
PreferenceKeys.SKIP_SILENCE,
false
)
fun getDefaultResolution(context: Context): String { fun getDefaultResolution(context: Context): String {
return if (NetworkHelper.isNetworkMobile(context)) { return if (NetworkHelper.isNetworkMobile(context)) {
PreferenceHelper.getString( PreferenceHelper.getString(
@ -459,4 +467,16 @@ object PlayerHelper {
) )
.build() .build()
} }
/**
* Load playback parameters such as speed and skip silence
*/
fun ExoPlayer.loadPlaybackParams(): ExoPlayer {
skipSilenceEnabled = skipSilence
playbackParameters = PlaybackParameters(
playbackSpeed.toFloat(),
1.0f
)
return this
}
} }

View File

@ -78,17 +78,4 @@
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory app:title="@string/background_mode">
<com.github.libretube.ui.views.SliderPreference
android:icon="@drawable/ic_speed"
app:defValue="1.0"
app:key="background_playback_speed"
app:stepSize="0.1"
app:title="@string/playback_speed"
app:valueFrom="0.2"
app:valueTo="4.0" />
</PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>