Compatibilità con il display dell'auto

La compatibilità del display dell'auto consente alle app per smartphone e tablet di funzionare correttamente sui dispositivi per auto.

Le funzioni includono:

  • Scalabilità DPI: ridimensiona gli elementi UI dell'app in base al DPI del display.
  • Area sicura per il rendering delle app:contiene i contenuti dell'app all'interno di un'area sicura, evitando l'oscuramento da parte degli elementi dell'interfaccia utente di sistema.
  • Logica di classificazione delle app:identifica le app che richiedono la compatibilità con il display dell'auto.

Funzionalità di compatibilità

La piattaforma fornisce diversi meccanismi per ottimizzare il rendering e la scalabilità delle app sui display per auto.

Scalabilità DPI

La funzionalità di scalabilità DPI consente ai produttori di dispositivi di scalare la densità DPI di singole app o di tutte le app che richiedono la compatibilità con il display dell'auto.

Per configurare il ridimensionamento della densità delle app:

  1. Aggiungi un file di configurazione /product/etc/display_compat_config.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
        Each scale factor can have the following attributes
    
        display     (required) Specifies the displayId to which this scale factor will be applied.
        packageName (optional) Specifies the packageName to which the scale factor will be applied.
                    If omitted, the scaling will apply to all packages.
    
        For example:
        <scale display="0" packageName="com.android.car.media.localmediaplayer">0.5</scale>
    
        This means that only package `com.android.car.media.localmediaplayer` on display `0` will be scaled.
    -->
    <config>
    <scale display="0">1.0</scale>
    </config>
    
  2. Per impostare un valore di scala predefinito per tutte le app che richiedono la compatibilità con il display dell'auto, modifica la scala predefinita per il display 0 in <scale display="0">1.0</scale>. Il valore è il valore della scala inversa. Ad esempio, per scalare le app che richiedono la compatibilità con il display dell'auto a 1,5x, imposta il valore di scalabilità su (1 / 1.5) = 0.67:

    <config>
        <scale display="0">0.67</scale>
    </config>
    
  3. Per impostare un valore di scala per un'app specifica, aggiungi un nuovo elemento scale alla configurazione. In questo esempio, YouTube Automotive viene scalato a 1,43x (ad esempio, (1 / 1.43) = 0.7).

    <config>
        <scale display="0">0.67</scale>
        <scale display="0" packageName="com.google.android.apps.automotive.youtube">0.7</scale>
    </config>
    

Se il sistema era in esecuzione quando hai modificato /product/etc/display_compat_config.xml, devi svuotare la cache affinché la nuova configurazione diventi effettiva. Utilizza questa macro per svuotare la cache:

SECURE_SETTING_KEY="android.software.car.display_compatibility:settings:secure"
USER_ID_LIST=$(adb shell cmd user list -v | grep 'id=' | cut -d'=' -f2 | cut -d',' -f1)
for USER_ID in $USER_ID_LIST; do
    echo "Deleting Display Compat config for user: $USER_ID"
    adb shell settings delete secure --user $USER_ID $SECURE_SETTING_KEY
    sleep 1
    echo
done
  1. Aggiungi il file di configurazione e la dichiarazione della funzionalità a una build AAOS, ad esempio, in vendor/OEM_NAME/products/displaycompat:

    # File: vendor/OEM_NAME/products/displaycompat/Android.bp
    
    prebuilt_etc {
        name: "display_compat_config",
        filename: "display_compat_config.xml",
        src: "display_compat_config.xml",
        product_specific: true,
    }
    

Area app sicure

Le app per smartphone e tablet spesso non sono progettate per le barre di sistema di grandi dimensioni presenti in Automotive. Queste app non devono disegnare contenuti sotto le barre di sistema o gli overlay di sistema. In caso contrario, potrebbero visualizzare gli elementi interattivi in un'area oscurata per l'utente finale.

L'area sicura delle app viene implementata utilizzando l'UI scalabile SafeBounds.

Logica di classificazione delle app

Puoi utilizzare CarPackageManager.requiresDisplayCompat(..) per creare funzionalità aggiuntive che migliorano la compatibilità delle app. Ad esempio, puoi utilizzare questa funzionalità per aggiungere un pulsante Indietro o un'interfaccia utente aggiuntiva.

Gli sviluppatori di app possono attivare la compatibilità con il display dell'auto includendo i metadati nel manifest dell'app:

<meta-data
    android:name="android.software.car.display_compatibility"
    android:value="true" />

Il sistema valuta se un'app richiede funzionalità di compatibilità con il display dell'auto utilizzando la seguente logica (valutata in ordine):

  1. Manifest metadata android.software.car.display_compatibility:
    • Se android:value="true"L'app richiede la compatibilità
    • Se android:value="false"L'app non richiede compatibilità
    • Se i metadati non sono presenti, vai al controllo successivo.
  2. Utilizza la funzionalità android.hardware.type.automotive:
    • Se la funzionalità è dichiarata (indipendentemente dal fatto che android:required sia true o false) → L'app non richiede compatibilità
    • Se la funzionalità non è presente, vai al controllo successivo.
  3. Attività nelle app:
    • Se l'app non ha attività (ad esempio RRO, app headless o servizi) → L'app non richiede compatibilità
    • Se l'app ha attività, procedi al controllo successivo.
  4. Informazioni sull'applicazione:
    • Se l'app è privilegiata → L'app non richiede compatibilità
    • Se l'app è un'app di sistema (FLAG_SYSTEM) → L'app non richiede compatibilità
    • In caso contrario, procedi al controllo successivo.
  5. Informazioni sulla firma:
    • Se l'app è firmata dalla piattaforma (firmata con la stessa firma del framework Android) → L'app non richiede compatibilità
    • In caso contrario, procedi al controllo successivo.
  6. Decisione di riserva:
    • Se tutti i controlli vengono superati senza disattivazione → L'app richiede la compatibilità

Vedi CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked.

Assistenza per i dispositivi

I dispositivi che supportano la compatibilità con il display dell'auto devono dichiarare il supporto utilizzando la dichiarazione della funzionalità:

<feature name="android.software.car.display_compatibility" />