Implementar a interface do sistema

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. O a barra de status também oferece funcionalidades para oferecer suporte a:
  • Ícones de conectividade. Incluindo Bluetooth, Wi-Fi e conexão móvel/ponto de acesso.
  • Painel de notificações suspenso. Por exemplo, deslizar de cima para baixo na tela.
  • Notificações de alerta (HUN, na sigla em inglês).
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. O 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.

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, o 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.

Tela do teclado

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.

Tela de bloqueio

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:

Tela de carregamento

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 exemplo, pelo seletor de usuários ou pela 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:

  1. 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.
  2. O OEM define config_customUserSwitchUi=true no framework principal config.xml, conforme descrito em config_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.