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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+