Implementar a IU do sistema

O Android Automotive fornece uma nova IU de sistema desenvolvida especificamente para veículos. A maioria dos componentes da UI do sistema estão fortemente acoplados aos serviços da estrutura. A IU do sistema refere-se a qualquer elemento exibido na tela que não faz parte de um aplicativo. A UI do sistema automotivo (no pacote de elementos CarSystemUI) é uma extensão da UI do sistema Android (no pacote SystemUI), que foi personalizada especificamente para veículos.

O que é IU do sistema?

Os componentes específicos da interface do sistema automotivo incluem:

Componente Descrição
IU da tela de bloqueio Tela através da qual os usuários são autenticados em uma conta de usuário específica.
Barra de navegação Barra do sistema que pode ser posicionada à esquerda, inferior ou direita da tela e que pode incluir botões laterais para navegação para diferentes aplicativos, alternar o painel de notificação e fornecer controles do veículo (como HVAC). Isso difere da implementação da IU do sistema Android, que fornece os botões Voltar, Início e pilha de aplicativos.
Barra de status Barra do sistema posicionada ao longo da tela e que serve como barra de navegação. A barra de status também fornece funcionalidades para suporte:
  • Ícones de conectividade. Incluindo Bluetooth, Wi-Fi e conexão Hotspot/Mobile.
  • Painel de notificação suspenso. Por exemplo, deslizando de cima para baixo na tela.
  • Notificações de alerta (HUN).
IU do sistema Refere-se a qualquer elemento exibido na tela que não faça parte de um aplicativo.
IU do alternador de usuário Tela através da qual um usuário pode selecionar um usuário diferente.
UI de volume Caixa de diálogo exibida quando o driver usa botões de volume físico para alterar o volume em um dispositivo.

Como funciona a IU do sistema?

A UI do sistema é um aplicativo Android executado quando um dispositivo é ligado. A aplicação é iniciada através de reflexão pelo SystemServer . Os pontos de entrada mais relevantes para aspectos visíveis ao usuário da UI do sistema estão listados abaixo. Use esses componentes para personalizar a IU do sistema Android para recursos específicos do setor automotivo.

  • config_statusBarComponent
  • config_systemUIFactoryComponent

CarSystemUI é uma extensão do pacote SystemUI, o que significa que classes e recursos no pacote SystemUI podem ser usados ​​e substituídos pelo pacote CarSystemUI.

Personalizando a IU do sistema

Sobreposições

Embora você possa modificar o código-fonte do Android para personalizar a IU do sistema, isso torna mais difícil e complexo a aplicação de 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 compilação 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 devem ser colocados no diretório PRODUCT_PACKAGE_OVERLAYS e devem ter exatamente as mesmas subpastas da estrutura raiz AOSP original. Para Android 10 ou superior, PRODUCT_PACKAGE_OVERLAYS está definido como:

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

A IU do Sistema Automotivo usa recursos dos pacotes SystemUI e CarSystemUI, o que significa que os recursos de cada local podem ser substituídos por sobreposições para afetar a aparência da IU do Sistema Automotivo.

