Otimização de distrações nas configurações do carro

Otimização de distrações (DO, na sigla em inglês) é fornecido como uma ferramenta para reduzir a interação do motorista com o aplicativo Configurações, enquanto o carro está se movendo. Talvez seja preciso mudar algumas configurações enquanto você dirige, para que o app não seja está totalmente bloqueado. No entanto, por padrão, a maioria das preferências é desativada apenas com chaves preferências atualizadas facilmente.

Apps ativados enquanto você dirige

Figura 1. Apps ativados enquanto você dirige

Atividades inteiras também podem ser bloqueadas se não forem otimizadas para distração. conforme mostrado abaixo. Atualmente, esse método é usado principalmente para a pesquisa de configurações.

Todas as atividades foram bloqueadas

Figura 2. Todas as atividades foram bloqueadas

Personalizações básicas no desempenho de DO podem ser feitas pela configuração sobreposições. Se você precisar de uma personalização mais detalhada, é possível fazer alterações ser feita por código.

Personalização de alto nível

Quando uma preferência estiver desativada enquanto você dirige, um aviso será mostrado ao tocar nela informando que a preferência não está disponível ao dirigir, desde que a preferência tem um controlador de preferências anexado a ela. A mensagem usa o String restricted_while_driving, que pode ser personalizada com uma sobreposição (contanto que a string tenha menos que o limite de 60 caracteres).

Sobreposição personalizada

Figura 3. Sobreposição personalizada

Todo o framework DO pode ser desativado usando config_always_ignore_ux_restrictions. Se for definida como verdadeira, o motorista poderá interagir com todos os aspectos da App Configurações.

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

Se a configuração acima for definida como falsa, o app Configurações vai usar config_ignore_ux_restrictions para determinar quais preferências devem ser ativadas ao dirigir. As strings fornecidas aqui precisa apontar para as strings definidas em preference_keys.xml..

Exemplo

Neste exemplo, mostramos como ativar uma configuração aninhada em muitos níveis ao dirigir, demonstra como ativar as configurações de saída da conversão de texto em voz (TTS). Para que isso funcione, adicione todas as configurações da hierarquia à config_ignore_ux_restrictions. Isso inclui o sistema, os idiomas, a entrada e as preferências de TTS para a configuração, já que nossa hierarquia é Sistema->Idiomas e Entrada->Conversão de texto em voz. No entanto, as preferências no fragmento de conversão de texto em voz ainda está desativado. Para ativá-las, precisamos adicionar as chaves das preferências que queremos disponibilizar. Neste exemplo, queremos ativar as preferências de reprodução, mas não o mecanismo preferência, então adicionamos pk_tts_playback_group à nossa configuração.

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

Personalização detalhada

Algumas preferências podem exigir um comportamento mais personalizado do que simplesmente ativar/desativar uma preferência com base no estado de condução. Por exemplo: O Bluetooth e o Wi-Fi já foram modificados para mostrar dispositivos Bluetooth salvos ou Pontos de acesso Wi-Fi enquanto dirige.

No momento, não existe uma solução baseada em configuração para tornar ajustes. Em vez disso, é possível criar uma classe personalizada que estende PreferenceController e substitui onApplyUxRestrictions() para tornar o resultado mudanças.

Quando um controlador de preferências personalizadas é criado, é possível sobrepor o arquivo XML relevante. para substituir o controlador de preferências padrão pela sua própria implementação.

Exemplos

No CarSettings, algumas preferências têm esse comportamento mais personalizado, que pode ser usadas como exemplos para personalização adicional. Por exemplo, na lista de pontos de acesso Wi-Fi, o o comportamento desejado é mostrar apenas os pontos de acesso salvos enquanto dirige (e ocultar o restante). Para isso, faça o seguinte:

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

Como os pontos de acesso que aparecem aqui já estão restritos, você não quiser aplicar mais UxRestrictions a essas preferências. Portanto, substitua onApplyUxRestrictions e execute uma ambiente autônomo:

@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.
}

Outro exemplo é fornecido em dispositivos conectados por Bluetooth. Para continuar permitindo que dispositivos Bluetooth sejam conectados e desconectados, mas quisesse desativar o acesso a configurações adicionais para esses dispositivos. Para fazer isso, nós substituir onApplyUxRestrictions novamente, mas, desta vez, se o NO_SETUP está ativa, oculte a ação secundária na preferência.

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