fix(pip): prevent pip without a view mounted

This commit is contained in:
2026-07-26 21:07:00 +02:00
parent dc0627afb4
commit 074b821e06
@@ -125,6 +125,7 @@ class OmniView(val context: ThemedReactContext) :
autoPip == false && curPip == this -> {
activeView = WeakReference(null)
clearPictureInPictureParams()
}
}
@@ -156,6 +157,7 @@ class OmniView(val context: ThemedReactContext) :
restoreUiAfterPip()
if (activeView.get() == this) {
activeView = WeakReference(null)
clearPictureInPictureParams()
}
surfaceView.removeOnLayoutChangeListener(this)
context.removeLifecycleEventListener(this)
@@ -222,6 +224,21 @@ class OmniView(val context: ThemedReactContext) :
activity.setPictureInPictureParams(buildPipParams(autoEnterEnabled))
}
private fun clearPictureInPictureParams() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
return
}
val activity = context.currentActivity ?: return
if (activity.isFinishing || activity.isDestroyed) {
return
}
activity.setPictureInPictureParams(
PictureInPictureParams.Builder()
.setAutoEnterEnabled(false)
.build()
)
}
private fun buildPipParams(autoEnterEnabled: Boolean): PictureInPictureParams {
val aspectRatio = if (surfaceView.width > 0 && surfaceView.height > 0) {
Rational(surfaceView.width, surfaceView.height)