Ottimizzazione della distrazione viene fornito come strumento per ridurre l'interazione del conducente con l'app Impostazioni, mentre è in movimento. Potrebbe essere necessario modificare alcune impostazioni durante la guida, in modo che l'app non venga completamente bloccato. Tuttavia, per impostazione predefinita, la maggior parte delle preferenze è disattivata solo con chiavi e possono aggiornare facilmente le preferenze.
Figura 1. App attive durante la guida
Possono essere bloccate anche intere attività se non sono ottimizzate per le distrazioni. come mostrato di seguito. Al momento questo metodo viene utilizzato principalmente per la ricerca nelle impostazioni.
Figura 2. Tutte le attività bloccate
Le personalizzazioni di base sulle prestazioni dell'operazione DO possono essere eseguite attraverso la configurazione in overlay. Se hai bisogno di una personalizzazione più granulare, puoi apportare tramite codice.
Personalizzazione generale
Quando una preferenza viene disattivata durante la guida, il tocco mostra un toast.
messaggio che indica che la preferenza non è disponibile durante la guida, a condizione che la preferenza
ha un controller di preferenze collegato. Il messaggio utilizza
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 disabilitato utilizzando config_always_ignore_ux_restrictions
.
Se viene impostato su true, il conducente può interagire con ogni aspetto
App Impostazioni.
<bool name="config_always_ignore_ux_restrictions">true</bool>
Se la configurazione precedente è impostata su false, l'app Impostazioni utilizza di nuovo
config_ignore_ux_restrictions
per stabilire quali preferenze attivare durante la guida. Le stringhe fornite qui
deve puntare alle stringhe definite in preference_keys.xml.
Esempio
Questo esempio mostra come attivare un'impostazione molto nidificata durante la guida
illustra come attivare le impostazioni di output di Text-to-Speech (TTS). Affinché questa operazione funzioni,
aggiungi tutte le impostazioni della gerarchia a config_ignore_ux_restrictions
.
Ciò include le preferenze di sistema, lingue e input e la sintesi vocale per la configurazione, poiché la nostra gerarchia è
Sistema->Lingue e Input->Output sintesi vocale. Tuttavia, le preferenze
all'interno del frammento di sintesi vocale è ancora disabilitata. Per attivarle,
dobbiamo aggiungere le chiavi per le preferenze che vogliamo rendere accessibili. In questo
Ad esempio, vogliamo abilitare le preferenze di riproduzione, ma non il 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 semplicemente attivando/disattivando una preferenza in base allo stato di guida. Ad esempio: Bluetooth e Wi-Fi sono già stati modificati per mostrare i dispositivi Bluetooth salvati o Punti di accesso Wi-Fi durante la guida.
Al momento, non esiste una soluzione basata sulla configurazione per
aggiustamenti. Puoi invece creare una classe personalizzata che si estende
PreferenceController ed eseguire l'override di onApplyUxRestrictions()
per ottenere
modifiche.
Quando viene creato un controller di preferenze personalizzato, puoi sovrapporre il file XML pertinente per sostituire il controller di preferenza predefinito con la tua implementazione.
Esempi
In Impostazioni Auto, alcune preferenze hanno questo comportamento più personalizzato, che può essere utilizzati come esempi per un'ulteriore personalizzazione. Ad esempio, nell'elenco dei punti di accesso Wi-Fi, la proprietà il comportamento desiderato è mostrare i punti di accesso salvati solo mentre guidi (e nascondi il resto). Per farlo, segui questi passaggi:
} else if (shouldApplyUxRestrictions(getUxRestrictions())) { wifiEntries = getCarWifiManager().getSavedWifiEntries(); } else { wifiEntries = getCarWifiManager().getAllWifiEntries(); }
Poiché i punti di accesso visualizzati qui sono già limitati,
non vuoi applicare ulteriori UxRestrictions
a queste preferenze.
Di conseguenza, sostituisci onApplyUxRestrictions
ed esegui un'operazione intenzionale
autonomo:
@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 è disponibile in Dispositivi associati al Bluetooth.
Per continuare ad attivare la connessione e la disconnessione di dispositivi Bluetooth ma volevamo
disattivare la possibilità di accedere a impostazioni aggiuntive per questi dispositivi. Per raggiungere questo obiettivo,
esegui di nuovo l'override di onApplyUxRestrictions
. Questa volta, se NO_SETUP
è attiva, nascondi l'azione secondaria sulla preferenza.
@Override protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) { super.onApplyUxRestrictions(uxRestrictions); if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) { updateActionVisibility(getPreference(), /* isActionVisible= */ false); } }