Compare commits

..
2 Commits
Author SHA1 Message Date
zoriya 77c3a519e7 fix(android): fix crash at init 2026-08-04 14:42:27 +02:00
zoriya 9fea0949bd fix(pip): handle two autoPip views 2026-08-04 09:47:10 +02:00
3 changed files with 17 additions and 15 deletions
@@ -100,7 +100,6 @@ class OmniPlayer(
.setRemotePlayer(remote) .setRemotePlayer(remote)
.build() .build()
} }
eventMap.player = active
active active
} }
@@ -227,13 +226,15 @@ class OmniPlayer(
.build() .build()
} }
fun setVideoView(surfaceView: android.view.SurfaceView?) { fun setVideoView(surfaceView: android.view.SurfaceView) {
runOnMainThread { runOnMainThread {
if (surfaceView == null) { localPlayer.setVideoSurfaceView(surfaceView)
localPlayer.clearVideoSurface() }
} else { }
localPlayer.setVideoSurfaceView(surfaceView)
} fun clearVideoView(surfaceView: android.view.SurfaceView) {
runOnMainThread {
localPlayer.clearVideoSurfaceView(surfaceView)
} }
} }
@@ -335,6 +336,10 @@ class OmniPlayer(
} }
} }
init {
runOnMainThreadSync { eventMap.player = player }
}
override var source: Source? = null override var source: Source? = null
set(value) { set(value) {
field = value field = value
@@ -154,15 +154,11 @@ class OmniView(val context: ThemedReactContext) :
val curPip = activeView.get() val curPip = activeView.get()
when { when {
autoPip == true && curPip == this -> {} autoPip == true && curPip == this -> {}
autoPip == true && curPip == null -> { autoPip == true -> {
activeView = WeakReference(this) activeView = WeakReference(this)
updatePictureInPictureParams() updatePictureInPictureParams()
} }
autoPip == true -> {
throw Error("Only one OmniView can have `autoPip` set at a time.")
}
autoPip == false && curPip == this -> { autoPip == false && curPip == this -> {
activeView = WeakReference(null) activeView = WeakReference(null)
clearPictureInPictureParams() clearPictureInPictureParams()
@@ -180,7 +176,7 @@ class OmniView(val context: ThemedReactContext) :
} }
boundPlayer?.localPlayer?.removeListener(this) boundPlayer?.localPlayer?.removeListener(this)
boundPlayer?.setVideoView(null) boundPlayer?.clearVideoView(surfaceView)
boundPlayer = omniPlayer boundPlayer = omniPlayer
omniPlayer.localPlayer.addListener(this) omniPlayer.localPlayer.addListener(this)
@@ -206,7 +202,7 @@ class OmniView(val context: ThemedReactContext) :
val omniPlayer = player as? OmniPlayer ?: return val omniPlayer = player as? OmniPlayer ?: return
boundPlayer?.localPlayer?.removeListener(this) boundPlayer?.localPlayer?.removeListener(this)
omniPlayer.setVideoView(null) omniPlayer.clearVideoView(surfaceView)
boundPlayer = null boundPlayer = null
} }
@@ -414,6 +410,6 @@ class OmniView(val context: ThemedReactContext) :
override fun surfaceDestroyed(holder: SurfaceHolder) { override fun surfaceDestroyed(holder: SurfaceHolder) {
surfaceReady = false surfaceReady = false
surfaceView.removeCallbacks(rebuildRunnable) surfaceView.removeCallbacks(rebuildRunnable)
boundPlayer?.setVideoView(null) boundPlayer?.clearVideoView(surfaceView)
} }
} }
@@ -894,6 +894,7 @@ class VlcPlayer(ctx: Context) :
} }
override fun clearVideoSurfaceView(surfaceView: SurfaceView?) { override fun clearVideoSurfaceView(surfaceView: SurfaceView?) {
if (surfaceView != null && boundSurfaceView !== surfaceView) return
clearVideoSurface() clearVideoSurface()
} }