Ottimizzazione della distrazione nelle Impostazioni auto

L'ottimizzazione della distrazione (DO) viene fornita come strumento per ridurre l'interazione del conducente con l'app Impostazioni mentre l'auto è in movimento. Potrebbe essere necessario modificare alcune impostazioni durante la guida, in modo che l'app non venga bloccata completamente. Tuttavia, per impostazione predefinita, la maggior parte delle preferenze sono disabilitate e sono abilitate solo le preferenze chiave e facilmente aggiornabili.

App abilitate durante la guida

Figura 1. App abilitate durante la guida

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

Tutte le attività bloccate

Figura 2. Tutte le attività bloccate

Le personalizzazioni di base per le prestazioni di DO possono essere eseguite tramite sovrapposizioni di configurazione. Se è necessaria una personalizzazione più dettagliata, è possibile apportare ulteriori modifiche tramite codice.

Personalizzazione di alto livello

Quando una preferenza è disabilitata durante la guida, toccandola viene visualizzato un messaggio di avviso che informa che la preferenza non è disponibile durante la guida, a condizione che alla preferenza sia collegato un controller delle preferenze. Il messaggio utilizza la stringa restricted_while_driving , che può essere personalizzata con una sovrapposizione (a condizione che la stringa sia inferiore al limite di 60 caratteri).

Sovrapposizione personalizzata

Figura 3. Sovrapposizione personalizzata

L'intero framework DO può essere disabilitato utilizzando config_always_ignore_ux_restrictions . Impostarlo su true significa che il conducente può interagire con ogni aspetto dell'app Impostazioni.

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

Se la configurazione precedente è impostata su false, l'app Impostazioni ricorre a config_ignore_ux_restrictions per determinare quali preferenze devono essere abilitate durante la guida. Le stringhe fornite qui dovrebbero puntare alle stringhe definite in preference_keys.xml.

Esempio

Per mostrare come abilitare un'impostazione profondamente nidificata durante la guida, questo esempio mostra come abilitare le impostazioni di output della sintesi vocale (TTS). Affinché funzioni, aggiungi tutte le impostazioni nella gerarchia a config_ignore_ux_restrictions . Ciò include il sistema, le lingue, l'input e le preferenze TTS nella configurazione, poiché la nostra gerarchia è Sistema->Lingue e input->Output di sintesi vocale. Tuttavia, le preferenze all'interno del frammento di sintesi vocale sono ancora disabilitate. Per abilitarli, dobbiamo aggiungere le chiavi per le preferenze che vogliamo siano accessibili. In questo esempio, vogliamo abilitare le preferenze di riproduzione ma non le preferenze 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

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

Attualmente non esiste una soluzione basata sulla configurazione per apportare questo tipo di modifiche. Puoi invece creare una classe personalizzata che estende PreferenceController e sovrascrive onApplyUxRestrictions() per apportare le modifiche desiderate.

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 un'ulteriore personalizzazione. Ad esempio, nell'elenco dei punti di accesso Wi-Fi , il comportamento desiderato è mostrare solo i punti di accesso salvati durante la guida (e nascondere il resto). Per raggiungere questo obiettivo, procedere come segue:

mAccessPoints = CarUxRestrictionsHelper.isNoSetup(getUxRestrictions())
               ? getCarWifiManager().getSavedAccessPoints()
               : getCarWifiManager().getAllAccessPoints();

Poiché i punti di accesso visualizzati qui sono già limitati, non vuoi applicare ulteriori UxRestrictions a queste preferenze. Pertanto, sovrascrivi onApplyUxRestrictions ed esegui una no-op 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 nei dispositivi collegati tramite Bluetooth . Per continuare ad abilitare la connessione e la disconnessione dei dispositivi Bluetooth, ma volevo disabilitare la possibilità di accedere a impostazioni aggiuntive per questi dispositivi. Per raggiungere questo obiettivo, sovrascriviamo nuovamente onApplyUxRestrictions ma questa volta, se la restrizione NO_SETUP è attiva, nascondiamo l'azione secondaria sulla preferenza.

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