From be8402fb37b1b0ff3c6ca4a9ce000dd3dc8e4922 Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Mon, 12 Jul 2021 13:26:51 +0200 Subject: [PATCH] Set starting playback position --- .../dev/jdtech/jellyfin/PlayerActivity.kt | 2 +- .../fragments/EpisodeBottomSheetFragment.kt | 8 +++--- .../jellyfin/fragments/MediaInfoFragment.kt | 20 +++++++++++--- .../viewmodels/PlayerActivityViewModel.kt | 27 +++++++++---------- .../main/res/navigation/main_navigation.xml | 3 +++ 5 files changed, 37 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt b/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt index 3cdcf33c..ddd48bc9 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt @@ -34,7 +34,7 @@ class PlayerActivity : AppCompatActivity() { }) if (viewModel.player.value == null) { - viewModel.initializePlayer(args.itemId, args.mediaSourceId) + viewModel.initializePlayer(args.itemId, args.mediaSourceId, args.playbackPosition) } hideSystemUI() } 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 9179f586..cadba184 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt @@ -34,7 +34,8 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() { binding.playButton.setOnClickListener { viewModel.mediaSources.value?.get(0)?.id?.let { mediaSourceId -> navigateToPlayerActivity(args.episodeId, - mediaSourceId + mediaSourceId, + viewModel.item.value!!.userData!!.playbackPositionTicks.div(10000) ) } } @@ -55,11 +56,12 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() { return binding.root } - private fun navigateToPlayerActivity(itemId: UUID, mediaSourceId: String) { + private fun navigateToPlayerActivity(itemId: UUID, mediaSourceId: String, playbackPosition: Long) { findNavController().navigate( EpisodeBottomSheetFragmentDirections.actionEpisodeBottomSheetFragmentToPlayerActivity( itemId, - mediaSourceId + mediaSourceId, + playbackPosition ) ) } diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt index 169a8870..7e5608c9 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt @@ -55,7 +55,13 @@ class MediaInfoFragment : Fragment() { }) viewModel.navigateToPlayer.observe(viewLifecycleOwner, { mediaSource -> - mediaSource.id?.let { navigateToPlayerActivity(args.itemId, it) } + mediaSource.id?.let { + navigateToPlayerActivity( + args.itemId, + it, + viewModel.item.value!!.userData!!.playbackPositionTicks.div(10000) + ) + } }) binding.trailerButton.setOnClickListener { @@ -87,7 +93,8 @@ class MediaInfoFragment : Fragment() { } else { navigateToPlayerActivity( args.itemId, - viewModel.mediaSources.value!![0].id!! + viewModel.mediaSources.value!![0].id!!, + viewModel.item.value!!.userData!!.playbackPositionTicks.div(10000) ) } } @@ -116,11 +123,16 @@ class MediaInfoFragment : Fragment() { ) } - private fun navigateToPlayerActivity(itemId: UUID, mediaSourceId: String) { + private fun navigateToPlayerActivity( + itemId: UUID, + mediaSourceId: String, + playbackPosition: Long + ) { findNavController().navigate( MediaInfoFragmentDirections.actionMediaInfoFragmentToPlayerActivity( itemId, - mediaSourceId + mediaSourceId, + playbackPosition ) ) } diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt index e2d54c37..6c775a01 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt @@ -7,7 +7,6 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.google.android.exoplayer2.* -import com.google.android.exoplayer2.trackselection.DefaultTrackSelector import dagger.hilt.android.lifecycle.HiltViewModel import dev.jdtech.jellyfin.repository.JellyfinRepository import kotlinx.coroutines.launch @@ -33,31 +32,29 @@ constructor( playbackStateListener = PlaybackStateListener() } - fun initializePlayer(itemId: UUID, mediaSourceId: String) { - if (player.value == null) { - val trackSelector = DefaultTrackSelector(application) - val renderersFactory = DefaultRenderersFactory(application).setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON) - trackSelector.parameters.buildUpon().setMaxVideoSizeSd() - _player.value = SimpleExoPlayer.Builder(application, renderersFactory) - .setTrackSelector(trackSelector) - .build() - } + fun initializePlayer(itemId: UUID, mediaSourceId: String, playbackPosition: Long) { + val renderersFactory = + DefaultRenderersFactory(application).setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON) + val player = SimpleExoPlayer.Builder(application, renderersFactory) + .build() - player.value?.addListener(playbackStateListener) + player.addListener(playbackStateListener) viewModelScope.launch { val streamUrl = jellyfinRepository.getStreamUrl(itemId, mediaSourceId) + Log.d("PlayerActivity", streamUrl) val mediaItem = MediaItem.Builder() .setMediaId(itemId.toString()) .setUri(streamUrl) .build() - player.value?.setMediaItem(mediaItem) + player.setMediaItem(mediaItem, playbackPosition) } - player.value?.playWhenReady = playWhenReady - player.value?.seekTo(currentWindow, playbackPosition) - player.value?.prepare() + player.playWhenReady = playWhenReady + player.prepare() + + _player.value = player } private fun releasePlayer() { diff --git a/app/src/main/res/navigation/main_navigation.xml b/app/src/main/res/navigation/main_navigation.xml index 2e86b148..afedf67f 100644 --- a/app/src/main/res/navigation/main_navigation.xml +++ b/app/src/main/res/navigation/main_navigation.xml @@ -143,5 +143,8 @@ + \ No newline at end of file