Android Automotive предоставляет новый системный пользовательский интерфейс, разработанный специально для транспортных средств. Большинство компонентов системного пользовательского интерфейса тесно связаны с фреймворковыми службами. Системный пользовательский интерфейс относится к любому элементу, отображаемому на экране, который не является частью приложения. Системный пользовательский интерфейс Automotive (в пакете элементов CarSystemUI) является расширением системного пользовательского интерфейса Android (в пакете системного пользовательского интерфейса), который был настроен специально для транспортных средств.
Что такое системный пользовательский интерфейс?
Компоненты, специфичные для пользовательского интерфейса автомобильной системы, включают в себя:
Компонент | Описание |
---|---|
Интерфейс экрана блокировки | Экран, с помощью которого пользователи проходят аутентификацию в определенной учетной записи. |
Панель навигации | Системная панель, которая может быть расположена слева, снизу или справа на экране и может включать фасетные кнопки для навигации по различным приложениям, переключения панели уведомлений и предоставления элементов управления транспортным средством (например, HVAC). Это отличается от реализации пользовательского интерфейса системы Android, которая предоставляет кнопки «Назад», «Домой» и «Стек приложений». |
Строка состояния | Системная панель, расположенная вдоль экрана и служащая панелью навигации. Строка состояния также обеспечивает функциональность для поддержки:
|
Системный пользовательский интерфейс | Относится к любому элементу, отображаемому на экране, который не является частью приложения. |
Пользовательский интерфейс переключателя пользователей | Экран, с помощью которого пользователь может выбрать другого пользователя. |
Пользовательский интерфейс громкости | Диалоговое окно отображается, когда водитель использует физические кнопки регулировки громкости для изменения громкости на устройстве. |
Как работает системный пользовательский интерфейс?
System UI — это приложение Android, которое запускается при включении устройства. Приложение запускается через отражение SystemServer . Ниже перечислены наиболее важные точки входа для видимых пользователю аспектов System UI. Используйте эти компоненты для настройки Android System UI для специфических для автомобилей возможностей.
-
config_statusBarComponent
-
config_systemUIFactoryComponent
CarSystemUI является расширением пакета System UI, что означает, что классы и ресурсы в пакете System UI могут использоваться и переопределяться пакетом CarSystemUI.
Настройте системный пользовательский интерфейс
Накладки
Хотя вы можете изменять исходный код Android для настройки пользовательского интерфейса системы, это усложняет и усложняет применение будущих обновлений Android. Вместо этого Android поддерживает использование каталога наложений, который позволяет вам заменять файлы ресурсов без изменения исходного кода. В системе сборки Android система наложений переопределяет файлы контролируемым образом. Все измененные файлы четко идентифицируются без обхода всего дерева исходного кода AOSP.
Файлы оверлея должны быть помещены в каталог PRODUCT_PACKAGE_OVERLAYS
и должны иметь точно такие же подпапки, как и исходная корневая структура AOSP. Для Android 10 или выше PRODUCT_PACKAGE_OVERLAYS
устанавливается следующим образом:
PRODUCT_PACKAGE_OVERLAYS := packages/services/Car/car_product/overlay
Пользовательский интерфейс автомобильной системы использует ресурсы из пакетов System UI и CarSystemUI, что означает, что ресурсы из каждого местоположения могут быть переопределены с помощью наложений, чтобы повлиять на внешний вид пользовательского интерфейса автомобильной системы.
Чтобы заменить файл, скопируйте структуру каталогов заменяемого файла в указанный вами каталог /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
(в System UI, а не 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/
Ниже приведены описания двух основных точек входа для настройки.
Панель навигации
Пользовательский интерфейс автомобильной системы может иметь три панели навигации слева, снизу и справа экрана. Видимость каждой системной панели переключается следующими конфигурациями:
-
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>
Строка состояния находится в специальном слое окон, который также включает панель уведомлений, переключатель пользователей, уведомления Heads Up (HUN) и блокировку клавиатуры. Различные макеты для них включены в super_status_bar.xml
.
Изменения исходного кода пользовательского интерфейса системы
Наложения могут не обеспечивать гибкости, необходимой для достаточной настройки поведения пользовательского интерфейса системы.
Предупреждение. Изменения, внесенные в исходный код Android, трудно обновить в более поздних версиях Android. Мы настоятельно рекомендуем вам расширить код Automotive System UI вместо того, чтобы напрямую изменять код. Таким образом, базовый исходный код Automotive System UI может быть обновлен с минимальными конфликтами слияния, поскольку все настройки реализованы через известные поверхности API.
Большинство аспектов пользовательского интерфейса системы можно настроить через эти две точки входа:
-
config_statusBarComponent
-
config_systemUIFactoryComponent
Например, если вы создаете класс с именем com.android.systemui.statusbar.car.custom.CustomCarStatusBar
, который расширяет CarStatusBar
, обновите config_statusBarComponent
так, чтобы он указывал на этот новый компонент. Расширение этого класса позволяет настраивать большинство элементов, которые относятся к системной панели и логике уведомлений.
Аналогично, вы можете создать CustomCarSystemUIFactory
и поместить его в config_systemUIFactoryComponent
. Используйте этот класс для обновления функциональности VolumeUI и экрана блокировки.
Настройте переключение и разблокировку пользователей
В следующем материале описывается, как настроить процесс переключения пользователей.
Срок | Описание |
---|---|
Защита клавиатуры | Полноэкранный диалог для предотвращения случайного взаимодействия с активным приложением. Защищает конфиденциальность каждого пользователя при настройке нескольких пользователей. |
Загрузка диалога | Экран загрузки отображается при переключении между пользователями. |
Экран блокировки, вышибала | Экран, требующий от человека ввести PIN-код, графический ключ или пароль. |
Пользователь | Пользователь Android. |
Выбор пользователя | Экран выбора пользователя, отображаемый при загрузке устройства. |
Переключатель пользователей | Переключатель пользователей отображается при переключении экранов из QuickSettings. |
Настройте переключение пользователей
Охранник и вышибала
В Android Automotive OS экран Keyguard с выбором пользователя отображается только тогда, когда пользователь нажимает кнопку «Отмена» на экране блокировки. Экран Keyguard показан ниже.
Рисунок 1. Экран блокировки клавиатуры
Экран блокировки с вышибалой отображается, когда пользователь выбирает тип конфиденциальности, с помощью которого он хочет разблокировать устройство, как показано ниже.
Рисунок 2. Экран блокировки.
Если замок настроен на ручное включение или выключение питания, следуйте следующей инструкции:
adb shell input keyevent 26
Выбор пользователя
Экран выбора пользователя отображается при перезагрузке устройства, встроенного в строку состояния пользовательского интерфейса системы автомобиля и Карты. Чтобы узнать больше, см. FullscreenUserSwitcher
.
Рисунок 3. Экран выбора пользователя
Макет этого экрана можно настроить в car_fullscreen_user_switcher.xml
.
Загрузочный экран
Экран загрузки отображается всякий раз, когда пользователь переключается, независимо от точки входа. Например, через выбор пользователя или экран настроек. Экран загрузки является неотъемлемой частью фреймворка System UI и отображается в открытый класс, названный CarUserSwitchingDialog
. См. рисунок 3 выше для примера.
Тему можно настроить с помощью Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog
.
Чтобы настроить пользователя Android, начальный поток мастера настройки позволяет водителю настроить имя пользователя для себя. Если водитель затем связывает пользователя Android с учетной записью Google, имя пользователя выбирается из этой учетной записи. Однако, если водитель указывает имя, например DriverB, а затем позже связывает это имя пользователя со своей учетной записью Google с именем Maddy, первоначально назначенное имя (DriverB) не изменяется, поскольку это имя было явно задано. Водитель может изменить имя только в меню «Настройки».
Макет можно настроить в car_user_switching_dialog.xml .
OEM-производители могут скрыть строку состояния и навигации, используя тему NoActionBar.Fullscreen
. (Это оригинальный системный пользовательский интерфейс, обновленный для эталонного пользовательского интерфейса автомобиля.) Для получения дополнительной информации см. Настройка .
Хотя OEM-производители могут предоставлять точки входа в пользовательский интерфейс для переключения пользователей, результаты иногда могут быть нежелательными. Если это произойдет:
- OEM-производитель создает и отображает пользовательский загрузочный экран (или диалоговое окно).
- Что касается пользовательского опыта, OEM-производитель запускает настраиваемый экран загрузки, когда пользователь выбирает способ переключения, который может быть скрыт после завершения переключения пользователем.
- OEM должен установить приоритетное окно в соответствии со своими предпочтениями. Например, более высокий приоритетный тип окна. Приоритет приоритета не может превышать приоритет Keyguard.
- OEM устанавливает
config_customUserSwitchUi=true
в основном фреймворкеconfig.xml
, как описано вconfig_customuserswitchui
. В результате фреймворк не отображаетCarUserSwitchingDialog
.
Настройте экран блокировки
Экран блокировки является неотъемлемой частью пользовательского интерфейса системы, который может быть настроен OEM. Чтобы настроить поток, начните с frameworks/base/packages/CarSystemUI/
.
Настройте параметры для нового пользователя
Мастер настройки выполняет настройку первого пользователя. Это тоже можно настроить. Вы можете использовать API UserManager для создания пользователя. В некоторых случаях это можно реализовать в фоновом режиме, тем самым оптимизируя процесс мастера настройки.