В Android 11 добавлена поддержка настройки поведения и размещения уведомлений о разговорах на панели уведомлений по приоритету и уровню оповещения, что позволяет отмечать разговоры как важные и запускать специальные всплывающие окна в области разговоров.
Развивая эти функции Android 11, Android 12 предлагает две новые функции разговора:
Функция «Недавние разговоры» в настройках позволяет пользователям настраивать поведение уведомлений для недавних разговоров, не дожидаясь уведомления.
Функция «Виджета беседы» позволяет пользователям легко открывать чаты на главном экране, обеспечивая быстрый просмотр последних бесед.
В этом документе описываются аспекты реализации, настройки и проверки уведомлений о разговорах и виджетов.
Обзор уведомлений о разговорах
В Android 11 представлен новый системный примитив — Conversation, представленный существующим объектом ярлыка общего доступа (который был развернут в Android 9).
Примитив Conversations можно использовать следующим образом:
Для обмена данными разговоров между приложениями в системе через Sharesheet (уже в Android 10).
Для управления пузырями ( ярлыки в Android 11). См. рисунок 1 .
Для участия в новом разделе «Беседы» поверх панели уведомлений (реализовано в Android 11). См. рисунок 2 .
Для создания виджетов разговоров (реализовано в Android 12).
Рисунок 1: Уведомление запускается в виде всплывающего окна из панели уведомлений.
Рисунок 2: Область разговора, расположенная поверх панели уведомлений
Помимо ссылки на ярлык, представляющий беседу, уведомление также использует MessagingStyle для включения последнего сообщения беседы в область беседы.
Партнеры GMS обязаны реализовать следующее:
- Новое пространство «Беседы» как отдельный раздел поверх панели уведомлений.
- Стиль уведомлений, который допускает и поддерживает шаблон пузырей, характерный для разговора.
Партнёры, внедряющие функцию «Обсуждения», обязаны также внедрять функцию «Важные обсуждения». Однако реализация функции «Обсуждения» может быть согласована с аналогичными концепциями OEM-производителей. В целом, партнёры могут свободно адаптировать раздел «Обсуждения» к своему системному пользовательскому интерфейсу. Партнёру не требуется изменять или внедрять HAL/драйвер/код ядра/расширения.
См. следующую эталонную реализацию в разделах SystemUI и PeopleService в 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/
Проверка
Чтобы убедиться, что ваша версия функции работает так, как задумано, проверьте следующее:
Приложения, которые полностью поддерживают API Conversation, видят свои уведомления в новом разделе и могут настраивать эти уведомления по разговору, а не по универсальному NotificationChannel .
Работают специальные пузыри обсуждений.
Для проверки реализации используйте следующие тесты в пакете уведомлений:
Тесты CTS.
cts/tests/app/src/android/app/cts/NotificationManagerTest.java
Тесты CTS Verifier.
cts/apps/CtsVerifier/src/com/android/cts/verifier/notifications/
Обзор виджетов разговора
В Android 12 функция «Виджет разговора» основана на представлениях разговора, созданных в Android 11 (как описано в предыдущем разделе), позволяя приложениям указывать статус для тех разговоров, которые отображаются в виджетах разговора.
Рисунок 3: Разговоры, отображаемые в виджетах разговоров
Функция «Виджет беседы» в Android 12 облегчает общение, позволяя пользователям легко открывать чаты на главном экране. Виджеты представляют собой улучшенные ярлыки, которые позволяют пользователям быстро возвращаться к своим беседам, отображая фрагменты статусов бесед.
Партнер должен реализовать следующее:
- Виджет, предоставленный SystemUI.
- Поток добавления этих виджетов с экрана выбора виджетов.
- Поддержка изменения размера виджета следующим образом:
- Используйте
onAppWidgetOptionsChanged()
для изменения макета на макет более подходящего размера, когда пользователь изменяет размер макета или поворачивает экран в альбомную ориентацию. - Используйте
maxResizeHeight
,maxResizeWidth
,minWidth
,minHeight
,minResizeWidth
,minResizeHeight
для правильной привязки изменений размера виджета.
- Используйте
При реализации виджетов беседы учитывайте следующие зависимости:
- Партнеру не нужно изменять или внедрять код HAL/драйвера/ядра.
- Для реализации используется API статуса, который позволяет приложениям добавлять информацию о статусе или доступности в беседу и соответствующий виджет.
- Процесс одинаков как при внедрении новых устройств, так и при внедрении обновлений.
- Функция «Виджеты разговоров» зависит от новой функции, появившейся в Android 12, которая кэширует недавно просмотренные разговоры (например, из уведомлений). Эта функция позволяет расширить список разговоров, которые пользователь может добавить на главный экран.
См. следующую эталонную реализацию в файлах SystemUI и 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/
Настройка
Функцию «Виджеты беседы» нельзя включить или отключить. Однако партнёр может изменить макеты шаблонов виджетов при условии соблюдения требований GMS.
Проверка
Чтобы убедиться, что ваша версия функции работает так, как задумано, проверьте следующее:
При длительном нажатии на кнопку запуска можно добавить новый виджет беседы через средство выбора виджетов. Интерфейс средства выбора виджетов показан на рисунке 4:
Рисунок 4: Интерфейс выбора виджетов для добавления нового виджета беседы
При отправке уведомлений на устройство из выбранного разговора виджет обновляется для отображения этих уведомлений.
При применении статусов к этому разговору с помощью API
ConversationStatus
виджет отражает эти статусы.Пользователи могут изменять размер виджетов, а виджеты могут менять свой размер в зависимости от текущего лаунчера. Макеты виджетов должны хорошо сочетаться с разными размерами лаунчеров на разных устройствах и корректно изменять размер виджета.
Для проверки реализации используйте следующие тесты в пакете уведомлений:
Тесты CTS (PeopleManagerTest) для поверхностей API.
cts/tests/app/src/android/app/cts/NotificationManagerTest.java
Ручные тесты на соответствие требованиям GMS - Беседы.