O Android 11 adicionou suporte à personalização do comportamento e posicionamento de notificações de conversa na aba de notificações por nível de prioridade e alerta. Isso permite que as conversas sejam marcadas como importantes e que os balões delas sejam iniciados no espaço de conversa.
Com base nesses recursos do Android 11, o Android 12 oferece dois novos recursos de conversa:
O recurso "Conversas recentes" nas configurações permite que os usuários personalizem o comportamento das notificações de conversas recentes sem precisar esperar por uma notificação.
O recurso "Widget de conversa" permite que os usuários abram chats facilmente na tela inicial, oferecendo uma visualização rápida das conversas recentes.
Este documento descreve os aspectos de implementação, personalização e validação de notificações e widgets de conversa.
Visão geral das notificações de conversa
O Android 11 introduz uma nova primitiva do sistema, a conversa, que é representada pelo objeto de atalho de compartilhamento rápido atual (lançado com o Android 9).
A primitiva de conversas pode ser usada da seguinte maneira:
Para compartilhar dados de conversas entre os apps no sistema usando o Sharesheet (já no Android 10).
Para balões de condução ( no Android 11). Consulte a Figura 1.
Para participar do novo espaço de conversa na parte de cima da aba de notificações (implementado no Android 11). Consulte a Figura 2.
Para criar widgets de conversa (implementados no Android 12).

Figura 1:notificação iniciada como balão na gaveta de notificações

Figura 2:espaço de conversa localizado na parte de cima da aba de notificações
Além de criar um link para o atalho que representa a conversa, a notificação também usa MessagingStyle para incluir a última mensagem da conversa no espaço de conversa.
Os parceiros do GMS precisam implementar o seguinte:
- Um novo espaço de conversas como uma seção separada na parte de cima da aba de notificações.
- Um estilo de notificação que permite e oferece suporte ao padrão de balão específico da conversa.
Os parceiros que implementam conversas também precisam implementar conversas importantes. No entanto, a implementação de conversas pode ser alinhada aos conceitos de OEM de natureza semelhante. No geral, os parceiros têm a liberdade de alinhar a seção de conversa com a interface do sistema específica. O parceiro não precisa modificar ou implementar código/extensões HAL/driver/kernel.
Consulte a implementação de referência a seguir nas seções SystemUI e PeopleService no AOSP:
frameworks/base/packages/SystemUI/src/com/android/systemui/people/
frameworks/base/core/java/android/app/people/
frameworks/base/services/people/java/com/android/server/people/
Validação
Para garantir que sua versão do recurso funcione conforme esperado, verifique o seguinte:
Os apps que oferecem suporte total à API Conversation mostram as notificações na nova seção e podem personalizar essas notificações por conversa, em vez de pelo NotificationChannel genérico.
Os balões específicos da conversa estão funcionando.
Para validar a implementação, use os seguintes testes no pacote de notificação:
Testes CTS.
cts/tests/app/src/android/app/cts/NotificationManagerTest.javaTestes do CTS Verifier.
cts/apps/CtsVerifier/src/com/android/cts/verifier/notifications/
Visão geral dos widgets de conversa
No Android 12, o recurso de widget de conversa é baseado nas representações de conversa criadas no Android 11 (conforme descrito na seção anterior), permitindo que os apps forneçam o status dessas conversas que são exibidas nos widgets de conversa.
Figura 3:conversas exibidas em widgets de conversa
O recurso de widget de conversa no Android 12 promove a conexão, permitindo que os usuários abram chats facilmente na tela inicial. Os widgets são atalhos aprimorados para que os usuários voltem com eficiência às conversas, enquanto mostram trechos dos status da conversa.
O parceiro precisa implementar o seguinte:
- Um widget fornecido pelo SystemUI.
- Um fluxo para adicionar esses widgets na tela de seleção de widgets.
- Suporte ao redimensionamento de widgets da seguinte maneira:
- Use
onAppWidgetOptionsChanged()para mudar o layout para um tamanho melhor quando o usuário mudar o tamanho do layout ou girar para a paisagem. - Use
maxResizeHeight,maxResizeWidth,minWidth,minHeight,minResizeWidth,minResizeHeightpara limitar corretamente as mudanças de tamanho do widget.
- Use
Esteja ciente das seguintes dependências ao implementar widgets de conversa:
- O parceiro não precisa modificar ou implementar código HAL/driver/kernel.
- A API Status, que permite que os apps adicionem informações de status ou disponibilidade a uma conversa e ao widget associado, é usada para implementação.
- O processo é o mesmo nas implementações de novos dispositivos e de upgrade.
- O recurso de widgets de conversa tem uma dependência de um novo recurso lançado no Android 12, que armazena em cache conversas vistas recentemente (por exemplo, de notificações). Esse último recurso permite expandir a lista de conversas que um usuário pode adicionar à tela inicial.
Consulte a implementação de referência a seguir nos arquivos SystemUI e Launcher3:
frameworks/base/packages/SystemUI/src/com/android/systemui/people/
frameworks/base/core/java/android/app/people/
frameworks/base/services/people/java/com/android/server/people/
Personalização
O recurso de widgets de conversa não pode ser ativado ou desativado. No entanto, um parceiro pode mudar os layouts dos modelos de widget, desde que os requisitos do GMS sejam atendidos.
Validação
Para garantir que sua versão do recurso funcione conforme esperado, verifique o seguinte:
Em uma pressão longa no Launcher, um novo widget de conversa pode ser adicionado a uma conversa pelo seletor de widgets. Consulte a Figura 4 para conferir a interface do seletor de widgets:
Figura 4:interface do seletor de widgets para adicionar um novo widget de conversa
Ao enviar notificações para o dispositivo da conversa selecionada, o widget é atualizado para refletir essas notificações.
Ao aplicar status a essa conversa usando a
ConversationStatusAPI, o widget reflete esses status.Os usuários podem redimensionar widgets, e os widgets podem mudar de tamanho com base no Launcher atual. Os layouts de widget precisam funcionar bem com diferentes tamanhos de Launcher em dispositivos diferentes e ao redimensionar o widget.
Para validar a implementação, use os seguintes testes no pacote de notificação:
Testes CTS (PeopleManagerTest) para as superfícies da API.
cts/tests/app/src/android/app/cts/NotificationManagerTest.javaTestes manuais para o requisito do GMS: conversas.