mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-28 16:00:31 +05:30
Make autoplay toggle in player global and remove autoplay preference
This commit is contained in:
parent
4bb64bee05
commit
57bf610df1
@ -58,7 +58,7 @@ object PreferenceKeys {
|
|||||||
* Player
|
* Player
|
||||||
*/
|
*/
|
||||||
const val AUTO_FULLSCREEN = "auto_fullscreen"
|
const val AUTO_FULLSCREEN = "auto_fullscreen"
|
||||||
const val AUTO_PLAY = "autoplay"
|
const val AUTOPLAY = "autoplay"
|
||||||
const val RELATED_STREAMS = "related_streams_toggle"
|
const val RELATED_STREAMS = "related_streams_toggle"
|
||||||
const val CUSTOM_PLAYBACK_SPEED = "custom_playback_speed"
|
const val CUSTOM_PLAYBACK_SPEED = "custom_playback_speed"
|
||||||
const val PLAYBACK_SPEED = "playback_speed"
|
const val PLAYBACK_SPEED = "playback_speed"
|
||||||
|
@ -202,11 +202,14 @@ object PlayerHelper {
|
|||||||
true
|
true
|
||||||
)
|
)
|
||||||
|
|
||||||
val autoPlayEnabled: Boolean
|
var autoPlayEnabled: Boolean
|
||||||
get() = PreferenceHelper.getBoolean(
|
get() = PreferenceHelper.getBoolean(
|
||||||
PreferenceKeys.AUTO_PLAY,
|
PreferenceKeys.AUTOPLAY,
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
|
set(value) {
|
||||||
|
PreferenceHelper.putBoolean(PreferenceKeys.AUTOPLAY, value)
|
||||||
|
}
|
||||||
|
|
||||||
val autoPlayCountdown: Boolean
|
val autoPlayCountdown: Boolean
|
||||||
get() = PreferenceHelper.getBoolean(
|
get() = PreferenceHelper.getBoolean(
|
||||||
|
@ -111,6 +111,11 @@ class AudioPlayerFragment : Fragment(), AudioPlayerOptions {
|
|||||||
onLongTap()
|
onLongTap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.autoPlay.isChecked = PlayerHelper.autoPlayEnabled
|
||||||
|
binding.autoPlay.setOnCheckedChangeListener { _, isChecked ->
|
||||||
|
PlayerHelper.autoPlayEnabled = isChecked
|
||||||
|
}
|
||||||
|
|
||||||
binding.prev.setOnClickListener {
|
binding.prev.setOnClickListener {
|
||||||
val currentIndex = PlayingQueue.currentIndex()
|
val currentIndex = PlayingQueue.currentIndex()
|
||||||
if (!PlayingQueue.hasPrev()) return@setOnClickListener
|
if (!PlayingQueue.hasPrev()) return@setOnClickListener
|
||||||
|
@ -115,7 +115,6 @@ import com.github.libretube.util.TextUtils.toTimeInSeconds
|
|||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
import kotlin.math.abs
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -123,6 +122,7 @@ import kotlinx.coroutines.runBlocking
|
|||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import kotlinx.serialization.encodeToString
|
import kotlinx.serialization.encodeToString
|
||||||
import retrofit2.HttpException
|
import retrofit2.HttpException
|
||||||
|
import kotlin.math.abs
|
||||||
|
|
||||||
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
|
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
|
||||||
class PlayerFragment : Fragment(), OnlinePlayerOptions {
|
class PlayerFragment : Fragment(), OnlinePlayerOptions {
|
||||||
@ -586,7 +586,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
|
|||||||
binding.playerViewsInfo.text = viewInfo
|
binding.playerViewsInfo.text = viewInfo
|
||||||
|
|
||||||
if (this::chapters.isInitialized && chapters.isNotEmpty()) {
|
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) {
|
if (binding.playerMotionLayout.progress != 1.0f) {
|
||||||
// show controllers when not in picture in picture mode
|
// show controllers when not in picture in picture mode
|
||||||
val inPipMode = PlayerHelper.pipEnabled &&
|
val inPipMode = PlayerHelper.pipEnabled &&
|
||||||
PictureInPictureCompat.isInPictureInPictureMode(requireActivity())
|
PictureInPictureCompat.isInPictureInPictureMode(requireActivity())
|
||||||
if (!inPipMode) {
|
if (!inPipMode) {
|
||||||
binding.player.useController = true
|
binding.player.useController = true
|
||||||
}
|
}
|
||||||
@ -966,7 +966,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
|
|||||||
if (
|
if (
|
||||||
playbackState == Player.STATE_ENDED &&
|
playbackState == Player.STATE_ENDED &&
|
||||||
!transitioning &&
|
!transitioning &&
|
||||||
binding.player.autoplayEnabled
|
PlayerHelper.autoPlayEnabled
|
||||||
) {
|
) {
|
||||||
transitioning = true
|
transitioning = true
|
||||||
if (PlayerHelper.autoPlayCountdown) {
|
if (PlayerHelper.autoPlayCountdown) {
|
||||||
|
@ -24,48 +24,47 @@ class OnlinePlayerView(
|
|||||||
private var playerViewModel: PlayerViewModel? = null
|
private var playerViewModel: PlayerViewModel? = null
|
||||||
private var trackSelector: TrackSelector? = null
|
private var trackSelector: TrackSelector? = null
|
||||||
private var viewLifecycleOwner: LifecycleOwner? = null
|
private var viewLifecycleOwner: LifecycleOwner? = null
|
||||||
var autoplayEnabled = PlayerHelper.autoPlayEnabled
|
|
||||||
|
|
||||||
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
|
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
|
||||||
override fun getOptionsMenuItems(): List<BottomSheetItem> {
|
override fun getOptionsMenuItems(): List<BottomSheetItem> {
|
||||||
return super.getOptionsMenuItems() +
|
return super.getOptionsMenuItems() +
|
||||||
listOf(
|
listOf(
|
||||||
BottomSheetItem(
|
BottomSheetItem(
|
||||||
context.getString(R.string.quality),
|
context.getString(R.string.quality),
|
||||||
R.drawable.ic_hd,
|
R.drawable.ic_hd,
|
||||||
{ "${player?.videoSize?.height}p" }
|
{ "${player?.videoSize?.height}p" }
|
||||||
) {
|
) {
|
||||||
playerOptions?.onQualityClicked()
|
playerOptions?.onQualityClicked()
|
||||||
},
|
},
|
||||||
BottomSheetItem(
|
BottomSheetItem(
|
||||||
context.getString(R.string.audio_track),
|
context.getString(R.string.audio_track),
|
||||||
R.drawable.ic_audio,
|
R.drawable.ic_audio,
|
||||||
{
|
{
|
||||||
trackSelector?.parameters?.preferredAudioLanguages?.firstOrNull()
|
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?.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(
|
fun initPlayerOptions(
|
||||||
@ -97,10 +96,10 @@ class OnlinePlayerView(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
binding.autoPlay.isChecked = autoplayEnabled
|
binding.autoPlay.isChecked = PlayerHelper.autoPlayEnabled
|
||||||
|
|
||||||
binding.autoPlay.setOnCheckedChangeListener { _, isChecked ->
|
binding.autoPlay.setOnCheckedChangeListener { _, isChecked ->
|
||||||
autoplayEnabled = isChecked
|
PlayerHelper.autoPlayEnabled = isChecked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
app:layout_constraintStart_toStartOf="@id/audio_player_container"
|
app:layout_constraintStart_toStartOf="@id/audio_player_container"
|
||||||
app:layout_constraintTop_toTopOf="@id/audio_player_container">
|
app:layout_constraintTop_toTopOf="@id/audio_player_container">
|
||||||
|
|
||||||
<FrameLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="20dp">
|
android:padding="20dp">
|
||||||
@ -35,21 +35,38 @@
|
|||||||
android:id="@+id/minimize_player"
|
android:id="@+id/minimize_player"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center|start"
|
android:layout_gravity="center"
|
||||||
android:background="?selectableItemBackgroundBorderless"
|
android:background="?selectableItemBackgroundBorderless"
|
||||||
android:src="@drawable/ic_arrow_down" />
|
android:src="@drawable/ic_arrow_down" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
|
android:id="@+id/autoPlay"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="5dp"
|
||||||
|
android:scaleX="0.8"
|
||||||
|
android:scaleY="0.8"
|
||||||
|
android:thumb="@drawable/player_switch_thumb"
|
||||||
|
app:thumbTint="?colorPrimary"
|
||||||
|
app:track="@drawable/player_switch_track"
|
||||||
|
app:trackTint="?colorControlNormal" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/dropdown_menu"
|
android:id="@+id/dropdown_menu"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center|end"
|
android:layout_gravity="center"
|
||||||
android:background="?selectableItemBackgroundBorderless"
|
android:background="?selectableItemBackgroundBorderless"
|
||||||
android:scaleX="0.8"
|
android:scaleX="0.8"
|
||||||
android:scaleY="0.8"
|
android:scaleY="0.8"
|
||||||
android:src="@drawable/ic_three_dots" />
|
android:src="@drawable/ic_three_dots" />
|
||||||
|
|
||||||
</FrameLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -163,13 +163,6 @@
|
|||||||
app:title="@string/player_resize_mode"
|
app:title="@string/player_resize_mode"
|
||||||
app:useSimpleSummaryProvider="true" />
|
app:useSimpleSummaryProvider="true" />
|
||||||
|
|
||||||
<SwitchPreferenceCompat
|
|
||||||
android:icon="@drawable/ic_play_filled"
|
|
||||||
android:summary="@string/autoplay_summary"
|
|
||||||
app:defaultValue="true"
|
|
||||||
app:key="autoplay"
|
|
||||||
app:title="@string/player_autoplay" />
|
|
||||||
|
|
||||||
<SwitchPreferenceCompat
|
<SwitchPreferenceCompat
|
||||||
android:icon="@drawable/ic_speed"
|
android:icon="@drawable/ic_speed"
|
||||||
android:summary="@string/autoplay_countdown_summary"
|
android:summary="@string/autoplay_countdown_summary"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user