Kotlin

Gestion des changements de mode PiP

1. Mettre à jour l'interface utilisateur lorsque le mode PiP est modifié

Annulation onPictureInPictureModeChanged pour suivre l'état PiP et masquer l'aperçu local dans la fenêtre flottante (la vidéo de l'abonné est conservée) :

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)
        }
    }
}

Exposer isInPipMode à composer (par exemple avec mutableStateOf), de sorte que le bouton PiP se cache automatiquement.

2. Maintenir la session en vie dans le PiP

Faire pas appel session.onPause() en PiP, ou l'appel peut s'interrompre lorsque l'utilisateur quitte l'activité en plein écran :

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

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

3. Nettoyer les vues dans onStop

Supprimer les vues de l'éditeur et de l'abonné lorsque l'activité s'arrête :

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