1.9.0

Picture-in-picture (PiP) mode for Android has been revamped!

🔨 What changed?

Android 12+ now uses the setAutoEnterEnabled API instead of relying on onUserHint, providing smoother transitions on newer Android versions.

💡 How to migrate?

Review our PiP setup documentation for Android.

🚨 Breaking Changes

  • The onPictureInPictureModeChanged method now requires a screen configuration parameter:
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {  
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration) { 
    super.onPictureInPictureModeChanged(isInPictureInPictureMode)
    if (isFinishing) { 
        return
    } 
    if (lifecycle.currentState == Lifecycle.State.CREATED) {
        // when user clicks on Close button of PIP
        finishAndRemoveTask()
    } else {
        StreamVideoReactNative.onPictureInPictureModeChanged(isInPictureInPictureMode) 
        StreamVideoReactNative.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig) 
    }
}
  • The onUserLeaveHint method implementation is now simpler:
public override fun onUserLeaveHint() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && StreamVideoReactNative.canAutoEnterPictureInPictureMode) { 
        val builder = PictureInPictureParams.Builder() 
        builder.setAspectRatio(Rational(480, 640)) 
        enterPictureInPictureMode(builder.build()) 
override fun onUserLeaveHint() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && Build.VERSION.SDK_INT < Build.VERSION_CODES.S && StreamVideoReactNative.canAutoEnterPictureInPictureMode) { 
        val config = resources.configuration 
        onPictureInPictureModeChanged(true,  config) 
    }
}
  • The Expo config plugin for Android PiP has changed:
androidPictureInPicture: { 
        enableAutomaticEnter: true, 
    }, 
    androidPictureInPicture: true,