Implementare l'interfaccia utente del sistema

Android Automotive fornisce una nuova interfaccia utente di sistema sviluppata appositamente per i veicoli. La maggior parte dei componenti dell'interfaccia utente del sistema sono strettamente collegati ai servizi framework. L'interfaccia utente del sistema si riferisce a qualsiasi elemento visualizzato sullo schermo che non fa parte di un'app. L'interfaccia utente del sistema automobilistico (nel pacchetto elemento CarSystemUI) è un'estensione dell'interfaccia utente del sistema Android (nel pacchetto UI sistema), che è stata personalizzata appositamente per i veicoli.

Cos'è l'interfaccia utente del sistema?

I componenti specifici dell'interfaccia utente del sistema automobilistico includono:

Componente Descrizione
Interfaccia utente della schermata di blocco Schermata attraverso la quale gli utenti vengono autenticati per un account utente specifico.
Barra di navigazione Barra di sistema che può essere posizionata a sinistra, in basso o a destra dello schermo e che può includere pulsanti laterali per la navigazione in diverse app, attivare/disattivare il pannello delle notifiche e fornire controlli del veicolo (come HVAC). Ciò è diverso dall'implementazione dell'interfaccia utente del sistema Android, che fornisce i pulsanti Indietro, Home e stack di app.
Barra di stato Barra di sistema posizionata lungo lo schermo e che funge da barra di navigazione. La barra di stato fornisce inoltre funzionalità per supportare:
  • Icone di connettività. Inclusi Bluetooth, Wi-Fi e connessione Hotspot/Mobile.
  • Pannello delle notifiche a discesa. Ad esempio, scorrendo verso il basso dalla parte superiore dello schermo.
  • Notifiche avvisate (HUN).
Interfaccia utente del sistema Si riferisce a qualsiasi elemento visualizzato sullo schermo che non fa parte di un'app.
Interfaccia utente del cambio utente Schermata attraverso la quale un utente può selezionare un utente diverso.
Interfaccia utente del volume Finestra di dialogo visualizzata quando il conducente utilizza i pulsanti fisici del volume per modificare il volume su un dispositivo.

Come funziona l'interfaccia utente del sistema?

L'interfaccia utente di sistema è un'app Android che viene eseguita quando il dispositivo è acceso. L'app viene avviata tramite riflessione da SystemServer . I punti di ingresso più rilevanti per gli aspetti visibili all'utente dell'interfaccia utente del sistema sono elencati di seguito. Utilizza questi componenti per personalizzare l'interfaccia utente del sistema Android per funzionalità specifiche del settore automobilistico.

  • config_statusBarComponent
  • config_systemUIFactoryComponent

CarSystemUI è un'estensione del pacchetto System UI, il che significa che le classi e le risorse nel pacchetto System UI possono essere utilizzate e sovrascritte dal pacchetto CarSystemUI.

Personalizza l'interfaccia utente del sistema

Sovrapposizioni

Sebbene sia possibile modificare il codice sorgente Android per personalizzare l'interfaccia utente del sistema, ciò rende più difficile e complessa l'applicazione dei futuri aggiornamenti Android. Android supporta invece l'uso di una directory sovrapposta, che consente di sostituire i file di risorse senza modificare il codice sorgente. Nel sistema di build Android, il sistema di sovrapposizione sovrascrive i file in modo controllato. Tutti i file modificati vengono chiaramente identificati senza attraversare l'intero albero del codice sorgente AOSP.

I file overlay devono essere inseriti nella directory PRODUCT_PACKAGE_OVERLAYS e devono avere esattamente le stesse sottocartelle della struttura root AOSP originale. Per Android 10 o versioni successive, PRODUCT_PACKAGE_OVERLAYS è impostato su:

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

L'interfaccia utente del sistema automobilistico utilizza le risorse dell'interfaccia utente del sistema e dei pacchetti CarSystemUI, il che significa che le risorse di ciascuna posizione possono essere sovrascritte con sovrapposizioni per influenzare l'aspetto dell'interfaccia utente del sistema automobilistico.

Per sostituire un file, replica la struttura della directory del file da sostituire nella directory /overlay specificata e quindi includi la sostituzione in quella directory. Ad esempio, per sostituire:

frameworks/base/packages/CarSystemUI/res/layout/super_status_bar.xml

Aggiungi il file sostitutivo super_status_bar.xml situato in:

packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/

Per sostituire frameworks/base/packages/SystemUI/res/values/config.xml , (nell'interfaccia utente di sistema, non in CarSystemUI), aggiungere il file config.xml sostitutivo a:

packages/services/Car/car_product/overlay/frameworks/base/packages/SystemUI/res/layout/

O

packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/

Di seguito vengono fornite le descrizioni dei due punti di ingresso principali della personalizzazione.

L'interfaccia utente del sistema automobilistico può avere tre barre di navigazione a sinistra, in basso e a destra dello schermo. La visibilità di ciascuna barra di sistema viene attivata/disattivata con le seguenti configurazioni:

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

Ogni barra ha uno stato con provisioning e uno senza provisioning, che può essere personalizzato sovrapponendo i rispettivi file di layout:

  • car_left_system_bar.xml
  • car_left_system_bar_unprovisioned.xml
  • car_system_bar.xml (layout per la barra di navigazione in basso)
  • car_system_bar_unprovisioned.xml
  • car_right_system_bar.xml
  • car_right_system_bar_unprovisioned.xml

Questi layout devono contenere com.android.systemui.car.systembar.CarSystemBarView al livello più alto, che può includere qualsiasi altra vista necessaria. I pulsanti all'interno delle barre di navigazione possono essere inclusi utilizzando com.android.systemui.car.systembar.CarSystemBarButton .

Queste visualizzazioni vengono gonfiate in CarSystemBar#createSystemBar , se il dispositivo è adeguatamente predisposto per un determinato utente.

Barra di stato

Considera la barra di stato come una barra di navigazione con funzionalità aggiuntive. A differenza della barra di navigazione, la barra di stato non ha un flag per disabilitarla. Puoi modificare la barra di stato con:

  • car_top_navigation_bar.xml
  • car_top_navigation_bar_unprovisioned.xml

Questi layout devono contenere com.android.systemui.statusbar.car.CarNavigationBarView al livello più alto. La barra di stato contiene le icone di stato. Per modificare la dimensione di un'icona, ridimensiona l'icona in modo uniforme con un fattore di scala invece di specificare una dimensione specifica. Ad esempio, in un file di sovrapposizione /overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml , aggiungi le seguenti dimensioni per raddoppiare la dimensione delle icone:

<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>

La barra di stato risiede in uno speciale livello di finestre che include anche il pannello delle notifiche, il cambio utente, le notifiche heads-up (HUN) e lo scudo tastiera. I vari layout per questi sono inclusi in super_status_bar.xml .

Modifiche al codice sorgente dell'interfaccia utente del sistema

Le sovrapposizioni potrebbero non fornire la flessibilità necessaria per personalizzare sufficientemente il comportamento dell'interfaccia utente del sistema.

Mettere in guardia. Le modifiche apportate al codice sorgente Android sono difficili da aggiornare nelle versioni successive di Android. Ti consigliamo vivamente di estendere il codice dell'interfaccia utente di Automotive System invece di modificare direttamente il codice. In questo modo, il codice sorgente dell'interfaccia utente del sistema automobilistico sottostante può essere aggiornato con conflitti di unione minimi perché tutte le personalizzazioni vengono implementate tramite superfici API note.

La maggior parte degli aspetti dell'interfaccia utente del sistema può essere personalizzata tramite questi due punti di ingresso:

  • config_statusBarComponent
  • config_systemUIFactoryComponent

Ad esempio, se crei una classe denominata com.android.systemui.statusbar.car.custom.CustomCarStatusBar , che estende CarStatusBar , aggiorna config_statusBarComponent in modo che punti a questo nuovo componente. L'estensione di questa classe consente la personalizzazione della maggior parte degli elementi relativi alla barra di sistema e alla logica delle notifiche.

Allo stesso modo, puoi creare CustomCarSystemUIFactory e inserirlo in config_systemUIFactoryComponent . Utilizza questa classe per aggiornare la funzionalità di VolumeUI e della schermata di blocco.

Personalizza il cambio e lo sblocco dell'utente

Il materiale seguente descrive come personalizzare l'esperienza di cambio utente.

Termine Descrizione
Protezione tastiera Finestra di dialogo a schermo intero per impedire l'interazione accidentale con l'app in primo piano. Protegge la privacy di ogni utente quando sono impostati più utenti.
Finestra di dialogo di caricamento Schermata di caricamento visualizzata quando si passa da un utente all'altro.
Schermata di blocco, buttafuori Schermata che richiede a una persona di inserire un PIN, una sequenza o una password.
Utente Utente Android.
Selettore utente Schermata di selezione utente visualizzata all'avvio di un dispositivo.
Cambio utente Selettore utente visualizzato quando si passa da una schermata all'altra da QuickSettings.

Personalizza il cambio utente

Copritastiera e buttafuori

Nel sistema operativo Android Automotive, la schermata Keyguard con un selettore utente viene visualizzata solo quando un utente fa clic sul pulsante Annulla nella schermata di blocco. La schermata Blocco tastiera è mostrata di seguito.

Schermata di protezione della tastiera

Figura 1. Schermata Blocco tastiera

Una schermata di blocco con un buttafuori viene visualizzata quando l'utente ha selezionato un tipo di privacy con cui sbloccare il dispositivo, come mostrato di seguito.

Blocca schermo

Figura 2. Schermata di blocco.

Quando il blocco è impostato per attivare o disattivare manualmente l'alimentazione, utilizzare le seguenti istruzioni:

adb shell input keyevent 26

Selettore utente

La schermata di selezione utente viene visualizzata quando un dispositivo integrato nella barra di stato dell'interfaccia utente di sistema dell'auto e in Maps viene riavviato. Per ulteriori informazioni, consulta FullscreenUserSwitcher .

Schermata di caricamento

Figura 3. Schermata di selezione utente

Il layout di questa schermata può essere personalizzato in car_fullscreen_user_switcher.xml .

Schermata di caricamento

La schermata di caricamento viene visualizzata ogni volta che si cambia utente, indipendentemente dal punto di ingresso. Ad esempio, tramite il selettore utente o la schermata Impostazioni. La schermata di caricamento è parte integrante dell'interfaccia utente del sistema framework ed è mappata alla classe pubblica intitolata CarUserSwitchingDialog . Vedere la Figura 3 sopra per un esempio.

Il tema può essere personalizzato con Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog .

Per configurare l'utente Android, il flusso iniziale della configurazione guidata consente al conducente di impostare un nome utente per se stesso. Se poi il conducente associa l'utente Android a un account Google, il nome utente viene selezionato da quell'account. Tuttavia, se il conducente specifica un nome, ad esempio DriverB, e successivamente associa il nome utente al proprio account Google con il nome Maddy, il nome originariamente assegnato (DriverB) non viene modificato perché tale nome è stato impostato esplicitamente. Il conducente può modificare il nome solo nel menu Impostazioni.

Il layout può essere personalizzato in car_user_switching_dialog.xml .

Gli OEM possono nascondere lo stato e la barra di navigazione utilizzando il tema denominato NoActionBar.Fullscreen . (Questa è l'interfaccia utente del sistema originale, aggiornata per l'interfaccia utente di riferimento dell'auto.) Per ulteriori informazioni, vedere Personalizzazione .

Sebbene gli OEM possano fornire punti di ingresso dell'interfaccia utente per cambiare utente, i risultati a volte possono essere indesiderati. Se ciò dovesse verificarsi:

  1. L'OEM crea e visualizza la schermata (o finestra di dialogo) di caricamento personalizzata.
    • Specifico per UX, l'OEM avvia la schermata di caricamento personalizzata quando un utente seleziona il mezzo per cambiare, che può essere nascosta una volta completato il cambio utente.
    • L'OEM deve impostare la finestra di priorità in base alle proprie preferenze. Ad esempio, un tipo di finestra con priorità più alta. La priorità della priorità non può superare quella dello scudo tastiera.
  2. L'OEM imposta config_customUserSwitchUi=true nel framework principale config.xml come descritto in config_customuserswitchui . Di conseguenza, il framework non visualizza CarUserSwitchingDialog .

Personalizza la schermata di blocco

La schermata di blocco è parte integrante dell'interfaccia utente del sistema, che può essere personalizzata dall'OEM. Per personalizzare il flusso, iniziare con frameworks/base/packages/CarSystemUI/ .

Personalizza la configurazione del primo utente

La configurazione guidata esegue la configurazione dell'utente per la prima volta. Anche questo può essere personalizzato. È possibile utilizzare le API UserManager per creare un utente. In alcuni casi, ciò può essere implementato in background, semplificando così il processo di installazione guidata.