Pengoptimalan gangguan (DO) disediakan sebagai alat untuk mengurangi interaksi pengemudi dengan aplikasi Pengaturan saat mobil bergerak. Beberapa pengaturan 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 gangguannya tidak dioptimalkan, seperti yang ditunjukkan di bawah ini. Metode ini saat ini digunakan terutama untuk pencarian pengaturan.
Gambar 2. Semua aktivitas diblokir
Penyesuaian dasar terhadap kinerja DO dapat dilakukan melalui overlay konfigurasi. Jika Anda memerlukan penyesuaian yang lebih menyeluruh, perubahan tambahan dapat dilakukan melalui kode.
Kustomisasi tingkat tinggi
Ketika preferensi dinonaktifkan saat mengemudi, mengetuknya akan menampilkan pesan roti panggang yang menyatakan bahwa preferensi tidak tersedia saat mengemudi, asalkan preferensi tersebut memiliki pengontrol preferensi yang terpasang padanya. Pesan tersebut menggunakan string restricted_while_driving
, yang dapat dikustomisasi dengan overlay (asalkan string tersebut kurang dari batas 60 karakter).
Gambar 3. Hamparan yang disesuaikan
Seluruh kerangka DO dapat dinonaktifkan menggunakan config_always_ignore_ux_restrictions
. Menyetelnya ke true berarti pengemudi dapat berinteraksi dengan setiap aspek aplikasi Pengaturan.
<bool name="config_always_ignore_ux_restrictions">true</bool>
Jika konfigurasi di atas disetel ke false, aplikasi Pengaturan akan kembali ke config_ignore_ux_restrictions
untuk menentukan preferensi mana yang harus diaktifkan saat mengemudi. String yang disediakan di sini harus mengarah ke string yang ditentukan di preference_keys.xml.
Contoh
Untuk memperlihatkan cara mengaktifkan pengaturan yang sangat bertumpuk saat mengemudi, contoh ini menunjukkan cara mengaktifkan pengaturan output Text-to-Speech (TTS). Agar ini berfungsi, tambahkan semua pengaturan dalam hierarki ke config_ignore_ux_restrictions
. Ini termasuk sistem, bahasa dan masukan, serta preferensi TTS pada konfigurasi, karena hierarki kami adalah Sistem->Bahasa & Input->Output teks-ke-ucapan. Namun, preferensi dalam fragmen text-to-speech masih dinonaktifkan. Untuk mengaktifkannya, kita perlu menambahkan kunci untuk preferensi yang ingin kita akses. Dalam contoh ini, kami ingin mengaktifkan preferensi pemutaran tetapi bukan preferensi mesin, jadi kami menambahkan pk_tts_playback_group
ke konfigurasi kami.
<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>
Kustomisasi terperinci
Ada beberapa preferensi yang mungkin memerlukan perilaku yang lebih disesuaikan daripada sekadar mengaktifkan/menonaktifkan preferensi berdasarkan kondisi 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 kelas khusus yang memperluas PreferenceController dan mengganti onApplyUxRestrictions()
untuk membuat perubahan yang diinginkan.
Saat pengontrol preferensi khusus dibuat, Anda dapat menghamparkan file XML yang relevan untuk menggantikan 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 yang disimpan saat mengemudi (dan menyembunyikan sisanya). Untuk mencapai hal ini, lakukan hal berikut:
mAccessPoints = CarUxRestrictionsHelper.isNoSetup(getUxRestrictions()) ? getCarWifiManager().getSavedAccessPoints() : getCarWifiManager().getAllAccessPoints();
Karena titik akses yang muncul di sini sudah dibatasi, Anda tidak ingin menerapkan UxRestrictions
tambahan pada preferensi ini. Oleh karena itu, ganti onApplyUxRestrictions
dan lakukan larangan pengoperasian 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 lain diberikan pada perangkat yang terikat dengan Bluetooth . Untuk terus mengaktifkan perangkat Bluetooth untuk dihubungkan dan diputuskan sambungannya tetapi ingin menonaktifkan kemampuan untuk mengakses pengaturan tambahan untuk perangkat ini. Untuk mencapai hal ini, kami kembali mengganti onApplyUxRestrictions
tetapi kali ini, jika pembatasan 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); } }