O Android Automotive oferece uma nova interface do sistema desenvolvida especificamente para veículos. A maioria dos componentes da interface do sistema estão fortemente acoplados aos serviços de framework. A interface do sistema é qualquer que não faz parte de um app mostrado na tela. A interface do usuário do sistema automotivo (na pacote de elementos CarSystemUI) é uma extensão da interface do sistema Android (no pacote da interface do sistema), personalizado especificamente para veículos.
O que é a interface do sistema?
Componentes específicos da interface do sistema automotivo incluem:
Componente | Descrição |
---|---|
IU da tela de bloqueio | Tela em que os usuários são autenticados em uma conta de usuário específica. |
Barra de navegação | Uma barra de sistema que pode ser posicionada à esquerda, inferior ou direita da tela pode incluir botões de atributos para navegação para diferentes aplicativos, alternar o painel de notificações e fornecem controles do veículo (como AVAC). Ele é diferente da interface do sistema Android que fornece os botões "Voltar", "Início" e "pilha de apps". |
Barra de status | Barra do sistema posicionada ao longo da tela e que serve como barra de navegação. A
a barra de status também oferece funcionalidades para oferecer suporte a:
|
IU do sistema | Refere-se a qualquer elemento exibido na tela que não faça parte de um app. |
Interface do seletor de usuário | Tela em que um usuário pode selecionar um usuário diferente. |
IU de volume (link em inglês) | Caixa de diálogo exibida quando o motorista usa botões de volume físicos para alterar o volume de um dispositivo. |
Como a interface do sistema funciona?
A interface do sistema é um app Android executado quando um dispositivo está ligado. A aplicativo é iniciado por meio da reflexão SystemServer (ambos em inglês). Os pontos de entrada mais relevantes para aspectos visíveis ao usuário da interface do sistema estão listados abaixo. Use esses componentes para personalizar a interface do sistema Android para recursos específicos do Automotive.
config_statusBarComponent
config_systemUIFactoryComponent
CarSystemUI é uma extensão do pacote System UI, o que significa que as classes e os recursos no pacote System UI podem ser usados e substituídos pelo pacote CarSystemUI.
Personalizar a interface do sistema
Sobreposições
Embora você possa modificar o código-fonte do Android para personalizar a interface do sistema, isso vai dificultar e aumentar a complexidade da aplicação de futuras atualizações do Android. Em vez disso, o Android oferece suporte ao uso de um diretório de sobreposição, que permite substituir arquivos de recursos sem modificar o código-fonte. No sistema de compilação do Android, o sistema de sobreposição substitui os arquivos em uma controlada. Todos os arquivos modificados estão identificados de modo claro sem passar por toda árvore de código-fonte do AOSP.
Os arquivos de sobreposição precisam ser colocados no diretório PRODUCT_PACKAGE_OVERLAYS
e ter
exatamente as mesmas subpastas que a estrutura raiz original do AOSP. Para Android
10 ou mais recente, PRODUCT_PACKAGE_OVERLAYS
é definido como:
PRODUCT_PACKAGE_OVERLAYS := packages/services/Car/car_product/overlay
A interface do Automotive System usa recursos da interface do sistema e dos pacotes CarSystemUI, o que significa que os recursos de cada local podem ser substituídos por sobreposições para afetar o aparência da interface do Automotive System.
Para substituir um arquivo, replique a estrutura de diretórios do arquivo que está sendo substituído no
/overlay
especificado e inclua o substituto nele.
diretório. Por exemplo, para substituir:
frameworks/base/packages/CarSystemUI/res/layout/super_status_bar.xml
Adicione o arquivo super_status_bar.xml
substituto localizado em:
packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/
Para substituir frameworks/base/packages/SystemUI/res/values/config.xml
,
(na interface do sistema, não na CarSystemUI), adicione o arquivo config.xml
de substituição a:
packages/services/Car/car_product/overlay/frameworks/base/packages/SystemUI/res/layout/
ou
packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/
Confira abaixo as descrições dos dois principais pontos de entrada de personalização.
Barra de navegação
A interface do Automotive System pode ter três barras de navegação à esquerda, na parte inferior e à direita do tela. A visibilidade de cada barra do sistema é alternada com as seguintes configurações:
config_enableLeftSystemBar
config_enableBottomSystemBar
config_enableRightSystemBar
Cada barra tem um estado provisionado e não provisionado, que pode ser personalizado sobrepondo respectivos arquivos de layout:
car_left_system_bar.xml
car_left_system_bar_unprovisioned.xml
car_system_bar.xml
(layout da barra de navegação inferior)car_system_bar_unprovisioned.xml
car_right_system_bar.xml
car_right_system_bar_unprovisioned.xml
Esses layouts devem conter
com.android.systemui.car.systembar.CarSystemBarView
no nível superior, que pode
incluir outras visualizações necessárias. Botões dentro das barras de navegação podem ser incluídos usando o
com.android.systemui.car.systembar.CarSystemBarButton
:
Essas visualizações são infladas em CarSystemBar#createSystemBar
,
se o dispositivo está devidamente provisionado para um determinado usuário.
Barra de status
Considere a barra de status como uma barra de navegação com funcionalidade adicional. Ao contrário da navegação a barra de status não terá um sinalizador para desativá-la. É possível modificar a barra de status com:
car_top_navigation_bar.xml
car_top_navigation_bar_unprovisioned.xml
Esses layouts precisam conter com.android.systemui.statusbar.car.CarNavigationBarView
no nível superior. A barra de status contém ícones de status. Para mudar o tamanho de um ícone, dimensione a
de maneira uniforme com um fator de escala em vez de especificar um tamanho específico. Por exemplo, em uma sobreposição
/overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml
, adicione o
seguintes dimensões para dobrar o tamanho dos ícones:
<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>
A barra de status fica em uma camada de janela especial que também inclui
o painel de notificações, o seletor de usuários, as notificações de alerta (HUNs) e
o bloqueio de teclado. Os vários layouts deles estão incluídos em
super_status_bar.xml
:
Mudanças no código-fonte da interface do sistema
As sobreposições podem não fornecer a flexibilidade necessária para personalizar suficientemente o comportamento da interface do sistema.
Alerta. As mudanças feitas no código-fonte do Android são difíceis de atualizar em versões posteriores do Android. Recomendamos que você estenda o código da interface do sistema automotivo em vez de modificar diretamente o código. Dessa forma, o código-fonte da interface do Automotive System podem ser atualizados com conflitos de mesclagem mínimos, porque todas as personalizações são implementadas por meio de plataformas de API conhecidas.
A maioria dos aspectos da interface do sistema pode ser personalizada por estes dois pontos de entrada:
config_statusBarComponent
config_systemUIFactoryComponent
Por exemplo, se você criar uma classe chamada
com.android.systemui.statusbar.car.custom.CustomCarStatusBar
, que
estende CarStatusBar
, atualize config_statusBarComponent
para apontar
para esse novo componente. A extensão dessa classe permite a personalização da maioria dos elementos pertinentes
à barra de sistema e à lógica de notificações.
Da mesma forma, você pode criar CustomCarSystemUIFactory
e colocá-lo em
config_systemUIFactoryComponent
. Use esta classe para atualizar a funcionalidade do
VolumeUI e tela de bloqueio.
Personalize a troca e o desbloqueio de usuários
O material a seguir descreve como personalizar a experiência de troca do usuário.
Termo | Descrição |
---|---|
Bloqueio do teclado | Caixa de diálogo em tela cheia para evitar interações acidentais com o app em primeiro plano. Protege a privacidade de cada usuário quando vários usuários estão configurados. |
Carregando caixa de diálogo | Tela de carregamento exibida ao alternar entre usuários. |
Tela de bloqueio, pula-pula | Tela que exige que uma pessoa digite um PIN, padrão ou senha. |
Usuário | Usuário Android. |
Seletor de usuários | Tela do seletor de usuário mostrada quando um dispositivo é inicializado. |
Seletor de usuário | Seletor de usuário exibido ao trocar de tela nas Configurações rápidas. |
Personalizar a troca de usuários
Bloqueio de teclado e segurança
No Android Automotive OS, a tela do bloqueio de teclado com um seletor de usuário é exibida apenas. quando um usuário clica no botão Cancelar na tela de bloqueio. A tela do bloqueio de teclado é mostrada abaixo.
Figura 1. Tela do teclado
Uma tela de bloqueio com um aviso é exibida quando o usuário seleciona um tipo de privacidade para desbloqueiem o dispositivo, conforme mostrado abaixo.
Figura 2. Tela de bloqueio.
Quando o bloqueio estiver configurado para acionar ou desligar manualmente, use a seguinte instrução:
adb shell input keyevent 26
Seletor de usuários
A tela do seletor de usuário é mostrada quando um dispositivo é integrado à barra de status da interface do sistema do carro.
e o Maps será reinicializado. Para saber mais, consulte
FullscreenUserSwitcher
:
Figura 3. Tela do seletor de usuários
O layout dessa tela pode ser personalizado
car_fullscreen_user_switcher.xml
:
Tela de carregamento
A tela de carregamento é mostrada sempre que um usuário é alternado, independentemente do ponto de entrada. Para
por meio do seletor de usuário ou da tela "Configurações". A tela de carregamento é essencial para
interface do sistema da biblioteca e mapas para a classe pública chamada
CarUserSwitchingDialog
:
Veja um exemplo na Figura 3 acima.
O tema pode ser personalizado com o
Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog
:
Para configurar o usuário Android, o fluxo inicial do assistente de configuração permite que o motorista configure um usuário o nome deles. Se o motorista associar o usuário do Android a uma Conta do Google, o usuário nome foi selecionado dessa conta. No entanto, se o driver especificar um nome, por exemplo, DriverB, e depois associa esse nome de usuário à Conta do Google dele ao nome de Maddy, a o nome originalmente atribuído (DriverB) não seja alterado porque ele foi definido explicitamente. O motorista pode alterar o nome apenas no menu "Configurações".
O layout pode ser personalizado em car_user_switching_dialog.xml.
Os OEMs podem ocultar a barra de status e navegação usando o tema chamado
NoActionBar.Fullscreen
:
Esta é a interface original do sistema, atualizada para a interface de referência do carro. Para mais informações, consulte
Personalização.
Embora OEMs possam fornecer pontos de entrada de interface do usuário para trocar de usuário, os resultados às vezes podem ser indesejáveis. Se isso ocorrer:
- O OEM cria e mostra a tela (ou caixa de diálogo) de carregamento personalizada.
- Especificamente para a UX, o OEM inicia a tela de carregamento personalizada quando um usuário seleciona os meios para que pode ficar oculta quando a troca do usuário é concluída.
- O OEM precisa definir a prioridade de acordo com a preferência. Por exemplo, um tipo de janela de prioridade mais alta. Prioridade prioridade não pode exceder a do bloqueio de teclado.
- O OEM define
config_customUserSwitchUi=true
no framework principalconfig.xml
, conforme descrito emconfig_customuserswitchui
. Como resultado, o framework não exibiráCarUserSwitchingDialog
.
Personalizar a tela de bloqueio
A tela de bloqueio é parte integrante da interface do sistema, que pode ser personalizada pelo OEM.
Para personalizar o fluxo, comece com frameworks/base/packages/CarSystemUI/
.
Personalizar a configuração de novos usuários
O assistente de configuração realiza a configuração do usuário pela primeira vez. Isso também pode ser personalizado. Você pode use o método APIs UserManager para criar um usuário. Em alguns casos, isso pode ser implementado em segundo plano, simplificando processo do assistente de configuração.