From 9fea0949bdaea8546a79cd672e3543b51857a347 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Mon, 3 Aug 2026 22:35:00 +0000 Subject: [PATCH] fix(pip): handle two autoPip views --- .../src/main/java/dev/zoriya/omni/OmniPlayer.kt | 14 ++++++++------ android/src/main/java/dev/zoriya/omni/OmniView.kt | 12 ++++-------- android/src/main/java/dev/zoriya/omni/VlcPlayer.kt | 1 + 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/android/src/main/java/dev/zoriya/omni/OmniPlayer.kt b/android/src/main/java/dev/zoriya/omni/OmniPlayer.kt index 88016ec..7da8804 100644 --- a/android/src/main/java/dev/zoriya/omni/OmniPlayer.kt +++ b/android/src/main/java/dev/zoriya/omni/OmniPlayer.kt @@ -227,13 +227,15 @@ class OmniPlayer( .build() } - fun setVideoView(surfaceView: android.view.SurfaceView?) { + fun setVideoView(surfaceView: android.view.SurfaceView) { runOnMainThread { - if (surfaceView == null) { - localPlayer.clearVideoSurface() - } else { - localPlayer.setVideoSurfaceView(surfaceView) - } + localPlayer.setVideoSurfaceView(surfaceView) + } + } + + fun clearVideoView(surfaceView: android.view.SurfaceView) { + runOnMainThread { + localPlayer.clearVideoSurfaceView(surfaceView) } } diff --git a/android/src/main/java/dev/zoriya/omni/OmniView.kt b/android/src/main/java/dev/zoriya/omni/OmniView.kt index ebd514a..7dff6b0 100755 --- a/android/src/main/java/dev/zoriya/omni/OmniView.kt +++ b/android/src/main/java/dev/zoriya/omni/OmniView.kt @@ -154,15 +154,11 @@ class OmniView(val context: ThemedReactContext) : val curPip = activeView.get() when { autoPip == true && curPip == this -> {} - autoPip == true && curPip == null -> { + autoPip == true -> { activeView = WeakReference(this) updatePictureInPictureParams() } - autoPip == true -> { - throw Error("Only one OmniView can have `autoPip` set at a time.") - } - autoPip == false && curPip == this -> { activeView = WeakReference(null) clearPictureInPictureParams() @@ -180,7 +176,7 @@ class OmniView(val context: ThemedReactContext) : } boundPlayer?.localPlayer?.removeListener(this) - boundPlayer?.setVideoView(null) + boundPlayer?.clearVideoView(surfaceView) boundPlayer = omniPlayer omniPlayer.localPlayer.addListener(this) @@ -206,7 +202,7 @@ class OmniView(val context: ThemedReactContext) : val omniPlayer = player as? OmniPlayer ?: return boundPlayer?.localPlayer?.removeListener(this) - omniPlayer.setVideoView(null) + omniPlayer.clearVideoView(surfaceView) boundPlayer = null } @@ -414,6 +410,6 @@ class OmniView(val context: ThemedReactContext) : override fun surfaceDestroyed(holder: SurfaceHolder) { surfaceReady = false surfaceView.removeCallbacks(rebuildRunnable) - boundPlayer?.setVideoView(null) + boundPlayer?.clearVideoView(surfaceView) } } diff --git a/android/src/main/java/dev/zoriya/omni/VlcPlayer.kt b/android/src/main/java/dev/zoriya/omni/VlcPlayer.kt index 4260ae2..88d86d2 100644 --- a/android/src/main/java/dev/zoriya/omni/VlcPlayer.kt +++ b/android/src/main/java/dev/zoriya/omni/VlcPlayer.kt @@ -894,6 +894,7 @@ class VlcPlayer(ctx: Context) : } override fun clearVideoSurfaceView(surfaceView: SurfaceView?) { + if (surfaceView != null && boundSurfaceView !== surfaceView) return clearVideoSurface() }