diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt index d6de7156..a2d16682 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt @@ -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 diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt index ab089019..4f3f4de4 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt @@ -38,6 +38,9 @@ constructor( private val _favorite = MutableLiveData() val favorite: LiveData = _favorite + private val _navigateToPlayer = MutableLiveData() + val navigateToPlayer: LiveData = _navigateToPlayer + var playerItems: MutableList = 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 + } } \ No newline at end of file diff --git a/app/src/main/res/layout/episode_bottom_sheet.xml b/app/src/main/res/layout/episode_bottom_sheet.xml index d30a0628..a41747ef 100644 --- a/app/src/main/res/layout/episode_bottom_sheet.xml +++ b/app/src/main/res/layout/episode_bottom_sheet.xml @@ -117,16 +117,31 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/episode_image"> - + android:layout_marginEnd="12dp"> + + + + +