Usar a biblioteca Picture-in-Picture do Jetpack

A biblioteca Picture-in-Picture (PiP) do Jetpack oferece uma solução simplificada e robusta para que desenvolvedores de apps Android implementem a funcionalidade PiP, principalmente para reprodução de mídia, comunicação por vídeo e apps de 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 com o PiP.

A biblioteca PiP Jetpack facilita as APIs PiP atuais ao resolver vários desafios e inconsistências importantes em todo o ecossistema Android:

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

Adotar o Jetpack

Para adotar a biblioteca Jetpack, substitua a implementação personalizada de PiP pelas APIs da biblioteca 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 da tela. A biblioteca 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 criador de PictureInPictureParams para compatibilidade com versões anteriores.

Videochamada

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

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 criador de PictureInPictureParams para compatibilidade com versões anteriores.
  4. Ícones de ação padronizados para videochamadas.

Reprodução de vídeo

A biblioteca 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 de 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.