Ottimizzazione della distrazione nelle impostazioni dell'auto

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.

App attive durante la guida

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.

Tutte le attività sono state bloccate

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

Overlay personalizzato

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