Call API
Call API — это программный интерфейс приложения (API), разработанный специально для интеграции сторонних коммуникационных приложений в ОС Аврора. Он предоставляет разработчикам возможность интегрировать функции сигнализации и управления звонками в ОС Аврора наравне с звонками сотовой сети для переиспользования графического интерфейса ОС Аврора и корректного управления ресурсами при конкурирующих звонках.
При использовании Call API управление состоянием устройства в режиме звонка (режим экрана, реакция на датчик приближения, управление маршрутом звука) происходит автоматически, аудио- и графические уведомления возможны при заблокированном экране устройства и обрабатываются теми же сервисами, что и при звонках через сотовую сеть.
Объект Call в рамках Call API предоставляет несколько интерфейсов для взаимодействия.
Интерфейс D-Bus | Назначение |
---|---|
Call.Service1 | Регистрация провайдера звонков в ОС |
Call.Call1 | Управление конкретным вызовом |
Call.DTMF1 | Вызывается ОС после событий клавиатуры |
Функциональность Call API
Регистрация в системе
Для работы с Call API необходимо иметь разрешение Call
в манифесте (desktop-файле) приложения.
Для начала работы с Call API необходимо создать на сессионной шине объект CallManager
типа org.freedesktop.DBus.ObjectManager
и сообщить о его наличии
с помощью вызова ru.auroraos.Call.Service1.RegisterCallManager
.
При успешной регистрации ответ будет пустым без ошибки.
Приложение может зарегистрировать несколько CallManager, например, для разных активных аккаунтов.
Уведомление системы о входящем или исходящем звонке
Для уведомления ОС о входящем звонке приложение регистрирует объект типа ru.auroraos.Call.Call1
,
затем через объект org.freedesktop.DBus.ObjectManager
, предварительно зарегистрированный
в сервисе ru.auroraos.Call.Service1
, ОС управляет звонком путём вызова методов ru.auroraos.Call.Call1
.
При изменении статуса звонка приложение сообщает
об этом операционной системе сигналом ru.auroraos.Call.Call1.StatusChanged
.
Когда приложение решает уведомить пользователя о входящем вызове,
оно создаёт на сессионной шине D-Bus объект ru.auroraos.Call.Call1
и сигнализирует
об этом через CallManager испустив сигнал org.freedesktop.DBus.ObjectManager.InterfacesAdded
.
В качестве параметров должны быть указаны путь на D-Bus
и свойства (Property) объекта типа ru.auroraos.Call.Call1
.
Операционная система отображает интерфейс приложения Телефон согласно свойством объекта звонка.
В системе может быть одновременно несколько звонков, но только один из них может быть активным.
При его переходе в состоянии Active другие активные переводятся на удержание или отклоняются.
Управление звонком
Управление звонком осуществляется вызовом сигналов и методов объекта ru.auroraos.Call.Call1
.
Нажатия кнопок графического интерфейса Телефона приводит к вызовам методов;
изменения свойства Status
меняют состояние графического интерфейса.
Завершение звонка
Для завершения звонка необходимо изменить статус соответствующего объекта
Call.Call1
на Disconnected
, затем сообщить об удалении объекта звонка
сигналом org.freedesktop.DBus.ObjectManager.InterfacesRemoved
через CallManager.
Уведомления при проигрывании мультимедиа
Функциональность Call API предоставляет возможность автоматической паузы проигрывания мультимедиа при получении уведомлений о входящих или исходящих звонках. Этот функционал также позволяет сохранить слышимость уведомлений, которые приходят во время проигрывания мультимедиа.
Экран входящего звонка
Функциональность Call API реализует системный экран входящего звонка и звуковое/тактильное оповещение с учётом системных настроек. При входящем звонке, экран показывается независимо от того, заблокировано или разблокировано устройство.
Экран входящего звонка имеет приоритет, как у обычного экрана звонка. На этом экране отображается следующая информация:
- Отклонить входящий звонок.
- Принять входящий звонок.
- Показать диалоговое окно подтверждения для завершения активного звонка и переключения на входящий звонок.
- В некоторых случаях информация на экране входящего звонка может быть недоступной.
Также Call API предоставляет звуковое или тактильное уведомление с учётом системных настроек (режимы "Не беспокоить" и "Бесшумный", настройки звука/вибрации). При новых входящих звонках во время непринятого входящего звонка сохраняется возможность ответить на входящий звонок, для которого активен системный экран входящего звонка.
Маршрутизация звука
Система маршрутизации звука — это механизм, который позволяет управлять потоком звука в операционной системе. Он определяет, какой звуковой источник будет проигрываться через какое аудиоустройство.
Для корректной маршрутизации звука необходимо отключить автоматическое управление ресурсами
и управлять ими вручную через библиотеку libresource-qt5
. Для этого необходимо установить
переменную окружения как можно раньше, до запуска любого аудиопотока, лучше в main()
:
setenv("NEMO_RESOURCE_DISABLE", "1", true);
В режиме звонка перед созданием звуковых потоков должен быть захвачен ресурс
call
с помощью библиотеки libresource-qt5
:
auto resourceSet = new ResourceSet("call", q, false, false);
ResourcePolicy::AudioResource *audioResource = new ResourcePolicy::AudioResource;
audioResource->setProcessID(QCoreApplication::applicationPid());
audioResource->setStreamTag("media.name", "*");
resourceSet->addResourceObject(audioResource);
resourceSet->addResourceObject(new ResourcePolicy::AudioRecorderResource);
Аудиопотоки можно создавать после получения сигнала ResourceSet::resourcesGranted
.
После завершения звонка resourceSet
должен быть освобождён.