Load episodes mediasources when play button pressed in EpisodeBottomSheet
This commit is contained in:
parent
d67f195789
commit
10e89a2df5
3 changed files with 53 additions and 14 deletions
|
@ -5,6 +5,7 @@ import android.util.TypedValue
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
|
@ -14,7 +15,6 @@ import dev.jdtech.jellyfin.R
|
||||||
import dev.jdtech.jellyfin.databinding.EpisodeBottomSheetBinding
|
import dev.jdtech.jellyfin.databinding.EpisodeBottomSheetBinding
|
||||||
import dev.jdtech.jellyfin.models.PlayerItem
|
import dev.jdtech.jellyfin.models.PlayerItem
|
||||||
import dev.jdtech.jellyfin.viewmodels.EpisodeBottomSheetViewModel
|
import dev.jdtech.jellyfin.viewmodels.EpisodeBottomSheetViewModel
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
|
class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
|
||||||
|
@ -34,10 +34,9 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
||||||
binding.playButton.setOnClickListener {
|
binding.playButton.setOnClickListener {
|
||||||
navigateToPlayerActivity(
|
binding.playButton.setImageResource(android.R.color.transparent)
|
||||||
viewModel.playerItems.toTypedArray(),
|
binding.progressCircular.visibility = View.VISIBLE
|
||||||
viewModel.item.value!!.userData!!.playbackPositionTicks.div(10000)
|
viewModel.preparePlayer()
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.checkButton.setOnClickListener {
|
binding.checkButton.setOnClickListener {
|
||||||
|
@ -87,6 +86,18 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
|
||||||
binding.favoriteButton.setImageResource(drawable)
|
binding.favoriteButton.setImageResource(drawable)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
viewModel.navigateToPlayer.observe(viewLifecycleOwner, {
|
||||||
|
if (it) {
|
||||||
|
navigateToPlayerActivity(
|
||||||
|
viewModel.playerItems.toTypedArray(),
|
||||||
|
viewModel.item.value!!.userData!!.playbackPositionTicks.div(10000)
|
||||||
|
)
|
||||||
|
viewModel.doneNavigateToPlayer()
|
||||||
|
binding.playButton.setImageDrawable(ContextCompat.getDrawable(requireActivity(), R.drawable.ic_play))
|
||||||
|
binding.progressCircular.visibility = View.INVISIBLE
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
viewModel.loadEpisode(args.episodeId)
|
viewModel.loadEpisode(args.episodeId)
|
||||||
|
|
||||||
return binding.root
|
return binding.root
|
||||||
|
|
|
@ -38,6 +38,9 @@ constructor(
|
||||||
private val _favorite = MutableLiveData<Boolean>()
|
private val _favorite = MutableLiveData<Boolean>()
|
||||||
val favorite: LiveData<Boolean> = _favorite
|
val favorite: LiveData<Boolean> = _favorite
|
||||||
|
|
||||||
|
private val _navigateToPlayer = MutableLiveData<Boolean>()
|
||||||
|
val navigateToPlayer: LiveData<Boolean> = _navigateToPlayer
|
||||||
|
|
||||||
var playerItems: MutableList<PlayerItem> = mutableListOf()
|
var playerItems: MutableList<PlayerItem> = mutableListOf()
|
||||||
|
|
||||||
fun loadEpisode(episodeId: UUID) {
|
fun loadEpisode(episodeId: UUID) {
|
||||||
|
@ -47,7 +50,6 @@ constructor(
|
||||||
_item.value = item
|
_item.value = item
|
||||||
_runTime.value = "${item.runTimeTicks?.div(600000000)} min"
|
_runTime.value = "${item.runTimeTicks?.div(600000000)} min"
|
||||||
_dateString.value = getDateString(item)
|
_dateString.value = getDateString(item)
|
||||||
createPlayerItems(item)
|
|
||||||
_played.value = item.userData?.played
|
_played.value = item.userData?.played
|
||||||
_favorite.value = item.userData?.isFavorite
|
_favorite.value = item.userData?.isFavorite
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
@ -56,6 +58,13 @@ constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun preparePlayer() {
|
||||||
|
viewModelScope.launch {
|
||||||
|
createPlayerItems(_item.value!!)
|
||||||
|
_navigateToPlayer.value = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private suspend fun createPlayerItems(startEpisode: BaseItemDto) {
|
private suspend fun createPlayerItems(startEpisode: BaseItemDto) {
|
||||||
val episodes = jellyfinRepository.getEpisodes(startEpisode.seriesId!!, startEpisode.seasonId!!, startIndex = startEpisode.indexNumber?.minus(1))
|
val episodes = jellyfinRepository.getEpisodes(startEpisode.seriesId!!, startEpisode.seasonId!!, startIndex = startEpisode.indexNumber?.minus(1))
|
||||||
for (episode in episodes) {
|
for (episode in episodes) {
|
||||||
|
@ -102,4 +111,8 @@ constructor(
|
||||||
item.premiereDate.toString()
|
item.premiereDate.toString()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun doneNavigateToPlayer() {
|
||||||
|
_navigateToPlayer.value = false
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -117,16 +117,31 @@
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/episode_image">
|
app:layout_constraintTop_toBottomOf="@id/episode_image">
|
||||||
|
|
||||||
<ImageButton
|
<RelativeLayout
|
||||||
android:id="@+id/play_button"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginEnd="12dp"
|
android:layout_marginEnd="12dp">
|
||||||
android:background="@drawable/button_setup_background"
|
|
||||||
android:contentDescription="@string/play_button_description"
|
<ImageButton
|
||||||
android:paddingHorizontal="24dp"
|
android:id="@+id/play_button"
|
||||||
android:paddingVertical="12dp"
|
android:layout_width="72dp"
|
||||||
android:src="@drawable/ic_play" />
|
android:layout_height="48dp"
|
||||||
|
android:background="@drawable/button_setup_background"
|
||||||
|
android:contentDescription="@string/play_button_description"
|
||||||
|
android:paddingHorizontal="24dp"
|
||||||
|
android:paddingVertical="12dp"
|
||||||
|
android:src="@drawable/ic_play" />
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progress_circular"
|
||||||
|
android:layout_width="48dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:elevation="8dp"
|
||||||
|
android:padding="8dp"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:indeterminateTint="@color/white"
|
||||||
|
android:visibility="invisible" />
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/check_button"
|
android:id="@+id/check_button"
|
||||||
|
|
Loading…
Reference in a new issue