Play episodes
This commit is contained in:
parent
e69a653453
commit
5ee1cbf340
3 changed files with 29 additions and 1 deletions
|
@ -6,11 +6,13 @@ import android.view.LayoutInflater
|
|||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.fragment.navArgs
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import dev.jdtech.jellyfin.databinding.EpisodeBottomSheetBinding
|
||||
import dev.jdtech.jellyfin.viewmodels.EpisodeBottomSheetViewModel
|
||||
import java.util.*
|
||||
|
||||
@AndroidEntryPoint
|
||||
class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
|
||||
|
@ -29,11 +31,20 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
|
|||
binding.lifecycleOwner = this
|
||||
binding.viewModel = viewModel
|
||||
|
||||
binding.playButton.setOnClickListener {
|
||||
viewModel.mediaSources.value?.get(0)?.id?.let { mediaSourceId ->
|
||||
navigateToPlayerActivity(args.episodeId,
|
||||
mediaSourceId
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
viewModel.item.observe(viewLifecycleOwner, { episode ->
|
||||
if (episode.userData?.playedPercentage != null) {
|
||||
binding.progressBar.layoutParams.width = TypedValue.applyDimension(
|
||||
TypedValue.COMPLEX_UNIT_DIP,
|
||||
(episode.userData?.playedPercentage?.times(1.26))!!.toFloat(), context?.resources?.displayMetrics
|
||||
(episode.userData?.playedPercentage?.times(1.26))!!.toFloat(),
|
||||
context?.resources?.displayMetrics
|
||||
).toInt()
|
||||
binding.progressBar.visibility = View.VISIBLE
|
||||
}
|
||||
|
@ -43,4 +54,13 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
|
|||
|
||||
return binding.root
|
||||
}
|
||||
|
||||
private fun navigateToPlayerActivity(itemId: UUID, mediaSourceId: String) {
|
||||
findNavController().navigate(
|
||||
EpisodeBottomSheetFragmentDirections.actionEpisodeBottomSheetFragmentToPlayerActivity(
|
||||
itemId,
|
||||
mediaSourceId
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -9,6 +9,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel
|
|||
import dev.jdtech.jellyfin.repository.JellyfinRepository
|
||||
import kotlinx.coroutines.launch
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||
import org.jellyfin.sdk.model.api.MediaSourceInfo
|
||||
import java.text.DateFormat
|
||||
import java.time.ZoneOffset
|
||||
import java.util.*
|
||||
|
@ -30,11 +31,15 @@ constructor(
|
|||
private val _dateString = MutableLiveData<String>()
|
||||
val dateString: LiveData<String> = _dateString
|
||||
|
||||
private val _mediaSources = MutableLiveData<List<MediaSourceInfo>>()
|
||||
val mediaSources: LiveData<List<MediaSourceInfo>> = _mediaSources
|
||||
|
||||
fun loadEpisode(episodeId: UUID) {
|
||||
viewModelScope.launch {
|
||||
_item.value = jellyfinRepository.getItem(episodeId)
|
||||
_runTime.value = "${_item.value?.runTimeTicks?.div(600000000)} min"
|
||||
_dateString.value = getDateString(_item.value!!)
|
||||
_mediaSources.value = jellyfinRepository.getMediaSources(episodeId)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -128,6 +128,9 @@
|
|||
<argument
|
||||
android:name="episodeId"
|
||||
app:argType="java.util.UUID" />
|
||||
<action
|
||||
android:id="@+id/action_episodeBottomSheetFragment_to_playerActivity"
|
||||
app:destination="@id/playerActivity" />
|
||||
</dialog>
|
||||
<activity
|
||||
android:id="@+id/playerActivity"
|
||||
|
|
Loading…
Reference in a new issue