Ottimizzazione della distrazione nelle Impostazioni auto

L'ottimizzazione per le distrazioni (OD) viene fornita come strumento per ridurre l'interazione del conducente con l'app Impostazioni mentre l'auto è in movimento. Alcune impostazioni potrebbero dover essere modificate durante la guida, quindi l'app non viene bloccata completamente. Tuttavia, per impostazione predefinita, la maggior parte delle preferenze è disattivata e vengono attivate solo quelle chiave e facilmente aggiornate.

App consentite durante la guida

Figura 1. App consentite durante la guida

È possibile bloccare anche intere attività se non sono ottimizzate per ridurre le distrazioni, come mostrato di seguito. Questo metodo è attualmente utilizzato principalmente per la ricerca nelle impostazioni.

Tutte le attività bloccate

Figura 2. Tutte le attività bloccate

Le personalizzazioni di base delle prestazioni di DO possono essere eseguite tramite overlay di configurazione. Se hai bisogno di una personalizzazione più granulare, puoi apportare ulteriori modifiche tramite il codice.

Personalizzazione di alto livello

Quando una preferenza è disattivata durante la guida, toccandola viene visualizzato un messaggio popup che indica che la preferenza non è disponibile durante la guida, a condizione che sia associato un controllo delle preferenze. Il messaggio utilizza la stringa restricted_while_driving, che può essere personalizzata con un overlay (a condizione che la stringa sia inferiore al limite di 60 caratteri).

Overlay personalizzato

Figura 3. Overlay personalizzato

L'intero framework DO può essere disattivato utilizzando config_always_ignore_ux_restrictions. Se imposti questo valore su true, il conducente può interagire con ogni aspetto dell'app Impostazioni.

<bool name="config_always_ignore_ux_restrictions">true</bool>

Se la configurazione riportata sopra è impostata su false, l'app Impostazioni utilizza config_ignore_ux_restrictions per determinare quali preferenze devono essere attivate durante la guida. Le stringhe fornite qui devono puntare alle stringhe definite in preference_keys.xml.

Esempio

Per mostrare come attivare un'impostazione nidificata in modo approfondito durante la guida, questo esempio illustra come attivare le impostazioni di output della sintesi vocale (TTS). Affinché funzioni, aggiungi tutte le impostazioni della gerarchia a config_ignore_ux_restrictions. Sono incluse le preferenze di sistema, lingua e immissione e TTS nella configurazione, poiché la nostra gerarchia è Sistema->Lingue e immissione->Output sintesi vocale. Tuttavia, le preferenze all'interno del frammento di sintesi vocale sono ancora disattivate. Per attivarle, dobbiamo aggiungere le chiavi per le preferenze che vogliamo siano accessibili. In questo esempio, vogliamo attivare le preferenze di riproduzione, ma non la preferenza del motore, quindi aggiungiamo pk_tts_playback_group alla nostra configurazione.

<string-array name="config_ignore_ux_restrictions">
    [...]
    <item>@string/pk_system_settings_entry</item>
    <item>@string/pk_languages_and_input_settings</item>
    <item>@string/pk_tts_settings_entry</item>
    <item>@string/pk_tts_playback_group</item>
</string-array>

Personalizzazione dettagliata

Alcune preferenze potrebbero richiedere un comportamento più personalizzato rispetto alla semplice attivazione/disattivazione di una preferenza in base allo stato di guida. Ad esempio, il Bluetooth e il Wi-Fi sono già stati modificati per mostrare i dispositivi Bluetooth o i punti di accesso Wi-Fi salvati durante la guida.

Al momento non esiste una soluzione basata sulla configurazione per apportare questo tipo di aggiustamenti. In alternativa, puoi creare una classe personalizzata che estenda PreferenceController e sostituisca onApplyUxRestrictions() per apportare le modifiche necessarie.

Quando viene creato un controller delle preferenze personalizzato, puoi sovrapporre il file XML pertinente per sostituire il controller delle preferenze predefinito con la tua implementazione.

Esempi

In CarSettings, alcune preferenze hanno questo comportamento più personalizzato, che può essere utilizzato come esempio per ulteriori personalizzazioni. Ad esempio, nell'elenco dei punti di accesso Wi-Fi, il comportamento auspicato è mostrare solo i punti di accesso salvati durante la guida (e nascondere il resto). Per farlo:

} else if (shouldApplyUxRestrictions(getUxRestrictions())) {
    wifiEntries = getCarWifiManager().getSavedWifiEntries();
} else {
    wifiEntries = getCarWifiManager().getAllWifiEntries();
}

Poiché i punti di accesso visualizzati qui sono già limitati, non vuoi applicare UxRestrictions aggiuntivi a queste preferenze. Pertanto, sostituisci onApplyUxRestrictions ed esegui un'operazione non operazione intenzionale:

@Override
protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
    // Since the list dynamically changes based on the UX restrictions, we
    // enable this fragment regardless of the restriction. Intentional no-op.
}

Un altro esempio è fornito nella sezione Dispositivi accoppiati tramite Bluetooth. Per continuare a consentire la connessione e la disconnessione dei dispositivi Bluetooth, ma disattivare la possibilità di accedere a impostazioni aggiuntive per questi dispositivi. Per farlo, abbiamo nuovamente sostituito onApplyUxRestrictions, ma questa volta, se la limitazione NO_SETUP è attiva, nascondiamo l'azione secondaria nella preferenza.

@Override
protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
    super.onApplyUxRestrictions(uxRestrictions);
    if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) {
        updateActionVisibility(getPreference(), /* isActionVisible= */ false);
    }
}