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

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

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

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

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

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

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

  • 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

Пользовательский интерфейс автомобильной системы использует ресурсы из системного пользовательского интерфейса и пакетов 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 (в системном пользовательском интерфейсе, а не в 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>

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

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

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

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

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

  • config_statusBarComponent
  • config_systemUIFactoryComponent

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

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

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

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

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

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

Ключница и вышибала

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

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

Рис. 1. Экран «Защита клавиатуры»

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

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

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

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

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

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

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