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

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

,

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

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

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

Компонент Описание
Интерфейс блокировки экрана Экран, с помощью которого пользователи аутентифицируются для конкретной учетной записи пользователя.
Панель навигации Системная панель, которую можно расположить слева, снизу или справа от экрана и которая может включать в себя фасетные кнопки для навигации к различным приложениям, переключения панели уведомлений и обеспечения элементов управления транспортным средством (например, системой отопления, вентиляции и кондиционирования). Это отличается от реализации системного пользовательского интерфейса 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 для создания пользователя. В некоторых случаях это можно реализовать в фоновом режиме, что упрощает работу мастера установки.

,

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

,

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

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

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

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

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

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

  • config_statusBarComponent
  • config_systemUIFactoryComponent

Carsystemui - это расширение пакета пользовательского интерфейса System, что означает, что классы и ресурсы в пакете пользовательского интерфейса System могут быть использованы и переопределены пакетом Carsystemui.

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

Наложения

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

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

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

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

Строка состояния находится в специальном окне -слое, который также включает в себя панель уведомлений, пользовательский переключатель, уведомления о возглавлении (Huns) и Keyguard. Различные макеты для них включены в 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 и блокировки.

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

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

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

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

Keyguard и Bouncer

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

Экран Keyguard

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

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

Блокировка экрана

Рисунок 2. ЭКСПЕРТИН.

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

adb shell input keyevent 26

Пользовательский сборщик

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

Загрузка экрана

Рисунок 3. Экран пользователя

Макет этого экрана может быть настроена в car_fullscreen_user_switcher.xml .

Загрузка экрана

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

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

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

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

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

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

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

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

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

Настроить настройку пользователя в первый раз

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