Реализовать системный пользовательский интерфейс

Android Automotive предоставляет новый системный пользовательский интерфейс, разработанный специально для автомобилей. Большинство компонентов системного пользовательского интерфейса тесно связаны со службами платформы. Системный пользовательский интерфейс относится к любому элементу, отображаемому на экране, который не является частью приложения. Пользовательский интерфейс Automotive System (в пакете элементов CarSystemUI) является расширением пользовательского интерфейса Android System (в пакете SystemUI), который был настроен специально для автомобилей.

Что такое системный интерфейс?

Компоненты пользовательского интерфейса Automotive System включают:

Составная часть Описание
Интерфейс блокировки экрана Экран, через который пользователи аутентифицируются для определенной учетной записи пользователя.
Панель навигации Системная панель, которую можно расположить слева, внизу или справа от экрана и которая может включать фасетные кнопки для перехода к различным приложениям, переключения панели уведомлений и обеспечения элементов управления транспортным средством (например, HVAC). Это отличается от реализации пользовательского интерфейса системы Android, которая предоставляет кнопки «Назад», «Домой» и стека приложений.
Статус бар Системная панель расположена вдоль экрана и служит панелью навигации. Строка состояния также предоставляет функции для поддержки:
  • Значки подключения. Включая Bluetooth, Wi-Fi и точку доступа/мобильное соединение.
  • Выпадающая панель уведомлений. Например, проведите пальцем вниз от верхней части экрана.
  • Оповещающие уведомления (HUN).
Системный интерфейс Относится к любому элементу, отображаемому на экране, который не является частью приложения.
Пользовательский интерфейс переключения Экран, с помощью которого пользователь может выбрать другого пользователя.
Пользовательский интерфейс громкости Диалоговое окно, отображаемое, когда драйвер использует кнопки физической громкости для изменения громкости на устройстве.

Как работает системный интерфейс?

Системный пользовательский интерфейс — это приложение для Android, которое запускается при включении устройства. Приложение запускается посредством отражения SystemServer . Ниже перечислены наиболее важные точки входа для видимых пользователем аспектов пользовательского интерфейса системы. Используйте эти компоненты, чтобы настроить пользовательский интерфейс системы Android для автомобильных функций.

  • config_statusBarComponent
  • config_systemUIFactoryComponent

CarSystemUI является расширением пакета SystemUI, что означает, что классы и ресурсы в пакете SystemUI могут использоваться и переопределяться пакетом CarSystemUI.

Настройка пользовательского интерфейса системы

Накладки

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

Файлы наложений должны быть помещены в каталог PRODUCT_PACKAGE_OVERLAYS и должны иметь точно такие же подпапки, что и исходная корневая структура AOSP. Для Android 10 или более поздней версии PRODUCT_PACKAGE_OVERLAYS имеет значение:

PRODUCT_PACKAGE_OVERLAYS := packages/services/Car/car_product/overlay

Пользовательский интерфейс Automotive System использует ресурсы из пакетов SystemUI и CarSystemUI, что означает, что ресурсы из каждого местоположения могут быть переопределены с помощью наложений, чтобы повлиять на внешний вид пользовательского интерфейса Automotive System.

Чтобы заменить файл, скопируйте структуру каталогов заменяемого файла в указанный вами каталог /overlay , а затем включите замену в этот каталог. Например, для замены:

frameworks/base/packages/CarSystemUI/res/layout/super_status_bar.xml

Добавьте заменяющий файл super_status_bar.xml , расположенный в:

packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/

Чтобы заменить frameworks/base/packages/SystemUI/res/values/config.xml (в SystemUI, а не в CarSystemUI), добавьте замещающий файл config.xml в:

packages/services/Car/car_product/overlay/frameworks/base/packages/SystemUI/res/layout/

или ,

packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/

Ниже приведены описания двух основных точек входа для настройки.

Пользовательский интерфейс Automotive System может иметь три панели навигации слева, внизу и справа от экрана. Видимость каждой системной панели переключается со следующими конфигурациями:

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

Каждая полоса имеет подготовленное и неподготовленное состояние, которое можно настроить путем наложения соответствующих файлов макета:

  • car_left_system_bar.xml
  • car_left_system_bar_unprovisioned.xml
  • car_system_bar.xml (макет нижней панели навигации)
  • car_system_bar_unprovisioned.xml
  • car_right_system_bar.xml
  • car_right_system_bar_unprovisioned.xml

Эти макеты должны содержать com.android.systemui.car.systembar.CarSystemBarView на верхнем уровне, который может включать любые другие необходимые представления. Кнопки внутри панелей навигации можно включить с помощью com.android.systemui.car.systembar.CarSystemBarButton .

Эти представления увеличиваются в CarSystemBar#createSystemBar , если устройство правильно подготовлено для данного пользователя.

Статус бар

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

  • car_top_navigation_bar.xml
  • car_top_navigation_bar_unprovisioned.xml

Эти макеты должны содержать com.android.systemui.statusbar.car.CarNavigationBarView на верхнем уровне. Строка состояния содержит значки состояния. Чтобы изменить размер значка, равномерно масштабируйте значок с помощью масштабного коэффициента вместо указания определенного размера. Например, в файле наложения /overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml добавьте следующие размеры, чтобы удвоить размер значков:

<resources>
    <!-- The amount by which to scale up the status bar icons.-->
    <item name="status_bar_icon_scale_factor" format="float" type="dimen">2</item>
</resources>

