mirror of
https://github.com/zoriya/react-native-omni.git
synced 2026-08-05 05:36:17 +00:00
fix(pip): prevent pip without a view mounted
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user