Implementare l'UI di sistema

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

Che cos'è l'interfaccia utente di sistema?

I componenti specifici dell'interfaccia utente del sistema per auto includono:

Componente Descrizione
Interfaccia utente della schermata di blocco Schermata tramite la quale gli utenti vengono autenticati in 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 di aspetto per passare da un'app all'altra, attivare/disattivare il riquadro delle notifiche e fornire controlli del veicolo (ad esempio l'impianto di climatizzazione). Questo è diverso dall'implementazione dell'interfaccia utente di sistema di Android, che fornisce i pulsanti Indietro, Home e app-stack.
Barra di stato Barra di sistema posizionata lungo lo schermo e che funge da barra di navigazione. La barra di stato offre anche funzionalità per supportare:
  • Icone di connettività. Sono inclusi Bluetooth, Wi-Fi e connessione hotspot/mobile.
  • Riquadro delle notifiche a discesa. Ad esempio, scorrendo verso il basso dalla parte superiore dello schermo.
  • Notifiche in primo piano (HUN).
UI di sistema Si riferisce a qualsiasi elemento visualizzato sullo schermo che non fa parte di un'app.
Interfaccia utente del selettore utente Schermata tramite la quale un utente può selezionare un altro utente.
Interfaccia utente del volume Finestra di dialogo visualizzata quando il conducente utilizza i pulsanti del volume fisici per regolare il volume su un dispositivo.

Come funziona l'interfaccia utente di sistema?

L'interfaccia utente di sistema è un'app Android che viene eseguita quando un dispositivo viene acceso. L'app viene avviata tramite la riflessione da parte di SystemServer. Di seguito sono elencati i punti di contatto più pertinenti per gli aspetti visibili all'utente dell'interfaccia utente di sistema. Utilizza questi componenti per personalizzare l'interfaccia utente di sistema di Android per funzionalità specifiche per i veicoli.

  • 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 sostituite dal pacchetto CarSystemUI.

Personalizzare l'interfaccia utente di sistema

Overlay

Sebbene tu possa modificare il codice sorgente di Android per personalizzare l'interfaccia utente di sistema, in questo modo l'applicazione di futuri aggiornamenti di Android diventa più difficile e complessa. Android supporta invece l'utilizzo di una directory overlay, che ti consente di sostituire i file di risorse senza modificare il codice sorgente. Nel sistema di build di Android, il sistema di overlay sostituisce i file in modo controllato. Tutti i file modificati sono identificati chiaramente senza dover esaminare l'intero albero del codice sorgente AOSP.

I file overlay devono essere posizionati nella directory PRODUCT_PACKAGE_OVERLAYS e devono avere esattamente le stesse sottocartelle della struttura principale 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 per auto utilizza le risorse dell'interfaccia utente di sistema e dei pacchetti CarSystemUI, il che significa che le risorse di ogni posizione possono essere sostituite con overlay per influire sul look-and-feel dell'interfaccia utente del sistema per auto.

Per sostituire un file, replica la struttura di directory del file da sostituire nella directory /overlay specificata e poi includi la sostituzione nella directory. Ad esempio, per sostituire:

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

Aggiungi il file super_status_bar.xml sostitutivo in:

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

Per sostituire frameworks/base/packages/SystemUI/res/values/config.xml (nella UI di sistema, non CarSystemUI), aggiungi il file config.xml di sostituzione 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 sono riportate le descrizioni dei due punti di contatto principali per la personalizzazione.

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

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

Ogni barra ha uno stato di provisioning e di mancata esecuzione del 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 contenerecom.android.systemui.car.systembar.CarSystemBarView a livello superiore, che può includere eventuali altre visualizzazioni necessarie. 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 provisioning del dispositivo è stato eseguito correttamente 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 dispone di un flag per la disattivazione. 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 primo livello. La barra di stato contiene le icone di stato. Per modificare le dimensioni di un'icona, scalala uniformemente con un fattore di scala anziché specificare una dimensione specifica. Ad esempio, in un file /overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml di overlay, aggiungi le seguenti dimensioni per raddoppiare le dimensioni 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 si trova in un livello di finestre speciale che include anche il pannello delle notifiche, il selettore utente, le notifiche in primo piano e la schermata di blocco. I vari layout 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 in modo sufficiente il comportamento dell'interfaccia utente di sistema.

Avviso. Le modifiche apportate al codice sorgente di Android sono difficili da aggiornare nelle release successive di Android. Ti consigliamo vivamente di estendere il codice dell'interfaccia utente del sistema auto e non di modificarlo direttamente. In questo modo, il codice sorgente dell'interfaccia utente del sistema auto e motori di base può essere sottoposto ad upgrade con conflitti di unione minimi, perché tutte le personalizzazioni vengono implementate tramite interfacce API note.

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

  • config_statusBarComponent
  • config_systemUIFactoryComponent

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

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

Personalizzare il cambio utente e lo sblocco

I seguenti materiali descrivono come personalizzare l'esperienza di cambio utente.

Termine Descrizione
Keyguard 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 configurati più utenti.
Caricamento della finestra di dialogo in corso… Schermata di caricamento visualizzata quando si passa da un utente all'altro.
Schermata di blocco, bouncer Schermata che richiede a una persona di inserire un PIN, una sequenza o una password.
Utente Utente Android.
Selettore di utenti Schermata di selezione dell'utente visualizzata all'avvio di un dispositivo.
Selettore utente Selettore utente visualizzato quando si cambia schermata dalle Impostazioni rapide.

Personalizzare il cambio utente

Keyguard e bouncer

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

Schermata della schermata di blocco

Figura 1. Schermata della schermata di blocco

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

Schermata di blocco

Figura 2. Schermata di blocco.

Quando la serratura è impostata per attivare o disattivare manualmente l'alimentazione, segui le istruzioni riportate di seguito:

adb shell input keyevent 26

Selettore utente

La schermata di scelta dell'utente viene visualizzata quando viene riavviato un dispositivo integrato nella barra di stato dell'interfaccia utente di sistema dell'auto e Maps. Per scoprire di più, consulta FullscreenUserSwitcher.

Schermata di caricamento

Figura 3. Schermata del selettore 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 viene eseguito il passaggio a un utente, indipendentemente dal punto di contatto. Ad esempio, tramite il selettore di utenti o la schermata Impostazioni. La schermata di caricamento è parte integrante dell'UI di sistema del framework e si mappa alla classe pubblica CarUserSwitchingDialog. Vedi 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 il conducente associa l'utente Android a un Account Google, il nome dell'utente viene selezionato da quell'account. Tuttavia, se il conducente specifica un nome, ad esempio Autista B, e in un secondo momento associa quel nome utente al proprio Account Google con il nome di Maddy, il nome assegnato inizialmente (Autista B) non viene modificato perché è stato impostato esplicitamente. Il conducente può cambiare 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 utilizzando il tema NoActionBar.Fullscreen. Si tratta dell'interfaccia utente di sistema originale, aggiornata per l'interfaccia utente di riferimento dell'auto. Per ulteriori informazioni, consulta la sezione Personalizzazione.

Sebbene gli OEM possano fornire punti di contatto dell'interfaccia utente per cambiare utente, a volte i risultati possono essere indesiderati. In questi casi:

  1. L'OEM crea e mostra la schermata di caricamento (o la finestra di dialogo) personalizzata.
    • Specifico per l'esperienza utente, l'OEM avvia la schermata di caricamento personalizzata quando un utente seleziona il mezzo per eseguire il passaggio, che può essere nascosto al termine del passaggio dell'utente.
    • L'OEM deve impostare la finestra prioritaria in base alle proprie preferenze. Ad esempio, un tipo di finestra con priorità più elevata. La priorità non può superare quella della schermata di blocco.
  2. L'OEM imposta config_customUserSwitchUi=true nel framework di base config.xml come descritto in config_customuserswitchui. Come risultato, il framework non mostra CarUserSwitchingDialog.

Personalizzare 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/.

Personalizzare la configurazione iniziale dell'utente

La configurazione guidata esegue la configurazione dell'utente al primo utilizzo. Anche questo può essere personalizzato. Puoi utilizzare le API UserManager per creare un utente. In alcuni casi, questa operazione può essere eseguita in background, semplificando così la procedura della configurazione guidata.