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 7f12a0dcf..67ba63756 100644 --- a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt +++ b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt @@ -48,9 +48,7 @@ object PreferenceKeys { const val AUTOPLAY = "autoplay" const val RELATED_STREAMS = "related_streams_toggle" const val REMEMBER_PLAYBACK_SPEED = "remember_playback_speed" - const val CUSTOM_PLAYBACK_SPEED = "custom_playback_speed" const val PLAYBACK_SPEED = "playback_speed" - const val BACKGROUND_PLAYBACK_SPEED = "background_playback_speed" const val FULLSCREEN_ORIENTATION = "fullscreen_orientation" const val PAUSE_ON_SCREEN_OFF = "pause_screen_off" const val WATCH_POSITIONS = "watch_positions" @@ -68,7 +66,7 @@ object PreferenceKeys { const val PLAYER_AUDIO_QUALITY_MOBILE = "player_audio_quality_mobile" const val DEFAULT_SUBTITLE = "default_subtitle" const val SKIP_BUTTONS = "skip_buttons" - const val PLAYER_RESIZE_MODE = "player_resize_mode" + const val PLAYER_RESIZE_MODE = "current_player_resize_mode" const val USE_HLS_OVER_DASH = "use_hls" const val QUEUE_AUTO_INSERT_RELATED = "queue_insert_related_videos" const val AUTOPLAY_PLAYLISTS = "autoplay_playlists" diff --git a/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt b/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt index 3233b3985..4f8387549 100644 --- a/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt +++ b/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt @@ -267,26 +267,12 @@ object PlayerHelper { .roundToInt() .toLong() * 1000 - private val playbackSpeed: Float + private val defaultPlaybackSpeed: Float get() = PreferenceHelper.getString( PreferenceKeys.PLAYBACK_SPEED, "1" ).replace("F", "").toFloat() - private val backgroundSpeed: Float - get() = when (PreferenceHelper.getBoolean(PreferenceKeys.CUSTOM_PLAYBACK_SPEED, false)) { - true -> PreferenceHelper.getString(PreferenceKeys.BACKGROUND_PLAYBACK_SPEED, "1") - .toFloat() - - else -> playbackSpeed - } - - val resizeModePref: String - get() = PreferenceHelper.getString( - PreferenceKeys.PLAYER_RESIZE_MODE, - "fit" - ) - val autoInsertRelatedVideos: Boolean get() = PreferenceHelper.getBoolean( PreferenceKeys.QUEUE_AUTO_INSERT_RELATED, @@ -526,11 +512,7 @@ object PlayerHelper { * Create a basic player, that is used for all types of playback situations inside the app */ @OptIn(androidx.media3.common.util.UnstableApi::class) - fun createPlayer( - context: Context, - trackSelector: DefaultTrackSelector, - isBackgroundMode: Boolean - ): ExoPlayer { + fun createPlayer(context: Context, trackSelector: DefaultTrackSelector, ): ExoPlayer { val dataSourceFactory = DefaultDataSource.Factory(context) val audioAttributes = AudioAttributes.Builder() .setUsage(C.USAGE_MEDIA) @@ -546,7 +528,7 @@ object PlayerHelper { .setAudioAttributes(audioAttributes, handleAudioFocus) .build() .apply { - loadPlaybackParams(isBackgroundMode) + loadPlaybackParams() } } @@ -571,10 +553,10 @@ object PlayerHelper { * Load playback parameters such as speed and skip silence */ @OptIn(androidx.media3.common.util.UnstableApi::class) - fun ExoPlayer.loadPlaybackParams(isBackgroundMode: Boolean = false): ExoPlayer { + fun ExoPlayer.loadPlaybackParams(): ExoPlayer { skipSilenceEnabled = skipSilence - val speed = if (isBackgroundMode) backgroundSpeed else playbackSpeed - playbackParameters = PlaybackParameters(speed, 1.0f) + + playbackParameters = PlaybackParameters(defaultPlaybackSpeed, 1.0f) return this } diff --git a/app/src/main/java/com/github/libretube/services/AbstractPlayerService.kt b/app/src/main/java/com/github/libretube/services/AbstractPlayerService.kt index 419d8e994..6c164c413 100644 --- a/app/src/main/java/com/github/libretube/services/AbstractPlayerService.kt +++ b/app/src/main/java/com/github/libretube/services/AbstractPlayerService.kt @@ -316,7 +316,7 @@ abstract class AbstractPlayerService : MediaLibraryService(), MediaLibrarySessio val trackSelector = DefaultTrackSelector(this) this.trackSelector = trackSelector - val player = PlayerHelper.createPlayer(this, trackSelector, true) + val player = PlayerHelper.createPlayer(this, trackSelector) // prevent android from putting LibreTube to sleep when locked player.setWakeMode(if (isOfflinePlayer) C.WAKE_MODE_LOCAL else C.WAKE_MODE_NETWORK) player.addListener(playerListener) 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 eb94c536a..c3bfbff91 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 @@ -106,10 +106,22 @@ abstract class CustomExoPlayerView( updateCurrentPosition() } - /** - * Preferences - */ - private var resizeModePref = PlayerHelper.resizeModePref + private var resizeModePref: Int + set(value) { + PreferenceHelper.putInt( + PreferenceKeys.PLAYER_RESIZE_MODE, + value + ) + } + get() = PreferenceHelper.getInt( + PreferenceKeys.PLAYER_RESIZE_MODE, + AspectRatioFrameLayout.RESIZE_MODE_FIT + ) + private val resizeModes = listOf( + AspectRatioFrameLayout.RESIZE_MODE_FIT to R.string.resize_mode_fit, + AspectRatioFrameLayout.RESIZE_MODE_ZOOM to R.string.resize_mode_zoom, + AspectRatioFrameLayout.RESIZE_MODE_FILL to R.string.resize_mode_fill + ) val activity get() = context as BaseActivity @@ -167,11 +179,7 @@ abstract class CustomExoPlayerView( if (isFullscreen()) toggleSystemBars(!isPlayerLocked) } - resizeMode = when (resizeModePref) { - "fill" -> AspectRatioFrameLayout.RESIZE_MODE_FILL - "zoom" -> AspectRatioFrameLayout.RESIZE_MODE_ZOOM - else -> AspectRatioFrameLayout.RESIZE_MODE_FIT - } + resizeMode = resizeModePref binding.playPauseBTN.setOnClickListener { player?.togglePlayPauseState() @@ -418,16 +426,8 @@ abstract class CustomExoPlayerView( context.getString(R.string.player_resize_mode), R.drawable.ic_aspect_ratio, { - when (resizeMode) { - AspectRatioFrameLayout.RESIZE_MODE_FIT -> context.getString( - R.string.resize_mode_fit - ) - - AspectRatioFrameLayout.RESIZE_MODE_FILL -> context.getString( - R.string.resize_mode_fill - ) - - else -> context.getString(R.string.resize_mode_zoom) + resizeModes.find { it.first == resizeMode }?.second?.let { + context.getString(it) } } ) { @@ -625,25 +625,24 @@ abstract class CustomExoPlayerView( override fun onResizeModeClicked() { // switching between original aspect ratio (black bars) and zoomed to fill device screen - val aspectRatioModeNames = context.resources?.getStringArray(R.array.resizeMode) - ?.toList().orEmpty() - - val aspectRatioModes = listOf( - AspectRatioFrameLayout.RESIZE_MODE_FIT, - AspectRatioFrameLayout.RESIZE_MODE_ZOOM, - AspectRatioFrameLayout.RESIZE_MODE_FILL - ) - BaseBottomSheet() .setSimpleItems( - aspectRatioModeNames, - preselectedItem = aspectRatioModeNames[aspectRatioModes.indexOf(resizeMode)] + resizeModes.map { context.getString(it.second) }, + preselectedItem = resizeModes.first { it.first == resizeMode }.second.let { + context.getString(it) + } ) { index -> - resizeMode = aspectRatioModes[index] + resizeMode = resizeModes[index].first } .show(supportFragmentManager) } + override fun setResizeMode(resizeMode: Int) { + super.setResizeMode(resizeMode) + // automatically remember the resize mode for the next session + resizeModePref = resizeMode + } + override fun onRepeatModeClicked() { // repeat mode options dialog BaseBottomSheet() @@ -805,6 +804,7 @@ abstract class CustomExoPlayerView( override fun onMinimize() { if (!PlayerHelper.pinchGestureEnabled) return resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT + subtitleView?.setBottomPaddingFraction(SubtitleView.DEFAULT_BOTTOM_PADDING_FRACTION) } diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index 705d432a8..ba12cc4af 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -354,18 +354,6 @@ unlimited - - @string/resize_mode_fit - @string/resize_mode_zoom - @string/resize_mode_fill - - - - fit - zoom - fill - - 16MB 32MB diff --git a/app/src/main/res/xml/player_settings.xml b/app/src/main/res/xml/player_settings.xml index 1ef1eae18..7c85f9f50 100644 --- a/app/src/main/res/xml/player_settings.xml +++ b/app/src/main/res/xml/player_settings.xml @@ -78,6 +78,13 @@ app:title="@string/fullscreen_orientation" app:useSimpleSummaryProvider="true" /> + + @@ -110,6 +117,12 @@ app:valueFrom="8" app:valueTo="30" /> + + @@ -128,37 +141,8 @@ - - - - - - - - - - - - - - - - - + +