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
enterPictureInPictureModeantes do Android 12 eisAutoEnterEnableddepois, 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
onPictureInPictureModeChangedeonPictureInPictureUiStateChangedem 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
RemoteActionspara 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:
Navegação
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:
- Não é necessário diferenciar a entrada automática e a entrada legada no lado do app.
- Interfaces de callback consolidadas.
- Novo builder
PictureInPictureParamspara 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:
- Não é necessário diferenciar a entrada automática e a entrada legada no lado do app.
- Interfaces de callback consolidadas.
- Novo builder
PictureInPictureParamspara compatibilidade com versões anteriores. - Í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:
- Processa a compatibilidade com versões anteriores. Não é necessário verificar a versão do SO.
- Sincronização do estado de reprodução e controle de entrada automática.
- Rastreamento contínuo de geometria usando
SourceRectHint.