Implementar a IU do sistema

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

O que é a IU do sistema?

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

Componente Descrição
IU da tela de bloqueio Tela por meio 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 de faceta para navegação em 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, Página inicial 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 suportar:
  • Ícones de conectividade. Incluindo conexão Bluetooth, Wi-Fi e 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 faz parte de um aplicativo.
IU do alternador de usuários Tela através da qual um usuário pode selecionar um usuário diferente.
IU do 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 interface do usuário do sistema?

A interface do usuário do sistema é um aplicativo Android que é executado quando um dispositivo é ligado. A aplicação é iniciada por reflexão pelo SystemServer . Os pontos de entrada mais relevantes para aspectos visíveis ao usuário da interface do usuário 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 aplicar 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 de maneira controlada. Todos os arquivos modificados são claramente identificados sem percorrer toda a árvore do código-fonte AOSP.

Os arquivos de sobreposição devem ser colocados no diretório PRODUCT_PACKAGE_OVERLAYS e devem ter exatamente as mesmas subpastas que a estrutura raiz do AOSP original. Para Android 10 ou superior, PRODUCT_PACKAGE_OVERLAYS está definido como:

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

A interface do usuário 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 interface do usuário do sistema automotivo.

Para substituir um arquivo, replique a estrutura de diretório 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 , (no SystemUI, não no 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 interface do usuário do sistema automotivo 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 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 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. Os 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 for provisionado adequadamente 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 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 ícone 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ário, notificações de alerta (HUNs) e o protetor de 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 interface do usuário 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 interface do usuário do Automotive System em vez de modificar diretamente o código. Dessa forma, o código-fonte da interface do usuário do Automotive System pode ser atualizado com conflitos mínimos de mesclagem, pois todas as personalizações são implementadas por meio de superfícies de API conhecidas.

A maioria dos aspectos da interface do usuário do sistema pode ser personalizada por meio desses 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 que pertencem à 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
Keyguard Caixa de diálogo de 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ários Tela do seletor de usuário exibida quando um dispositivo é inicializado.
Alternador de usuário Alternador de usuário exibido ao alternar telas de QuickSettings.

Personalize a troca de usuários

Keyguard e segurança

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

Tela de proteção do teclado

Figura 1. Tela de proteção de teclado

Uma tela de bloqueio com um 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 acionar ou desligar manualmente, use as seguintes instruções:

adb shell input keyevent 26

Seletor de usuários

A tela User Picker é exibida quando um dispositivo integral à barra de status da interface do usuário do sistema do carro e aos mapas é reinicializado. Para saber mais, consulte FullscreenUserSwitcher .

Tela de carregamento

Figura 3. Tela de carregamento

O layout desta tela pode ser personalizado 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, por meio do Seletor de Usuário ou da tela Configurações. A tela Carregando é parte integrante da interface do usuário do sistema e mapeia para a classe pública intitulada CarUserSwitchingDialog . Consulte a Figura 3 acima para obter um exemplo.

O tema pode ser customizado 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 driver associar o usuário do Android a uma conta do Google, o nome do usuário será selecionado dessa 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 atribuído originalmente (DriverB) não será alterado porque esse nome foi definido explicitamente. O driver 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 do usuário do sistema original, atualizada para a interface do usuário de referência do carro.) Para obter mais informações, consulte Personalização .

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

  1. O OEM cria e exibe a tela de carregamento personalizada (ou caixa de diálogo).
    • Específico para o UX, o OEM inicia a tela de carregamento personalizada quando um usuário seleciona os meios para alternar, que podem ser ocultados quando a troca do 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 de prioridade 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 tela de bloqueio é parte integrante da interface do usuário 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 do 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.