Implementare l'interfaccia utente del sistema

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

Che cos'è l'interfaccia utente di sistema?

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

Componente Descrizione
Schermata di blocco dell'interfaccia utente Schermata attraverso la quale gli utenti vengono autenticati su 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 sfaccettati per la navigazione in diverse app, attivare il pannello delle notifiche e fornire i controlli del veicolo (come HVAC). Ciò differisce 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 anche funzionalità per supportare:
  • Icone di connettività. Include Bluetooth, Wi-Fi e Hotspot/connessione mobile.
  • Pannello di notifica a discesa. Ad esempio, scorrendo verso il basso dalla parte superiore dello schermo.
  • Notifiche anticipate (HUN).
Interfaccia utente del sistema Si riferisce a qualsiasi elemento visualizzato sullo schermo che non fa parte di un'app.
Interfaccia utente del selettore utente Schermata attraverso la quale un utente può selezionare un altro utente.
Interfaccia utente del volume Finestra di dialogo visualizzata quando il driver utilizza i pulsanti del volume fisico per modificare il volume su un dispositivo.

Come funziona l'interfaccia utente di sistema?

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

  • config_statusBarComponent
  • config_systemUIFactoryComponent

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

Personalizzazione dell'interfaccia utente del sistema

Sovrapposizioni

Sebbene tu possa modificare il codice sorgente di Android per personalizzare l'interfaccia utente di sistema, ciò rende più difficile e complesso l'applicazione di futuri aggiornamenti Android. Invece, Android supporta l'uso di una directory overlay, 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 sono chiaramente identificati senza attraversare l'intero albero del codice sorgente AOSP.

I file di overlay devono essere inseriti nella directory PRODUCT_PACKAGE_OVERLAYS e devono avere esattamente le stesse sottocartelle della struttura radice 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 di SystemUI e dei pacchetti CarSystemUI, il che significa che le risorse di ciascuna posizione possono essere sovrascritte con sovrapposizioni per influire sull'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 super_status_bar.xml sostitutivo che si trova in:

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

Per sostituire frameworks/base/packages/SystemUI/res/values/config.xml , (in SystemUI, non CarSystemUI), aggiungi 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 della personalizzazione principale.

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 è alternata con le seguenti configurazioni:

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

Ogni barra ha uno stato fornito e non fornito, 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 superiore, che può includere qualsiasi altra visualizzazione 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 è stato correttamente 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 superiore. La barra di stato contiene 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 finestra che include anche il pannello delle notifiche, lo switcher utente, le notifiche head-up (HUN) e il keyguard. I vari layout per questi sono inclusi in super_status_bar.xml .

Modifiche al codice sorgente dell'interfaccia utente di sistema

Gli overlay potrebbero non fornire la flessibilità necessaria per personalizzare sufficientemente il comportamento dell'interfaccia utente di sistema.

Mettere in guardia. Le modifiche apportate al codice sorgente di Android saranno difficili da aggiornare nelle versioni successive di Android. Si consiglia vivamente di estendere il codice dell'interfaccia utente del sistema automobilistico 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 poiché 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 che riguardano la barra di sistema e la logica delle notifiche.

Allo stesso modo, puoi creare CustomCarSystemUIFactory e inserirlo in config_systemUIFactoryComponent . Usa questa classe per aggiornare la funzionalità di VolumeUI e lockscreen.

Personalizza il cambio e lo sblocco degli utenti

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

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

Personalizza il cambio utente

Keyguard 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 Keyguard è mostrata di seguito.

Schermo di protezione della tastiera

Figura 1. Schermata Keyguard

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'accensione, utilizzare le seguenti istruzioni:

adb shell input keyevent 26

Selettore utente

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

Schermata di caricamento

Figura 3. Schermata di caricamento

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 di sistema del framework ed è associata 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 di installazione guidata iniziale consente al driver di impostare un nome utente per se stesso. Se il driver associa quindi l'utente Android a un account Google, il nome utente viene selezionato da tale account. Tuttavia, se il conducente specifica un nome, ad esempio DriverB, e successivamente associa quel nome utente al proprio account Google con il nome di Maddy, il nome originariamente assegnato (DriverB) non viene modificato perché quel nome è stato impostato in modo esplicito. 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 la barra di stato e di navigazione usando 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 accesso all'interfaccia utente per cambiare utente, i risultati a volte possono essere indesiderati. Se ciò dovesse accadere:

  1. L'OEM crea e visualizza la schermata di caricamento (o finestra di dialogo) personalizzata.
    • Specifico per l'UX, l'OEM avvia la schermata di caricamento personalizzata quando un utente seleziona il mezzo per passare, che può essere nascosta quando il passaggio dell'utente è completato.
    • 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à di priorità non può superare quella del Keyguard.
  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 di sistema, che può essere personalizzata dall'OEM. Per personalizzare il flusso, inizia con frameworks/base/packages/CarSystemUI/ .

Personalizza la configurazione dell'utente per la prima volta

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