From 32a0a741c2ee85ee64434f3ab796a5aa1a3b0eb4 Mon Sep 17 00:00:00 2001 From: Duncan McNamara <dcn.mcnamara@gmail.com> Date: Wed, 19 Mar 2025 13:37:09 +0100 Subject: [PATCH] APContainer: fix AP not showing after screen off When playing a video with "Play in background" enabled, if the screen is switched off, the player will switch to audio, triggering a ACTION_SHOW_PLAYER scheduled with a 100L delay that has been there since java. Because the screen is switched off, onPause is called, triggering a cancellation of ACTION_SHOW_PLAYER in the LifecyleAwareScheduler, before it can execute it. To ensure ACTION_SHOW_PLAYER is executed when switching the screen back on, a flag is set and checked in onResume to call showAudioPlayerImpl --- .../org/videolan/vlc/gui/AudioPlayerContainerActivity.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/application/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.kt index 152a63ce61..f3a93fb394 100644 --- a/application/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.kt +++ b/application/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.kt @@ -105,6 +105,7 @@ open class AudioPlayerContainerActivity : BaseActivity(), KeycodeListener, Sched private var scanProgressBar: ProgressBar? = null private lateinit var resumeCard: Snackbar private var preventRescan = false + private var showAudioPlayerWhenResumed = false private var playerShown = false val tipsDelegate: AudioTipsDelegate by lazy(LazyThreadSafetyMode.NONE) { AudioTipsDelegate(this) } @@ -511,6 +512,8 @@ open class AudioPlayerContainerActivity : BaseActivity(), KeycodeListener, Sched else applyMarginToProgressBar(0) setContentBottomPadding() + if (showAudioPlayerWhenResumed) + showAudioPlayerImpl() super.onResume() } @@ -588,10 +591,14 @@ open class AudioPlayerContainerActivity : BaseActivity(), KeycodeListener, Sched private fun showAudioPlayer() { if (isFinishing) return scheduler.scheduleAction(ACTION_SHOW_PLAYER, 100L) + // due to the 100L delay when scheduling ACTION_SHOW_PLAYER + // if switching screen off, it can be canceled, this ensures that onResume the player is shown + showAudioPlayerWhenResumed = true } private fun showAudioPlayerImpl() { if (isFinishing) return + showAudioPlayerWhenResumed = false if (!isAudioPlayerReady) initAudioPlayer() if (audioPlayerContainer.visibility != View.VISIBLE) { audioPlayerContainer.visibility = View.VISIBLE -- GitLab