Load episodes mediasources when play button pressed in EpisodeBottomSheet

This commit is contained in:
jarnedemeulemeester 2021-08-06 15:15:01 +02:00
parent d67f195789
commit 10e89a2df5
No known key found for this signature in database
GPG key ID: 60884A0C1EBA43E5
3 changed files with 53 additions and 14 deletions

View file

@ -5,6 +5,7 @@ import android.util.TypedValue
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
@ -14,7 +15,6 @@ import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.databinding.EpisodeBottomSheetBinding
import dev.jdtech.jellyfin.models.PlayerItem
import dev.jdtech.jellyfin.viewmodels.EpisodeBottomSheetViewModel
import java.util.*
@AndroidEntryPoint
class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
@ -34,10 +34,9 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
binding.viewModel = viewModel
binding.playButton.setOnClickListener {
navigateToPlayerActivity(
viewModel.playerItems.toTypedArray(),
viewModel.item.value!!.userData!!.playbackPositionTicks.div(10000)
)
binding.playButton.setImageResource(android.R.color.transparent)
binding.progressCircular.visibility = View.VISIBLE
viewModel.preparePlayer()
}
binding.checkButton.setOnClickListener {
@ -87,6 +86,18 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
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)
return binding.root

View file

@ -38,6 +38,9 @@ constructor(
private val _favorite = MutableLiveData<Boolean>()
val favorite: LiveData<Boolean> = _favorite
private val _navigateToPlayer = MutableLiveData<Boolean>()
val navigateToPlayer: LiveData<Boolean> = _navigateToPlayer
var playerItems: MutableList<PlayerItem> = mutableListOf()
fun loadEpisode(episodeId: UUID) {
@ -47,7 +50,6 @@ constructor(
_item.value = item
_runTime.value = "${item.runTimeTicks?.div(600000000)} min"
_dateString.value = getDateString(item)
createPlayerItems(item)
_played.value = item.userData?.played
_favorite.value = item.userData?.isFavorite
} catch (e: Exception) {
@ -56,6 +58,13 @@ constructor(
}
}
fun preparePlayer() {
viewModelScope.launch {
createPlayerItems(_item.value!!)
_navigateToPlayer.value = true
}
}
private suspend fun createPlayerItems(startEpisode: BaseItemDto) {
val episodes = jellyfinRepository.getEpisodes(startEpisode.seriesId!!, startEpisode.seasonId!!, startIndex = startEpisode.indexNumber?.minus(1))
for (episode in episodes) {
@ -102,4 +111,8 @@ constructor(
item.premiereDate.toString()
}
}
fun doneNavigateToPlayer() {
_navigateToPlayer.value = false
}
}

View file

@ -117,16 +117,31 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/episode_image">
<ImageButton
android:id="@+id/play_button"
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
android:background="@drawable/button_setup_background"
android:contentDescription="@string/play_button_description"
android:paddingHorizontal="24dp"
android:paddingVertical="12dp"
android:src="@drawable/ic_play" />
android:layout_marginEnd="12dp">
<ImageButton
android:id="@+id/play_button"
android:layout_width="72dp"
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
android:id="@+id/check_button"