From 7e07cbd12a4512e9cfce994ae9d0f4e172c8878c Mon Sep 17 00:00:00 2001 From: parneet-guraya Date: Thu, 24 Aug 2023 17:15:14 +0530 Subject: [PATCH 1/2] make player reference null after releasing Signed-off-by: parneet-guraya --- .../activities/FullScreenMediaActivity.kt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/FullScreenMediaActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/FullScreenMediaActivity.kt index b393d1abe..51d3f6f9e 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/FullScreenMediaActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/FullScreenMediaActivity.kt @@ -51,7 +51,7 @@ class FullScreenMediaActivity : AppCompatActivity(), Player.Listener { lateinit var binding: ActivityFullScreenMediaBinding private lateinit var path: String - private lateinit var player: ExoPlayer + private var player: ExoPlayer? = null override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_preview, menu) @@ -124,9 +124,11 @@ class FullScreenMediaActivity : AppCompatActivity(), Player.Listener { initializePlayer() val mediaItem: MediaItem = MediaItem.fromUri(path) - player.setMediaItem(mediaItem) - player.prepare() - player.play() + player?.let { exoPlayer -> + exoPlayer.setMediaItem(mediaItem) + exoPlayer.prepare() + exoPlayer.play() + } } override fun onStop() { @@ -137,12 +139,15 @@ class FullScreenMediaActivity : AppCompatActivity(), Player.Listener { private fun initializePlayer() { player = ExoPlayer.Builder(applicationContext).build() binding.playerView.player = player - player.playWhenReady = true - player.addListener(this) + player?.let { exoPlayer -> + exoPlayer.playWhenReady = true + exoPlayer.addListener(this) + } } private fun releasePlayer() { - player.release() + player?.release() + player = null } private fun hideSystemUI() { From 3b557be58fad6b9bc51115c38ce4f73a372c3e04 Mon Sep 17 00:00:00 2001 From: parneet-guraya Date: Thu, 24 Aug 2023 23:39:07 +0530 Subject: [PATCH 2/2] save media playback state Signed-off-by: parneet-guraya --- .../activities/FullScreenMediaActivity.kt | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/FullScreenMediaActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/FullScreenMediaActivity.kt index 51d3f6f9e..c9b4711f5 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/FullScreenMediaActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/FullScreenMediaActivity.kt @@ -4,9 +4,11 @@ * @author Marcel Hibbe * @author Andy Scherzinger * @author Ezhil Shanmugham + * @author Parneet Singh * Copyright (C) 2021 Andy Scherzinger * Copyright (C) 2021 Marcel Hibbe * Copyright (C) 2023 Ezhil Shanmugham + * Copyright (c) 2023 Parneet Singh * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -53,6 +55,9 @@ class FullScreenMediaActivity : AppCompatActivity(), Player.Listener { private lateinit var path: String private var player: ExoPlayer? = null + private var playWhenReadyState: Boolean = true + private var playBackPosition: Long = 0L + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_preview, menu) return true @@ -122,13 +127,7 @@ class FullScreenMediaActivity : AppCompatActivity(), Player.Listener { override fun onStart() { super.onStart() initializePlayer() - - val mediaItem: MediaItem = MediaItem.fromUri(path) - player?.let { exoPlayer -> - exoPlayer.setMediaItem(mediaItem) - exoPlayer.prepare() - exoPlayer.play() - } + preparePlayer() } override fun onStop() { @@ -139,14 +138,25 @@ class FullScreenMediaActivity : AppCompatActivity(), Player.Listener { private fun initializePlayer() { player = ExoPlayer.Builder(applicationContext).build() binding.playerView.player = player + player?.addListener(this) + } + + private fun preparePlayer() { + val mediaItem: MediaItem = MediaItem.fromUri(path) player?.let { exoPlayer -> - exoPlayer.playWhenReady = true - exoPlayer.addListener(this) + exoPlayer.setMediaItem(mediaItem) + exoPlayer.playWhenReady = playWhenReadyState + exoPlayer.seekTo(playBackPosition) + exoPlayer.prepare() } } private fun releasePlayer() { - player?.release() + player?.let { exoPlayer -> + playBackPosition = exoPlayer.currentPosition + playWhenReadyState = exoPlayer.playWhenReady + exoPlayer.release() + } player = null }