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