mirror of
https://github.com/zoriya/react-native-video.git
synced 2026-06-07 04:15:57 +00:00
fix(android): catch error when PiP is not supported in activity
This commit is contained in:
+12
@@ -83,4 +83,16 @@ object PictureInPictureUtils {
|
|||||||
|
|
||||||
return visibleRect
|
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.view.ViewGroup
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import android.widget.ImageButton
|
import android.widget.ImageButton
|
||||||
|
import androidx.annotation.RequiresApi
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.media3.common.util.UnstableApi
|
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.PictureInPictureUtils.createPictureInPictureParams
|
||||||
import com.video.core.utils.Threading.runOnMainThread
|
import com.video.core.utils.Threading.runOnMainThread
|
||||||
import com.video.core.extensions.toAspectRatioFrameLayout
|
import com.video.core.extensions.toAspectRatioFrameLayout
|
||||||
|
import com.video.core.utils.PictureInPictureUtils
|
||||||
import com.video.core.utils.PictureInPictureUtils.createDisabledPictureInPictureParams
|
import com.video.core.utils.PictureInPictureUtils.createDisabledPictureInPictureParams
|
||||||
|
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
@@ -65,11 +67,12 @@ class VideoView @JvmOverloads constructor(
|
|||||||
var autoEnterPictureInPicture: Boolean = false
|
var autoEnterPictureInPicture: Boolean = false
|
||||||
set(value) {
|
set(value) {
|
||||||
field = value
|
field = value
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
try {
|
PictureInPictureUtils.safeSetPictureInPictureParams(
|
||||||
val currentActivity = applicationContent.currentActivity
|
if (value) createPictureInPictureParams(this)
|
||||||
currentActivity?.setPictureInPictureParams(createPictureInPictureParams(this))
|
else createDisabledPictureInPictureParams(this)
|
||||||
} catch (_: Exception) {}
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -347,9 +350,9 @@ class VideoView @JvmOverloads constructor(
|
|||||||
VideoManager.unregisterView(this)
|
VideoManager.unregisterView(this)
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
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
|
PictureInPictureUtils.safeSetPictureInPictureParams(
|
||||||
val currentActivity = applicationContent.currentActivity
|
createDisabledPictureInPictureParams(this)
|
||||||
currentActivity?.setPictureInPictureParams(createDisabledPictureInPictureParams(this))
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
super.onDetachedFromWindow()
|
super.onDetachedFromWindow()
|
||||||
|
|||||||
Reference in New Issue
Block a user