Уведомления о чатах и виджеты

В Android 11 можно настроить поведение и размещение уведомлений о разговорах в панели уведомлений по приоритету и уровню оповещения. Разговоры можно отмечать как важные, а для каждого из них можно запускать всплывающие окна в специальном разделе.

В Android 12 добавлены две новые функции для разговоров:

  • Функция "Недавние чаты" в настройках позволяет пользователям настраивать уведомления для недавних чатов, не дожидаясь уведомления.

  • Виджет чата позволяет пользователям легко открывать чаты на главном экране и быстро просматривать недавние разговоры.

В этом документе описываются аспекты реализации, настройки и проверки уведомлений и виджетов чата.

Общие сведения об уведомлениях о чатах

В Android 11 появился новый системный примитив – чат, который представлен существующим объектом ярлыка для отправки (он был добавлен в Android 9).

Примитив "Разговоры" можно использовать следующим образом:

  • Чтобы обмениваться данными из раздела "Разговоры" между приложениями в системе, используйте меню "Поделиться" (уже доступно в Android 10).

  • Для всплывающих чатов(ярлыков в Android 11). См. рис. 1.

  • Чтобы участвовать в новом чате в верхней части панели уведомлений (реализовано в Android 11). См. рисунок 2.

  • Для создания виджетов разговоров (реализовано в Android 12).

    conv_bubbles

    Рисунок 1. Уведомление, запущенное в виде всплывающего чата из панели уведомлений

    conv_notification

    Изображение 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/

Проверка

Чтобы убедиться, что ваша версия функции работает правильно, проверьте следующее:

  1. Приложения, которые полностью поддерживают Conversation API, показывают уведомления в новом разделе и могут настраивать их для каждого чата, а не для общего NotificationChannel.

  2. Всплывающие уведомления для чатов работают.

Чтобы проверить реализацию, используйте следующие тесты в пакете уведомлений:

  • тесты 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 (как описано в предыдущем разделе), позволяя приложениям предоставлять статус для этих разговоров, который отображается в виджетах разговоров.

conv_widgets

Рисунок 3. Чат, отображаемый в виджете разговоров

Виджет разговора в Android 12 способствует установлению связи, позволяя пользователям легко открывать чаты на главном экране. Виджеты – это улучшенные ярлыки, которые позволяют пользователям быстро возвращаться к своим чатам и видеть фрагменты статусов чатов.

Партнер должен реализовать следующие функции:

  1. Виджет, предоставленный SystemUI.
  2. Возможность добавить виджеты на экране выбора виджетов.
  3. Поддержка изменения размера виджета:
    • Используйте onAppWidgetOptionsChanged(), чтобы изменить макет на более подходящий, когда пользователь меняет размер макета или поворачивает устройство в альбомную ориентацию.
    • Используйте maxResizeHeight, maxResizeWidth, minWidth, minHeight, minResizeWidth, minResizeHeight, чтобы правильно ограничить изменение размера виджета.

При внедрении виджетов разговоров учитывайте следующие зависимости:

  • Партнеру не нужно изменять или реализовывать код HAL/драйвера/ядра.
  • Для реализации используется Status 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.

Проверка

Чтобы убедиться, что ваша версия функции работает правильно, проверьте следующее:

  1. При долгом нажатии на значок приложения "Google Старт" в окне выбора виджетов можно добавить новый виджет разговора. На рисунке 4 показан интерфейс окна выбора виджета.

    widget_picker

    Изображение 4. Интерфейс выбора виджетов для добавления нового виджета разговора

  2. Когда в выбранном чате появляются новые уведомления, виджет обновляется.

  3. После того как вы примените статусы к этому диалогу с помощью API ConversationStatus, виджет отобразит эти статусы.

  4. Пользователи могут изменять размер виджетов, а виджеты могут менять размер в зависимости от используемого приложения запуска. Макеты виджетов должны хорошо работать с разными размерами панели запуска на разных устройствах и при изменении размера виджета.

Чтобы проверить реализацию, используйте следующие тесты в пакете уведомлений:

  • Тесты CTS (PeopleManagerTest) для API.

    cts/tests/app/src/android/app/cts/NotificationManagerTest.java
    
  • Ручные тесты для требования GMS – разговоры.