O Android Automotive oferece uma nova IU do sistema desenvolvida especificamente para veículos. A maioria dos componentes da IU do sistema estão intimamente acoplados aos serviços de framework. A interface do sistema se refere a qualquer elemento exibido na tela que não faça parte de um app. A interface do sistema Automotive (no pacote de elementos CarSystemUI) é uma extensão da interface do sistema Android (no pacote de interface do sistema), que foi personalizada especificamente para veículos.
O que é a IU do sistema?
Os componentes específicos da interface do sistema automotivo incluem:
Componente | Descrição |
---|---|
Interface 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 | Barra de sistema que pode ser posicionada à esquerda, na parte inferior ou à direita da tela e que pode incluir botões de faceta para navegação em diferentes apps, alternar o painel de notificações e fornecer controles do veículo (como HVAC). Isso é diferente da implementação da interface do sistema Android, que fornece os botões "Voltar", "Tela inicial" e "Pilha de apps". |
Barra de status | Barra do sistema posicionada ao longo da tela e que serve como uma barra de navegação. A
barra de status também oferece funcionalidade para oferecer suporte a:
|
Interface do sistema | Se refere a qualquer elemento exibido na tela que não faz parte de um app. |
Interface do seletor de usuário | Tela em que um usuário pode selecionar outro usuário. |
Interface do volume | Caixa de diálogo exibida quando o driver usa botões físicos de volume para mudar o volume em um dispositivo. |
Como a interface do sistema funciona?
A interface do sistema é um app Android que é executado quando um dispositivo é ligado. O app é iniciado por reflexão pelo SystemServer. Confira abaixo os pontos de entrada mais relevantes para aspectos visíveis ao usuário da interface do sistema. Use esses componentes para personalizar a interface do sistema Android para recursos específicos de veículos.
config_statusBarComponent
config_systemUIFactoryComponent
O 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 seja possível modificar o código-fonte do Android para personalizar a interface do sistema, isso dificulta e torna mais complexo aplicar atualizações futuras 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 build do Android, o sistema de sobreposição substitui os arquivos de maneira controlada. Todos os arquivos modificados são claramente identificados sem percorrer toda a árvore do 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 da estrutura raiz original do AOSP. No Android
10 ou mais recente, PRODUCT_PACKAGE_OVERLAYS
é definido como:
PRODUCT_PACKAGE_OVERLAYS := packages/services/Car/car_product/overlay
A interface do sistema veicular 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 a aparência da interface do sistema veicular.
Para substituir um arquivo, replique a estrutura de diretórios do arquivo a ser substituído no
diretório /overlay
especificado e inclua a substituição nesse
diretório. Por exemplo, para substituir:
frameworks/base/packages/CarSystemUI/res/layout/super_status_bar.xml
Adicione o arquivo super_status_bar.xml
de substituição 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 IU do sistema, não 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 pontos de entrada principais de personalização.
Barra de navegação
A interface do sistema automotivo pode ter três barras de navegação à esquerda, na parte inferior e à direita da 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 os respectivos arquivos de layout:
car_left_system_bar.xml
car_left_system_bar_unprovisioned.xml
car_system_bar.xml
(layout para a barra de navegação inferior)car_system_bar_unprovisioned.xml
car_right_system_bar.xml
car_right_system_bar_unprovisioned.xml
Esses layouts precisam conter
com.android.systemui.car.systembar.CarSystemBarView
no nível superior, que pode
incluir todas as outras visualizações necessárias. Os botões nas barras de navegação podem ser incluídos usando
com.android.systemui.car.systembar.CarSystemBarButton
.
Essas visualizações são infladas em CarSystemBar#createSystemBar
,
se o dispositivo estiver provisionado corretamente para um determinado usuário.
Barra de status
Considere a barra de status como uma barra de navegação com mais funcionalidades. Ao contrário da barra de navegação, a barra de status não tem uma flag 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, especifique uma
escala uniforme com um fator de escala em vez de especificar um tamanho específico. Por exemplo, em um arquivo de sobreposição
/overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml
, adicione as
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 janelas especial que também inclui
o painel de notificações, o seletor de usuários, as notificações heads-up (HUNs) e
a tela de bloqueio. Os vários layouts para eles 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 oferecer a flexibilidade necessária para personalizar o comportamento da IU do sistema.
Alerta. As mudanças feitas no código-fonte do Android são difíceis de atualizar nas versões mais recentes do Android. É altamente recomendável estender o código da interface do sistema automotivo em vez de modificar o código diretamente. Dessa forma, o código-fonte da interface do sistema automotivo pode ser atualizado com conflitos mínimos de mesclagem, porque todas as personalizações são implementadas por superfícies de API conhecidas.
A maioria dos aspectos da interface do sistema pode ser personalizada por esses 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 relacionados
à barra do sistema e à lógica de notificações.
Da mesma forma, é possível criar CustomCarSystemUIFactory
e colocá-lo em
config_systemUIFactoryComponent
. Use essa classe para atualizar a funcionalidade do
VolumeUI e da tela de bloqueio.
Personalizar a troca e o desbloqueio de usuários
O material a seguir descreve como personalizar a experiência de troca de usuário.
Termo | Descrição |
---|---|
Bloqueio do teclado | Caixa de diálogo em tela cheia para evitar a interação acidental com o app em primeiro plano. Protege a privacidade de cada usuário quando vários usuários são configurados. |
Caixa de diálogo de carregamento | Tela de carregamento exibida ao alternar entre usuários. |
Tela de bloqueio, bouncer | Tela que exige que uma pessoa insira um PIN, padrão ou senha. |
Usuário | Usuário do Android. |
Seletor de usuários | Tela de seleção de usuário exibida quando um dispositivo é inicializado. |
Troca de usuário | Troca de usuário exibida ao alternar entre telas nas Configurações rápidas. |
Personalizar a troca de usuário
Bloqueio do teclado e proteção contra acesso não autorizado
No Android Automotive OS, a tela de bloqueio com um seletor de usuário é mostrada somente quando um usuário clica no botão "Cancelar" na tela de bloqueio. A tela de bloqueio é mostrada abaixo.
Figura 1. Tela de bloqueio
Uma tela de bloqueio com um protetor é exibida quando o usuário seleciona um tipo de privacidade para desbloquear o dispositivo, conforme mostrado abaixo.
Figura 2. Tela de bloqueio.
Quando a fechadura estiver configurada para acionar manualmente a energia, use a seguinte instrução:
adb shell input keyevent 26
Seletor de usuários
A tela de seleção de usuários aparece quando um dispositivo integrado à barra de status da interface do sistema do carro e o Maps são reiniciados. Para saber mais, consulte
FullscreenUserSwitcher
.
Figura 3. Tela do seletor de usuários
O layout dessa tela pode ser personalizado em
car_fullscreen_user_switcher.xml
.
Tela de carregamento
A tela de carregamento aparece sempre que um usuário é trocado, independente do ponto de entrada. Por
exemplo, pelo seletor de usuários ou pela tela "Configurações". A tela de carregamento é parte integrante da
interface do sistema do framework e é mapeada para a classe pública
CarUserSwitchingDialog
.
Confira a Figura 3 acima para ver um exemplo.
O tema pode ser personalizado com o
Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog
.
Para configurar o usuário do Android, o fluxo inicial do Assistente de configuração permite que o motorista defina um nome de usuário para si mesmo. Se o motorista associar o usuário do Android a uma Conta do Google, o nome do usuário será selecionado nessa conta. No entanto, se o motorista especificar um nome, por exemplo, MotoristaB, e depois associar esse nome de usuário à Conta do Google com o nome de Maddy, o nome atribuído originalmente (MotoristaB) não será alterado porque foi definido explicitamente. O motorista só pode mudar o nome no menu "Configurações".
O layout pode ser personalizado em car_user_switching_dialog.xml.
Os OEMs podem ocultar a barra de status e de navegação usando o tema
NoActionBar.Fullscreen
.
Essa é a interface do sistema original, atualizada para a interface de referência do carro. Para mais informações, consulte
Personalização.
Embora os OEMs possam fornecer pontos de entrada da interface do usuário para alternar usuários, às vezes os resultados podem ser indesejáveis. Se isso acontecer:
- O OEM cria e mostra a tela de carregamento (ou caixa de diálogo) personalizada.
- Específico à UX, o OEM inicia a tela de carregamento personalizada quando um usuário seleciona a forma de alternância, que pode ser oculta quando a troca do usuário é concluída.
- O OEM precisa definir a janela de prioridade de acordo com a preferência. Por exemplo, um tipo de janela de prioridade mais alta. A prioridade prioritária 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 exibeCarUserSwitchingDialog
.
Personalizar a tela de bloqueio
A tela de bloqueio é uma 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 inicial do usuário
O assistente de configuração realiza a configuração do usuário pela primeira vez. Isso também pode ser personalizado. Você pode usar as APIs UserManager para criar um usuário. Em alguns casos, isso pode ser implementado em segundo plano, simplificando o processo do assistente de configuração.