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
HunWindowe 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 (TOPouBOTTOM), 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_panelda configuraçãowindow_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 (
TOPouBOTTOM) 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.