From df5772d40b3a0e34dd33aecd0dcbf2c3d59c302a Mon Sep 17 00:00:00 2001 From: Saif Shaikh Date: Sat, 10 Jan 2026 08:10:20 -0800 Subject: [PATCH] fix: issue #301 --- .../main/java/com/nuvio/app/mpv/MPVView.kt | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/android/app/src/main/java/com/nuvio/app/mpv/MPVView.kt b/android/app/src/main/java/com/nuvio/app/mpv/MPVView.kt index f49a22c9..f2f9cd4f 100644 --- a/android/app/src/main/java/com/nuvio/app/mpv/MPVView.kt +++ b/android/app/src/main/java/com/nuvio/app/mpv/MPVView.kt @@ -8,6 +8,9 @@ import android.view.Surface import android.view.TextureView import dev.jdtech.mpv.MPVLib +import com.facebook.react.bridge.LifecycleEventListener +import com.facebook.react.bridge.ReactContext + class MPVView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, @@ -40,9 +43,27 @@ class MPVView @JvmOverloads constructor( var onErrorCallback: ((message: String) -> Unit)? = null var onTracksChangedCallback: ((audioTracks: List>, subtitleTracks: List>) -> Unit)? = null + private var resumeOnForeground = false + private val lifeCycleListener = object : LifecycleEventListener { + override fun onHostPause() { + resumeOnForeground = !isPaused; + if(resumeOnForeground) { + Log.d(TAG, "App backgrounded — pausing MPV") + setPaused(true) + } + } + override fun onHostResume() { + if(resumeOnForeground) { + setPaused(false) + resumeOnForeground = false + } + } + override fun onHostDestroy() {} + } init { surfaceTextureListener = this isOpaque = false + (context as? ReactContext)?.addLifecycleEventListener(lifeCycleListener) } override fun onSurfaceTextureAvailable(surfaceTexture: SurfaceTexture, width: Int, height: Int) { @@ -80,6 +101,7 @@ class MPVView @JvmOverloads constructor( override fun onSurfaceTextureDestroyed(surfaceTexture: SurfaceTexture): Boolean { Log.d(TAG, "Surface texture destroyed") + (context as? ReactContext)?.removeLifecycleEventListener(lifeCycleListener) if (isMpvInitialized) { MPVLib.removeObserver(this) MPVLib.detachSurface()