Строка состояния находится на специальном оконном слое, который также включает в себя панель уведомлений, переключатель пользователей, уведомления с заголовками (HUN) и блокировку клавиатуры. Различные макеты для них включены в super_status_bar.xml .

Изменения исходного кода пользовательского интерфейса системы

Наложения могут не обеспечивать гибкости, необходимой для достаточной настройки поведения пользовательского интерфейса системы.

Тревога. Изменения, внесенные в исходный код Android, будет сложно обновить в более поздних версиях Android. Настоятельно рекомендуется расширять код пользовательского интерфейса Automotive System вместо прямого изменения кода. Таким образом, базовый исходный код пользовательского интерфейса Automotive System может быть обновлен с минимальными конфликтами слияния, поскольку все настройки реализуются через известные поверхности API.

Большинство аспектов пользовательского интерфейса системы можно настроить с помощью этих двух точек входа:

  • config_statusBarComponent
  • config_systemUIFactoryComponent

Например, если вы создаете класс с именем com.android.systemui.statusbar.car.custom.CustomCarStatusBar , который расширяет CarStatusBar , обновите config_statusBarComponent , чтобы он указывал на этот новый компонент. Расширение этого класса позволяет настраивать большинство элементов, относящихся к системной панели и логике уведомлений.

Точно так же вы можете создать CustomCarSystemUIFactory и поместить его в config_systemUIFactoryComponent . Используйте этот класс для обновления функциональности VolumeUI и экрана блокировки.

Настройте переключение и разблокировку пользователей

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

Срок Описание
Keyguard Полноэкранный диалог для предотвращения случайного взаимодействия с приложением переднего плана. Защищает конфиденциальность каждого пользователя при настройке нескольких пользователей.
Диалоговое окно загрузки Экран загрузки отображается при переключении между пользователями.
Экран блокировки, вышибала Экран, требующий ввода PIN-кода, шаблона или пароля.
Пользователь пользователь андроида.
Выбор пользователя Экран выбора пользователя отображается при загрузке устройства.
Пользовательский переключатель Пользовательский переключатель отображается при переключении экранов из QuickSettings.

Настроить переключение пользователей

Keyguard и вышибала

В ОС Android Automotive экран Keyguard со средством выбора пользователя отображается только тогда, когда пользователь нажимает кнопку «Отмена» на экране блокировки. Экран Keyguard показан ниже.

Экран блокировки клавиатуры

Рис. 1. Экран Keyguard

Экран блокировки с вышибалой отображается, когда пользователь выбрал тип конфиденциальности для разблокировки устройства, как показано ниже.

Экран блокировки

Рисунок 2. Экран блокировки.

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

adb shell input keyevent 26

Выбор пользователя

Экран выбора пользователя отображается при перезагрузке устройства, встроенного в строку состояния пользовательского интерфейса системы и карты. Чтобы узнать больше, см. FullscreenUserSwitcher .

Экран загрузки

Рисунок 3. Экран загрузки

Компоновку этого экрана можно настроить в car_fullscreen_user_switcher.xml .

Экран загрузки

Экран загрузки отображается всякий раз, когда пользователь переключается, независимо от точки входа. Например, через средство выбора пользователя или экран настроек. Экран загрузки является неотъемлемой частью системного пользовательского интерфейса платформы и сопоставляется с общедоступным классом CarUserSwitchingDialog . См. пример на рис. 3 выше.

Тему можно настроить с помощью Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog .

Чтобы настроить пользователя Android, начальный поток мастера настройки позволяет водителю настроить для себя имя пользователя. Если затем драйвер связывает пользователя Android с учетной записью Google, имя пользователя выбирается из этой учетной записи. Однако если водитель указывает имя, например DriverB, а затем связывает это имя пользователя со своей учетной записью Google с именем Мэдди, первоначально назначенное имя (DriverB) не изменяется, поскольку это имя было задано явно. Водитель может изменить имя только в меню настроек.

Макет можно настроить в car_user_switching_dialog.xml .

OEM-производители могут скрыть панель состояния и навигации, используя тему с именем NoActionBar.Fullscreen . (Это исходный системный пользовательский интерфейс, обновленный для пользовательского интерфейса автомобиля.) Дополнительные сведения см. в разделе « Настройка ».

Хотя OEM-производители могут предоставлять точки входа в пользовательский интерфейс для переключения пользователей, результаты иногда могут быть нежелательными. Если это произойдет:

  1. OEM создает и отображает настраиваемый экран загрузки (или диалоговое окно).
    • В частности, для UX OEM-производитель запускает настраиваемый экран загрузки, когда пользователь выбирает средство для переключения, которое можно скрыть, когда пользовательское переключение завершено.
    • OEM-производитель должен установить окно приоритета в соответствии со своими предпочтениями. Например, тип окна с более высоким приоритетом. Приоритет не может превышать приоритет Keyguard.
  2. OEM устанавливает config_customUserSwitchUi=true в config.xml базовой платформы, как описано в config_customuserswitchui . В результате платформа не отображает CarUserSwitchingDialog .

Настроить экран блокировки

Экран блокировки является неотъемлемой частью системного пользовательского интерфейса, который может быть настроен OEM-производителем. Чтобы настроить процесс, начните с frameworks/base/packages/CarSystemUI/ .

Настройка параметров первого пользователя

Мастер установки выполняет первоначальную настройку пользователя. Это тоже можно настроить. Вы можете использовать API- интерфейсы UserManager для создания пользователя. В некоторых случаях это можно реализовать в фоновом режиме, тем самым упрощая работу мастера установки.