Implementar painéis de notificações de alerta

No Android 17 e em versões mais recentes, a interface escalonável para notificações permanentes (HUNs) permite personalizar o gerenciamento de janelas (posicionamento, tela de fundo escura, animações) dos painéis de HUNs usando o framework de interface escalonável com sobreposições de recursos de tempo de execução (RROs). Esse recurso permite controlar o contêiner da notificação sem afetar a renderização do conteúdo interno.

Implementação

A implementação da interface escalonável para HUNs envolve o seguinte:

  • APIs públicas e do sistema:apresenta a classe HunWindow e a lógica de análise da tag XML <HunPanel> nos analisadores da interface escalonável.
  • Implementação do parceiro:
    • Defina uma sobreposição RRO personalizada.
    • Para criar um arquivo XML (por exemplo, res/xml/hun_panel.xml), use a tag raiz <HunPanel>.
    • Defina elementos <Variant> para controlar limites, gravidade (TOP ou BOTTOM), visibilidade e segundo plano (drawable de proteção).
    • Mapeie variantes para eventos do sistema (por exemplo, _System_Show_Panel) usando <Transitions>.
  • Dispositivos novos x dispositivos atualizados:essa é uma mudança de configuração feita por RROs. Para fazer upgrade dos dispositivos e receber a nova imagem do sistema, crie uma RRO adequada para definir o comportamento do HUN. Isso permite que os usuários se desviem do padrão.
  • Ativar ou desativar:para ativar ou desativar esse recurso, adicione ou remova @xml/hun_panel da configuração window_states.
  • Configurações padrão:altere as configurações padrão aplicando seu próprio RRO que substitui a configuração padrão do sistema.

Requisitos e validação

Use a sequência a seguir para testar a ativação e desativação de sobreposições:

adb shell cmd overlay disable --user current com.example.overlay.scalableUI.hun.bottom

Se você ativar ou desativar a RRO, a HUN será mostrada na parte de baixo ou de cima, respectivamente.

Validação manual

  • Posicionamento:verifique se as unidades de história em quadrinhos aparecem na gravidade especificada (TOP ou BOTTOM) e nos limites.
  • Interações:verifique se o gesto de deslizar para dispensar funciona. Se não for possível dispensar, verifique se o botão funciona.
  • Animações:verifique as animações de transição entre os estados aberto e fechado.