Clean up player code

This commit is contained in:
jarnedemeulemeester 2021-09-05 18:34:07 +02:00
parent 70d0d62318
commit 88b5d38ffc
No known key found for this signature in database
GPG key ID: B61B7B150DB6A6D2
3 changed files with 28 additions and 38 deletions

View file

@ -6,30 +6,25 @@ import android.view.View
import android.view.WindowManager
import androidx.activity.viewModels
import androidx.navigation.navArgs
import com.google.android.exoplayer2.ui.StyledPlayerView
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.databinding.ActivityPlayerBinding
import dev.jdtech.jellyfin.viewmodels.PlayerActivityViewModel
import timber.log.Timber
@AndroidEntryPoint
class PlayerActivity : AppCompatActivity() {
private lateinit var binding: ActivityPlayerBinding
private val viewModel: PlayerActivityViewModel by viewModels()
private val args: PlayerActivityArgs by navArgs()
private lateinit var playerView: StyledPlayerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Timber.d("Creating player activity")
setContentView(R.layout.activity_player)
binding = ActivityPlayerBinding.inflate(layoutInflater)
setContentView(binding.root)
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
playerView = findViewById(R.id.video_view)
viewModel.player.observe(this, {
playerView.player = it
})
binding.playerView.player = viewModel.player
viewModel.navigateBack.observe(this, {
if (it) {
@ -37,21 +32,19 @@ class PlayerActivity : AppCompatActivity() {
}
})
if (viewModel.player.value == null) {
viewModel.initializePlayer(args.items)
}
viewModel.initializePlayer(args.items)
hideSystemUI()
}
override fun onPause() {
super.onPause()
viewModel.playWhenReady = viewModel.player.value?.playWhenReady == true
playerView.player?.playWhenReady = false
viewModel.playWhenReady = viewModel.player.playWhenReady == true
viewModel.player.playWhenReady = false
}
override fun onResume() {
super.onResume()
viewModel.player.value?.playWhenReady = viewModel.playWhenReady
viewModel.player.playWhenReady = viewModel.playWhenReady
hideSystemUI()
}

View file

@ -23,11 +23,10 @@ import javax.inject.Inject
class PlayerActivityViewModel
@Inject
constructor(
private val application: Application,
application: Application,
private val jellyfinRepository: JellyfinRepository
) : ViewModel(), Player.Listener {
private var _player = MutableLiveData<SimpleExoPlayer>()
var player: LiveData<SimpleExoPlayer> = _player
var player: SimpleExoPlayer
private val _navigateBack = MutableLiveData<Boolean>()
val navigateBack: LiveData<Boolean> = _navigateBack
@ -38,10 +37,7 @@ constructor(
private val sp = PreferenceManager.getDefaultSharedPreferences(application)
fun initializePlayer(
items: Array<PlayerItem>
) {
init {
val renderersFactory =
DefaultRenderersFactory(application).setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON)
val trackSelector = DefaultTrackSelector(application)
@ -51,10 +47,14 @@ constructor(
.setPreferredAudioLanguage(sp.getString("audio_language", null))
.setPreferredTextLanguage(sp.getString("subtitle_language", null))
)
val player = SimpleExoPlayer.Builder(application, renderersFactory)
player = SimpleExoPlayer.Builder(application, renderersFactory)
.setTrackSelector(trackSelector)
.build()
}
fun initializePlayer(
items: Array<PlayerItem>
) {
player.addListener(this)
viewModelScope.launch {
@ -78,14 +78,13 @@ constructor(
player.setMediaItems(mediaItems, currentWindow, items[0].playbackPosition)
player.playWhenReady = playWhenReady
player.prepare()
_player.value = player
}
pollPosition(player)
}
private fun releasePlayer() {
_player.value?.let { player ->
player.let { player ->
runBlocking {
try {
jellyfinRepository.postPlaybackStop(
@ -98,14 +97,11 @@ constructor(
}
}
if (player.value != null) {
playWhenReady = player.value!!.playWhenReady
playbackPosition = player.value!!.currentPosition
currentWindow = player.value!!.currentWindowIndex
player.value!!.removeListener(this)
player.value!!.release()
_player.value = null
}
playWhenReady = player.playWhenReady
playbackPosition = player.currentPosition
currentWindow = player.currentWindowIndex
player.removeListener(this)
player.release()
}
private fun pollPosition(player: SimpleExoPlayer) {

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
@ -7,10 +7,11 @@
tools:context=".PlayerActivity">
<com.google.android.exoplayer2.ui.StyledPlayerView
android:id="@+id/video_view"
android:id="@+id/player_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
app:show_subtitle_button="true" />
app:show_subtitle_button="true"
app:show_buffering="always"/>
</merge>
</FrameLayout>