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.
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.
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).
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); } }