Kotlin

Gerenciamento de alterações no modo PiP

1. Atualizar a interface do usuário quando o modo PiP mudar

Substituir onPictureInPictureModeChanged para monitorar o estado do PiP e ocultar a pré-visualização local na janela flutuante (o vídeo do assinante 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)
        }
    }
}

Expor isInPipMode para compor (por exemplo, com mutableStateOf) para que o botão PiP seja ocultado automaticamente.

2. Manter a sessão ativa no PiP

Faça não chamada session.onPause() enquanto estiver no modo PiP, ou a chamada poderá ser pausada quando o usuário sair da atividade em tela cheia:

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

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

3. Limpar as visualizações no onStop

Remover as visualizações do editor e do assinante quando a atividade for encerrada:

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