Kotlin

Gestión de los cambios en el modo PiP

1. Actualizar la interfaz de usuario cuando cambie el modo PiP

Anular onPictureInPictureModeChanged para rastrear el estado PiP y ocultar la vista previa local en la ventana flotante (el vídeo de abonado permanece):

override fun onPictureInPictureModeChanged(
    isInPictureInPictureMode: Boolean,
    newConfig: Configuration,
) {
    super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
    isInPipMode = isInPictureInPictureMode

    if (isInPictureInPictureMode) {
        publisherViewContainer.visibility = View.GONE
        publisher?.view?.visibility = View.GONE
    } else {
        publisherViewContainer.visibility = View.VISIBLE
        publisher?.view?.visibility = View.VISIBLE
        if (publisher?.view is GLSurfaceView) {
            (publisher?.view as GLSurfaceView).setZOrderOnTop(true)
        }
    }
}

Exponga isInPipMode para componer (por ejemplo, con mutableStateOf) para que el botón PiP se oculte automáticamente.

2. Mantener la sesión activa en PiP

Haz no llamada session.onPause() mientras se está en modo PiP, o la llamada podría pausarse cuando el usuario salga de la actividad a pantalla completa:

override fun onPause() {
    super.onPause()
    if (!isInPictureInPictureMode) {
        session?.onPause()
    }
}

override fun onResume() {
    super.onResume()
    if (!isInPictureInPictureMode) {
        session?.onResume()
    }
}

3. Limpiar vistas en onStop

Elimine las vistas de editor y abonado cuando cese la actividad:

override fun onStop() {
    super.onStop()
    subscriber?.let { subscriberViewContainer.removeView(it.view) }
    publisher?.let { publisherViewContainer.removeView(it.view) }
}