Usar a biblioteca Picture-in-Picture do Jetpack

A biblioteca do Jetpack Picture-in-Picture (PiP) oferece uma solução simplificada e robusta para que os desenvolvedores de apps Android implementem a funcionalidade PiP, principalmente para apps de reprodução de mídia, comunicação por vídeo e navegação. Ao fornecer uma API unificada, a biblioteca ajuda a eliminar o código boilerplate, bugs comuns no app e melhorar a qualidade geral da experiência do usuário do PiP.

A biblioteca do Jetpack PiP facilita as APIs PiP atuais, abordando vários desafios e inconsistências importantes no ecossistema Android:

  • Fragmentação do SO: a biblioteca processa automaticamente as diferenças nas chamadas de API PiP em várias versões do Android, como o uso de enterPictureInPictureMode antes do Android 12 e isAutoEnterEnabled depois, para que os desenvolvedores não precisem gerenciar diferenças de versão.
  • Parâmetros PiP incorretos: ela oferece uma solução unificada para definir corretamente os parâmetros PiP, por exemplo, setSourceRectHint, para criar animações suaves e de alta qualidade durante a reprodução de mídia.
  • Callbacks de estado PiP unificados: ela consolida onPictureInPictureModeChanged e onPictureInPictureUiStateChanged em uma única interface de callback unificada (PictureInPictureDelegate.OnPictureInPictureEventListener) para simplificar o estado e o gerenciamento da interface.
  • Redução do código boilerplate: a biblioteca reduz a quantidade de código boilerplate repetitivo, oferecendo conjuntos predefinidos de RemoteActions para casos de uso comuns, como controles de reprodução e ações de videochamada.
  • Preparação para o futuro: outros recursos do PiP são fornecidos pela biblioteca do Jetpack, permitindo que os usuários acessem funcionalidades extras com o mínimo de esforço.

Adotar o Jetpack

Para adotar a biblioteca do Jetpack, substitua a implementação personalizada do PiP pelas APIs da biblioteca do Jetpack. A complexidade e o custo da adoção variam de acordo com a implementação atual do app.

As seções a seguir descrevem alguns dos casos de uso típicos do PiP e as etapas de implementação necessárias:

O app informa à biblioteca o estado ativo ou inativo da navegação e define a proporção. A biblioteca do Jetpack cuida do restante.

Principais diferenças:

  1. Não é necessário diferenciar a entrada automática e a entrada legada no lado do app.
  2. Interfaces de callback consolidadas.
  3. Novo builder PictureInPictureParams para compatibilidade com versões anteriores.

Videochamada

O app informa à biblioteca o estado ativo ou inativo da chamada e define a proporção.

Principais diferenças:

  1. Não é necessário diferenciar a entrada automática e a entrada legada no lado do app.
  2. Interfaces de callback consolidadas.
  3. Novo builder PictureInPictureParams para compatibilidade com versões anteriores.
  4. Ícones de ação padronizados para videochamada.

Reprodução de vídeo

A biblioteca do Jetpack oferece delegados de player que podem ser integrados para gerenciar a ativação ou desativação do PiP e definir com precisão a dica do retângulo de origem. Você também pode ativar um conjunto predefinido de objetos RemoteAction, semelhantes aos usados em cenários de videochamada.

Principais recursos:

  1. Processa a compatibilidade com versões anteriores. Não é necessário verificar a versão do SO.
  2. Sincronização do estado de reprodução e controle de entrada automática.
  3. Rastreamento contínuo de geometria usando SourceRectHint.