Para substituir um arquivo, replique a estrutura de diretórios do arquivo que está sendo 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 , (em SystemUI, não em 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/

As descrições dos dois principais pontos de entrada de personalização são fornecidas abaixo.

A IU do Automotive System pode ter três barras de navegação à esquerda, 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 possui um estado provisionado e não provisionado, que pode ser customizado sobrepondo os 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 quaisquer outras visualizações necessárias. Botões dentro das 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 funcionalidades adicionais. Ao contrário da barra de navegação, a barra de status não possui um sinalizador para desativá-la. Você pode modificar a barra de status com:

  • car_top_navigation_bar.xml
  • car_top_navigation_bar_unprovisioned.xml

Esses layouts devem conter com.android.systemui.statusbar.car.CarNavigationBarView no nível superior. A barra de status contém ícones de status. Para alterar o tamanho de um ícone, dimensione-o uniformemente 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 reside em uma camada de janela especial que também inclui o painel de notificações, o alternador de usuários, notificações de alerta (HUNs) e a proteção do teclado. Os vários layouts para estes estão incluídos em super_status_bar.xml .

Alterações no código-fonte da IU do sistema

As sobreposições podem não fornecer a flexibilidade necessária para personalizar suficientemente o comportamento da UI do sistema.

Alerta. As alterações feitas no código-fonte do Android serão difíceis de atualizar em versões posteriores do Android. É altamente recomendável que você estenda o código da UI do Sistema Automotivo em vez de modificar diretamente o código. Dessa forma, o código-fonte subjacente da UI do Automotive System pode ser atualizado com conflitos mínimos de mesclagem, uma vez que todas as personalizações são implementadas por meio de superfícies de API conhecidas.

A maioria dos aspectos da IU do sistema pode ser personalizada por meio destes 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 desta classe permite a customização da maioria dos elementos pertencentes à barra do 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 da tela de bloqueio.

Personalize a troca e o desbloqueio de usuários

O material a seguir descreve como personalizar a experiência de troca de usuário.

Prazo Descrição
Protetor de teclado Caixa de diálogo em tela cheia para evitar interação acidental com o aplicativo 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, segurança Tela que exige que uma pessoa insira um PIN, padrão ou senha.
Do utilizador Usuário Android.
Seletor de usuário Tela de seleção de usuário exibida quando um dispositivo é inicializado.
Alternador de usuário Alternador de usuário exibido ao alternar telas no QuickSettings.

Personalize a troca de usuário

Protetor de teclado e segurança

No Android Automotive OS, a tela do Keyguard com um seletor de usuário é exibida somente quando um usuário clica no botão Cancelar na tela de bloqueio. A tela do teclado é mostrada abaixo.

Tela de proteção do teclado

Figura 1. Tela de proteção do teclado

Uma tela de bloqueio com segurança é exibida quando o usuário seleciona um tipo de privacidade para desbloquear o dispositivo, conforme mostrado abaixo.

Tela de bloqueio

Figura 2. Tela de bloqueio.

Quando a trava estiver configurada para ligar ou desligar manualmente, use as seguintes instruções:

adb shell input keyevent 26

Seletor de usuário

A tela Seletor de usuário é exibida quando um dispositivo integrado à barra de status da interface do sistema do carro e ao Maps é reinicializado. Para saber mais, consulte FullscreenUserSwitcher .

Tela de carregamento

Figura 3. Tela de carregamento

O layout desta tela pode ser customizado em car_fullscreen_user_switcher.xml .

Tela de carregamento

A tela Carregando é exibida sempre que um usuário é trocado, independentemente do ponto de entrada. Por exemplo, através do Seletor de usuário ou da tela Configurações. A tela de carregamento é parte integrante da estrutura da UI do sistema e é mapeada para a classe pública intitulada CarUserSwitchingDialog . Veja a Figura 3 acima para ver um exemplo.

O tema pode ser personalizado com Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog .

Para configurar o usuário do Android, o fluxo inicial do Assistente de configuração permite que o driver configure 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 driver especificar um nome, por exemplo DriverB, e posteriormente associar esse nome de usuário à sua Conta do Google com o nome Maddy, o nome originalmente atribuído (DriverB) não será alterado porque esse nome foi definido explicitamente. O driver só pode alterar 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 navegação usando o tema chamado NoActionBar.Fullscreen . (Esta é a IU do sistema original, atualizada para a IU de referência do carro.) Para obter mais informações, consulte Personalização .

Embora os OEMs possam fornecer pontos de entrada de interface de usuário para troca de usuários, os resultados às vezes podem ser indesejáveis. Caso isso ocorra:

  1. O OEM cria e exibe a tela (ou caixa de diálogo) de carregamento personalizada.
    • Específico para o UX, o OEM inicia a tela de carregamento personalizada quando um usuário seleciona os meios de troca, que podem ser ocultados quando a troca de usuário é concluída.
    • O OEM deve definir a janela de prioridade de acordo com sua preferência. Por exemplo, um tipo de janela de prioridade mais alta. A prioridade prioritária não pode exceder a do Keyguard.
  2. O OEM define config_customUserSwitchUi=true na estrutura principal config.xml conforme descrito em config_customuserswitchui . Como resultado, a estrutura não exibe CarUserSwitchingDialog .

Personalize a tela de bloqueio

A Lockscreen é parte integrante da UI do sistema, que pode ser personalizada pelo OEM. Para personalizar o fluxo, comece com frameworks/base/packages/CarSystemUI/ .

Personalize a configuração do usuário iniciante

O Assistente de configuração executa 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 assim o processo do Assistente de Configuração.