From b3ce43c614ae75a44b9dc87f043926d35cfdeef9 Mon Sep 17 00:00:00 2001 From: Jannik Date: Sun, 27 Dec 2020 20:31:18 +0100 Subject: [PATCH] release player in PlayerVIewModel onCleared() this fixes playback after the activity has been destroyed, while being in background --- .../main/java/org/mosad/teapod/player/PlayerActivity.kt | 5 ++--- .../main/java/org/mosad/teapod/player/PlayerViewModel.kt | 8 ++++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt b/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt index 45f6fc9..32a336d 100644 --- a/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt +++ b/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt @@ -118,6 +118,7 @@ class PlayerActivity : AppCompatActivity() { initTimeUpdates() } + // TODO if view model was not destroyed, don't start a new media private fun initExoPlayer() { controller = video_view.findViewById(R.id.exo_controller) controller.isAnimationEnabled = false // disable controls (time-bar) animation @@ -222,10 +223,8 @@ class PlayerActivity : AppCompatActivity() { playbackPosition = model.player.currentPosition currentWindow = model.player.currentWindowIndex playWhenReady = model.player.playWhenReady - model.player.release() + model.player.pause() timerUpdates.cancel() - - Log.d(javaClass.name, "Released player") } /** diff --git a/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt b/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt index 2f46238..99832d1 100644 --- a/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt +++ b/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt @@ -2,6 +2,7 @@ package org.mosad.teapod.player import android.app.Application import android.net.Uri +import android.util.Log import androidx.lifecycle.AndroidViewModel import com.google.android.exoplayer2.C import com.google.android.exoplayer2.MediaItem @@ -42,6 +43,13 @@ class PlayerViewModel(application: Application) : AndroidViewModel(application) var currentLanguage: Locale = Locale.ROOT internal set + override fun onCleared() { + super.onCleared() + player.release() + + Log.d(javaClass.name, "Released player") + } + fun loadMedia(mediaId: Int, episodeId: Int) { runBlocking { media = AoDParser.getMediaById(mediaId)