diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt index da1066ff..9cb27040 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt @@ -512,6 +512,8 @@ class VideoDetailView : ConstraintLayout { _player.onDatasourceError.subscribe(::onDataSourceError); _player.onNext.subscribe { nextVideo(true, true, true) }; _player.onPrevious.subscribe { prevVideo(true) }; + _cast.onPrevious.subscribe { prevVideo(true) }; + _cast.onNext.subscribe { nextVideo(true, true, true) }; _minimize_controls_play.setOnClickListener { handlePlay(); }; _minimize_controls_pause.setOnClickListener { handlePause(); }; @@ -1579,7 +1581,7 @@ class VideoDetailView : ConstraintLayout { _overlay_quality_selector?.groupItems?.firstOrNull { it is SlideUpMenuButtonList && it.id == "playback_rate" }?.let { (it as SlideUpMenuButtonList).setSelected(currentPlaybackRate.toString()) }; - + _overlay_quality_selector?.show(); _slideUpOverlay = _overlay_quality_selector; } diff --git a/app/src/main/java/com/futo/platformplayer/views/casting/CastView.kt b/app/src/main/java/com/futo/platformplayer/views/casting/CastView.kt index aeca7334..f17ef2ad 100644 --- a/app/src/main/java/com/futo/platformplayer/views/casting/CastView.kt +++ b/app/src/main/java/com/futo/platformplayer/views/casting/CastView.kt @@ -38,6 +38,8 @@ class CastView : ConstraintLayout { private val _buttonSettings: ImageButton; private val _buttonLoop: ImageButton; private val _buttonPlay: ImageButton; + private val _buttonPrevious: ImageButton; + private val _buttonNext: ImageButton; private val _buttonPause: ImageButton; private val _buttonCast: CastButton; private val _textPosition: TextView; @@ -52,6 +54,8 @@ class CastView : ConstraintLayout { val onMinimizeClick = Event0(); val onSettingsClick = Event0(); + val onPrevious = Event0(); + val onNext = Event0(); @OptIn(UnstableApi::class) constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { @@ -62,6 +66,8 @@ class CastView : ConstraintLayout { _buttonSettings = findViewById(R.id.button_settings); _buttonLoop = findViewById(R.id.button_loop); _buttonPlay = findViewById(R.id.button_play); + _buttonPrevious = findViewById(R.id.button_previous); + _buttonNext = findViewById(R.id.button_next); _buttonPause = findViewById(R.id.button_pause); _buttonCast = findViewById(R.id.button_cast); _textPosition = findViewById(R.id.text_position); @@ -105,6 +111,28 @@ class CastView : ConstraintLayout { if (!isInEditMode) { setIsPlaying(false); } + + StatePlayer.instance.onQueueChanged.subscribe(this) { + CoroutineScope(Dispatchers.Main).launch(Dispatchers.Main) { + setLoopVisible(!StatePlayer.instance.hasQueue) + updateNextPrevious(); + } + } + StatePlayer.instance.onVideoChanging.subscribe(this) { + CoroutineScope(Dispatchers.Main).launch(Dispatchers.Main) { + updateNextPrevious(); + } + } + + _buttonPrevious.setOnClickListener { onPrevious.emit() }; + _buttonNext.setOnClickListener { onNext.emit() }; + } + + private fun updateNextPrevious() { + val vidPrev = StatePlayer.instance.getPrevQueueItem(true); + val vidNext = StatePlayer.instance.getNextQueueItem(true); + _buttonNext.visibility = if (vidNext != null) View.VISIBLE else View.GONE + _buttonPrevious.visibility = if (vidPrev != null) View.VISIBLE else View.GONE } fun stopTimeJob() { diff --git a/app/src/main/res/layout/view_cast.xml b/app/src/main/res/layout/view_cast.xml index 9253b3e3..3bf9d745 100644 --- a/app/src/main/res/layout/view_cast.xml +++ b/app/src/main/res/layout/view_cast.xml @@ -73,6 +73,19 @@ app:srcCompat="@drawable/ic_settings" /> + + + + +