migrate player episodes list to DialogFragment; change hideBars() behaviour
This commit is contained in:
@ -53,8 +53,8 @@ import kotlinx.coroutines.launch
|
||||
import org.mosad.teapod.R
|
||||
import org.mosad.teapod.parser.crunchyroll.NoneEpisode
|
||||
import org.mosad.teapod.preferences.Preferences
|
||||
import org.mosad.teapod.ui.activity.player.fragment.EpisodeListDialogFragment
|
||||
import org.mosad.teapod.ui.activity.player.fragment.LanguageSettingsDialogFragment
|
||||
import org.mosad.teapod.ui.components.EpisodesListPlayer
|
||||
import org.mosad.teapod.util.hideBars
|
||||
import org.mosad.teapod.util.isInPiPMode
|
||||
import org.mosad.teapod.util.navToLauncherTask
|
||||
@ -480,11 +480,8 @@ class PlayerActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
private fun showEpisodesList() {
|
||||
val episodesList = EpisodesListPlayer(this, model = model).apply {
|
||||
onViewRemovedAction = { model.player.play() }
|
||||
}
|
||||
player_layout.addView(episodesList)
|
||||
pauseAndHideControls()
|
||||
EpisodeListDialogFragment().show(supportFragmentManager, EpisodeListDialogFragment.TAG)
|
||||
}
|
||||
|
||||
private fun showLanguageSettings() {
|
||||
|
@ -0,0 +1,68 @@
|
||||
package org.mosad.teapod.ui.activity.player.fragment
|
||||
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import org.mosad.teapod.R
|
||||
import org.mosad.teapod.databinding.PlayerEpisodesListBinding
|
||||
import org.mosad.teapod.ui.activity.player.PlayerViewModel
|
||||
import org.mosad.teapod.util.adapter.EpisodeItemAdapter
|
||||
import org.mosad.teapod.util.hideBars
|
||||
|
||||
class EpisodeListDialogFragment : DialogFragment() {
|
||||
|
||||
private lateinit var model: PlayerViewModel
|
||||
private lateinit var binding: PlayerEpisodesListBinding
|
||||
|
||||
companion object {
|
||||
const val TAG = "LanguageSettingsDialogFragment"
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setStyle(STYLE_NO_TITLE, R.style.FullScreenDialogStyle)
|
||||
model = ViewModelProvider(requireActivity())[PlayerViewModel::class.java]
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
binding = PlayerEpisodesListBinding.inflate(inflater, container, false)
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
binding.buttonCloseEpisodesList.setOnClickListener {
|
||||
dismiss()
|
||||
}
|
||||
|
||||
val adapterRecEpisodes = EpisodeItemAdapter(
|
||||
model.episodes.items,
|
||||
null,
|
||||
mapOf(),
|
||||
EpisodeItemAdapter.OnClickListener { episode ->
|
||||
dismiss()
|
||||
model.setCurrentEpisode(episode.id, startPlayback = true)
|
||||
},
|
||||
EpisodeItemAdapter.ViewType.PLAYER
|
||||
)
|
||||
|
||||
// episodeNumber starts at 1, we need the episode index -> - 1
|
||||
adapterRecEpisodes.currentSelected = model.currentEpisode.episodeNumber?.minus(1) ?: 0
|
||||
|
||||
binding.recyclerEpisodesPlayer.adapter = adapterRecEpisodes
|
||||
binding.recyclerEpisodesPlayer.scrollToPosition(adapterRecEpisodes.currentSelected)
|
||||
|
||||
// initially hide the status and navigation bar
|
||||
hideBars(requireDialog().window, binding.root)
|
||||
}
|
||||
|
||||
override fun onDismiss(dialog: DialogInterface) {
|
||||
super.onDismiss(dialog)
|
||||
model.player.play()
|
||||
}
|
||||
}
|
@ -116,4 +116,4 @@ class LanguageSettingsDialogFragment : DialogFragment() {
|
||||
compoundDrawablePadding = 12
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,48 +0,0 @@
|
||||
package org.mosad.teapod.ui.components
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import android.widget.LinearLayout
|
||||
import org.mosad.teapod.databinding.PlayerEpisodesListBinding
|
||||
import org.mosad.teapod.ui.activity.player.PlayerViewModel
|
||||
import org.mosad.teapod.util.adapter.EpisodeItemAdapter
|
||||
|
||||
class EpisodesListPlayer @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0,
|
||||
model: PlayerViewModel? = null
|
||||
) : LinearLayout(context, attrs, defStyleAttr) {
|
||||
|
||||
private val binding = PlayerEpisodesListBinding.inflate(LayoutInflater.from(context), this, true)
|
||||
var onViewRemovedAction: (() -> Unit)? = null // TODO find a better solution for this
|
||||
|
||||
init {
|
||||
binding.buttonCloseEpisodesList.setOnClickListener {
|
||||
(this.parent as ViewGroup).removeView(this)
|
||||
onViewRemovedAction?.invoke()
|
||||
}
|
||||
|
||||
model?.let {
|
||||
val adapterRecEpisodes = EpisodeItemAdapter(
|
||||
model.episodes.items,
|
||||
null,
|
||||
mapOf(),
|
||||
EpisodeItemAdapter.OnClickListener { episode ->
|
||||
(this.parent as ViewGroup).removeView(this)
|
||||
model.setCurrentEpisode(episode.id, startPlayback = true)
|
||||
},
|
||||
EpisodeItemAdapter.ViewType.PLAYER
|
||||
)
|
||||
|
||||
// episodeNumber starts at 1, we need the episode index -> - 1
|
||||
adapterRecEpisodes.currentSelected = model.currentEpisode.episodeNumber?.minus(1) ?: 0
|
||||
|
||||
binding.recyclerEpisodesPlayer.adapter = adapterRecEpisodes
|
||||
binding.recyclerEpisodesPlayer.scrollToPosition(adapterRecEpisodes.currentSelected)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -61,7 +61,7 @@ fun hideBars(window: Window?, root: View) {
|
||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||
WindowInsetsControllerCompat(window, root).let { controller ->
|
||||
controller.hide(WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.navigationBars())
|
||||
controller.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_SWIPE
|
||||
controller.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user