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 4897f56f5..b3e98243b 100644 --- a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt +++ b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt @@ -58,7 +58,7 @@ object PreferenceKeys { * Player */ const val AUTO_FULLSCREEN = "auto_fullscreen" - const val AUTO_PLAY = "autoplay" + const val AUTOPLAY = "autoplay" const val RELATED_STREAMS = "related_streams_toggle" const val CUSTOM_PLAYBACK_SPEED = "custom_playback_speed" const val PLAYBACK_SPEED = "playback_speed" 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 491e6a06c..c8056ee73 100644 --- a/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt +++ b/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt @@ -202,11 +202,14 @@ object PlayerHelper { true ) - val autoPlayEnabled: Boolean + var autoPlayEnabled: Boolean get() = PreferenceHelper.getBoolean( - PreferenceKeys.AUTO_PLAY, + PreferenceKeys.AUTOPLAY, true ) + set(value) { + PreferenceHelper.putBoolean(PreferenceKeys.AUTOPLAY, value) + } val autoPlayCountdown: Boolean get() = PreferenceHelper.getBoolean( diff --git a/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt index 869efce78..2fe177f71 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt @@ -111,6 +111,11 @@ class AudioPlayerFragment : Fragment(), AudioPlayerOptions { onLongTap() } + binding.autoPlay.isChecked = PlayerHelper.autoPlayEnabled + binding.autoPlay.setOnCheckedChangeListener { _, isChecked -> + PlayerHelper.autoPlayEnabled = isChecked + } + binding.prev.setOnClickListener { val currentIndex = PlayingQueue.currentIndex() if (!PlayingQueue.hasPrev()) return@setOnClickListener diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index 48f4933f2..a5eb94d06 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -115,7 +115,6 @@ import com.github.libretube.util.TextUtils.toTimeInSeconds import java.io.IOException import java.util.* import java.util.concurrent.Executors -import kotlin.math.abs import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -123,6 +122,7 @@ import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import kotlinx.serialization.encodeToString import retrofit2.HttpException +import kotlin.math.abs @androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class) class PlayerFragment : Fragment(), OnlinePlayerOptions { @@ -586,7 +586,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions { binding.playerViewsInfo.text = viewInfo if (this::chapters.isInitialized && chapters.isNotEmpty()) { - setCurrentChapterName(true, false) + setCurrentChapterName(forceUpdate = true, enqueueNew = false) } } @@ -751,7 +751,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions { if (binding.playerMotionLayout.progress != 1.0f) { // show controllers when not in picture in picture mode val inPipMode = PlayerHelper.pipEnabled && - PictureInPictureCompat.isInPictureInPictureMode(requireActivity()) + PictureInPictureCompat.isInPictureInPictureMode(requireActivity()) if (!inPipMode) { binding.player.useController = true } @@ -966,7 +966,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions { if ( playbackState == Player.STATE_ENDED && !transitioning && - binding.player.autoplayEnabled + PlayerHelper.autoPlayEnabled ) { transitioning = true if (PlayerHelper.autoPlayCountdown) { diff --git a/app/src/main/java/com/github/libretube/ui/views/OnlinePlayerView.kt b/app/src/main/java/com/github/libretube/ui/views/OnlinePlayerView.kt index a4b58e99e..6e39366c7 100644 --- a/app/src/main/java/com/github/libretube/ui/views/OnlinePlayerView.kt +++ b/app/src/main/java/com/github/libretube/ui/views/OnlinePlayerView.kt @@ -24,48 +24,47 @@ class OnlinePlayerView( private var playerViewModel: PlayerViewModel? = null private var trackSelector: TrackSelector? = null private var viewLifecycleOwner: LifecycleOwner? = null - var autoplayEnabled = PlayerHelper.autoPlayEnabled @androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class) override fun getOptionsMenuItems(): List { return super.getOptionsMenuItems() + - listOf( - BottomSheetItem( - context.getString(R.string.quality), - R.drawable.ic_hd, - { "${player?.videoSize?.height}p" } - ) { - playerOptions?.onQualityClicked() - }, - BottomSheetItem( - context.getString(R.string.audio_track), - R.drawable.ic_audio, - { - trackSelector?.parameters?.preferredAudioLanguages?.firstOrNull() - } - ) { - playerOptions?.onAudioStreamClicked() - }, - BottomSheetItem( - context.getString(R.string.captions), - R.drawable.ic_caption, - { - if (trackSelector != null && trackSelector!!.parameters.preferredTextLanguages.isNotEmpty()) { - trackSelector!!.parameters.preferredTextLanguages[0] - } else { - context.getString(R.string.none) + listOf( + BottomSheetItem( + context.getString(R.string.quality), + R.drawable.ic_hd, + { "${player?.videoSize?.height}p" } + ) { + playerOptions?.onQualityClicked() + }, + BottomSheetItem( + context.getString(R.string.audio_track), + R.drawable.ic_audio, + { + trackSelector?.parameters?.preferredAudioLanguages?.firstOrNull() } + ) { + playerOptions?.onAudioStreamClicked() + }, + BottomSheetItem( + context.getString(R.string.captions), + R.drawable.ic_caption, + { + if (trackSelector != null && trackSelector!!.parameters.preferredTextLanguages.isNotEmpty()) { + trackSelector!!.parameters.preferredTextLanguages[0] + } else { + context.getString(R.string.none) + } + } + ) { + playerOptions?.onCaptionsClicked() + }, + BottomSheetItem( + context.getString(R.string.stats_for_nerds), + R.drawable.ic_info + ) { + playerOptions?.onStatsClicked() } - ) { - playerOptions?.onCaptionsClicked() - }, - BottomSheetItem( - context.getString(R.string.stats_for_nerds), - R.drawable.ic_info - ) { - playerOptions?.onStatsClicked() - } - ) + ) } fun initPlayerOptions( @@ -97,10 +96,10 @@ class OnlinePlayerView( } ) - binding.autoPlay.isChecked = autoplayEnabled + binding.autoPlay.isChecked = PlayerHelper.autoPlayEnabled binding.autoPlay.setOnCheckedChangeListener { _, isChecked -> - autoplayEnabled = isChecked + PlayerHelper.autoPlayEnabled = isChecked } } diff --git a/app/src/main/res/layout/fragment_audio_player.xml b/app/src/main/res/layout/fragment_audio_player.xml index c409533f4..c00e016c5 100644 --- a/app/src/main/res/layout/fragment_audio_player.xml +++ b/app/src/main/res/layout/fragment_audio_player.xml @@ -26,7 +26,7 @@ app:layout_constraintStart_toStartOf="@id/audio_player_container" app:layout_constraintTop_toTopOf="@id/audio_player_container"> - @@ -35,21 +35,38 @@ android:id="@+id/minimize_player" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center|start" + android:layout_gravity="center" android:background="?selectableItemBackgroundBorderless" android:src="@drawable/ic_arrow_down" /> + + + + - + - -