Pengoptimalan gangguan di Setelan Mobil

Pengoptimalan gangguan (DO) disediakan sebagai alat untuk mengurangi interaksi pengemudi dengan aplikasi Setelan saat mobil sedang bergerak. Beberapa setelan mungkin perlu diubah saat mengemudi, sehingga aplikasi tidak diblokir sepenuhnya. Namun, secara default, sebagian besar preferensi dinonaktifkan dengan hanya preferensi utama dan preferensi yang mudah diperbarui yang diaktifkan.

Aplikasi yang diaktifkan saat mengemudi

Gambar 1. Aplikasi yang diaktifkan saat mengemudi

Seluruh aktivitas juga dapat diblokir jika tidak dioptimalkan untuk mengurangi gangguan, seperti yang ditunjukkan di bawah. Metode ini saat ini digunakan terutama untuk penelusuran setelan.

Semua aktivitas diblokir

Gambar 2. Semua aktivitas diblokir

Penyesuaian dasar pada performa DO dapat dilakukan melalui overlay konfigurasi. Jika Anda memerlukan penyesuaian yang lebih terperinci, perubahan tambahan dapat dilakukan melalui kode.

Penyesuaian tingkat tinggi

Jika preferensi dinonaktifkan saat mengemudi, mengetuk preferensi tersebut akan menampilkan pesan toast yang menyatakan bahwa preferensi tidak tersedia saat mengemudi, asalkan preferensi memiliki pengontrol preferensi yang terpasang. Pesan menggunakan string restricted_while_driving, yang dapat disesuaikan dengan overlay (asalkan string kurang dari batas 60 karakter).

Overlay yang disesuaikan

Gambar 3. Overlay yang disesuaikan

Seluruh framework DO dapat dinonaktifkan menggunakan config_always_ignore_ux_restrictions. Menetapkan ini ke true berarti pengemudi dapat berinteraksi dengan setiap aspek aplikasi Setelan.

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

Jika konfigurasi di atas disetel ke salah (false), aplikasi Setelan akan kembali ke config_ignore_ux_restrictions untuk menentukan preferensi yang harus diaktifkan saat mengemudi. String yang disediakan di sini harus mengarah ke string yang ditentukan dalam preference_keys.xml.

Contoh

Untuk menunjukkan cara mengaktifkan setelan bertingkat yang dalam saat mengemudi, contoh ini menunjukkan cara mengaktifkan setelan output Text-to-Speech (TTS). Agar berfungsi, tambahkan semua setelan dalam hierarki ke config_ignore_ux_restrictions. Hal ini mencakup sistem, bahasa dan input, serta preferensi TTS untuk konfigurasi, karena hierarki kami adalah Sistem->Bahasa & Input->Output text-to-speech. Namun, preferensi dalam fragmen text-to-speech masih dinonaktifkan. Untuk mengaktifkannya, kita perlu menambahkan kunci untuk preferensi yang kita inginkan agar dapat diakses. Dalam contoh ini, kita ingin mengaktifkan preferensi pemutaran, tetapi tidak mengaktifkan preferensi mesin sehingga kita menambahkan pk_tts_playback_group ke konfigurasi.

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

Penyesuaian mendetail

Ada beberapa preferensi yang mungkin memerlukan perilaku yang lebih disesuaikan daripada hanya mengaktifkan/menonaktifkan preferensi berdasarkan status mengemudi. Misalnya, Bluetooth dan Wi-Fi telah dimodifikasi untuk menampilkan perangkat Bluetooth atau titik akses Wi-Fi yang disimpan saat mengemudi.

Saat ini tidak ada solusi berbasis konfigurasi untuk melakukan penyesuaian semacam ini. Sebagai gantinya, Anda dapat membuat class kustom yang memperluas PreferenceController dan mengganti onApplyUxRestrictions() untuk membuat perubahan yang diinginkan.

Saat pengontrol preferensi kustom dibuat, Anda dapat menempatkan file XML yang relevan untuk mengganti pengontrol preferensi default dengan implementasi Anda sendiri.

Contoh

Di CarSettings, beberapa preferensi memiliki perilaku yang lebih disesuaikan, yang dapat digunakan sebagai contoh untuk penyesuaian tambahan. Misalnya, dalam daftar titik akses Wi-Fi, perilaku yang diinginkan adalah hanya menampilkan titik akses tersimpan saat mengemudi (dan menyembunyikan yang lainnya). Untuk melakukannya, lakukan hal berikut:

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

Karena titik akses yang muncul di sini sudah dibatasi, Anda tidak ingin menerapkan UxRestrictions tambahan ke preferensi ini. Oleh karena itu, ganti onApplyUxRestrictions dan lakukan tindakan tanpa operasi yang disengaja:

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

Contoh lainnya diberikan di Perangkat yang terikat Bluetooth. Untuk terus mengaktifkan perangkat Bluetooth agar dapat terhubung dan terputus, tetapi ingin menonaktifkan kemampuan mengakses setelan tambahan untuk perangkat ini. Untuk mencapai hal ini, kita lagi mengganti onApplyUxRestrictions, tetapi kali ini, jika batasan NO_SETUP aktif, sembunyikan tindakan sekunder pada preferensi.

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