fix(android): catch error when PiP is not supported in activity

This commit is contained in:
Krzysztof Moch
2025-06-25 08:35:58 +02:00
parent f9b241bfba
commit cde3fdb9a4
2 changed files with 22 additions and 7 deletions
@@ -83,4 +83,16 @@ object PictureInPictureUtils {
return visibleRect
}
fun safeSetPictureInPictureParams(params: PictureInPictureParams) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
try {
val currentActivity = NitroModules.applicationContext?.currentActivity
currentActivity?.setPictureInPictureParams(params)
} catch (_: Exception) {
// Ignore: We cannot check if user has added support for PIP in manifest
// so we need to catch error if he did not add it.
}
}
}
}
@@ -11,6 +11,7 @@ import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ImageButton
import androidx.annotation.RequiresApi
import androidx.core.view.isVisible
import androidx.fragment.app.FragmentActivity
import androidx.media3.common.util.UnstableApi
@@ -29,6 +30,7 @@ import com.video.core.utils.PictureInPictureUtils.canEnterPictureInPicture
import com.video.core.utils.PictureInPictureUtils.createPictureInPictureParams
import com.video.core.utils.Threading.runOnMainThread
import com.video.core.extensions.toAspectRatioFrameLayout
import com.video.core.utils.PictureInPictureUtils
import com.video.core.utils.PictureInPictureUtils.createDisabledPictureInPictureParams
@UnstableApi
@@ -65,11 +67,12 @@ class VideoView @JvmOverloads constructor(
var autoEnterPictureInPicture: Boolean = false
set(value) {
field = value
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
try {
val currentActivity = applicationContent.currentActivity
currentActivity?.setPictureInPictureParams(createPictureInPictureParams(this))
} catch (_: Exception) {}
PictureInPictureUtils.safeSetPictureInPictureParams(
if (value) createPictureInPictureParams(this)
else createDisabledPictureInPictureParams(this)
)
}
}
@@ -347,9 +350,9 @@ class VideoView @JvmOverloads constructor(
VideoManager.unregisterView(this)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// We don't want activity to go to PiP Mode when video view is not presented
val currentActivity = applicationContent.currentActivity
currentActivity?.setPictureInPictureParams(createDisabledPictureInPictureParams(this))
PictureInPictureUtils.safeSetPictureInPictureParams(
createDisabledPictureInPictureParams(this)
)
}
super.onDetachedFromWindow()