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
enterPictureInPictureModeantes do Android 12 eisAutoEnterEnableddepois. 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
onPictureInPictureModeChangedeonPictureInPictureUiStateChangedem 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
RemoteActionspara 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:
Navegação
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:
- Não é necessário diferenciar a entrada automática e a entrada legada no lado do app.
- Interfaces de callback consolidadas.
- Novo criador de
PictureInPictureParamspara 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:
- Não é necessário diferenciar a entrada automática e a entrada legada no lado do app.
- Interfaces de callback consolidadas.
- Novo criador de
PictureInPictureParamspara compatibilidade com versões anteriores. - Í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:
- 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.