Pengoptimalan gangguan (DO) disediakan sebagai alat untuk mengurangi interaksi pengemudi dengan aplikasi {i>Settings<i} saat mobil bergerak. Beberapa setelan mungkin perlu diubah saat mengemudi, sehingga aplikasi tidak diblokir sepenuhnya. Namun, secara {i>default<i}, sebagian besar preferensi dinonaktifkan dengan hanya kunci dan preferensi yang diperbarui dengan mudah.
Gambar 1. Aplikasi yang diaktifkan saat mengemudi
Seluruh aktivitas juga dapat diblokir jika gangguannya tidak dioptimalkan, sebagaimana ditunjukkan di bawah ini. Metode ini saat ini digunakan terutama untuk penelusuran setelan.
Gambar 2. Semua aktivitas diblokir
Penyesuaian dasar terhadap kinerja DO dapat dilakukan melalui konfigurasi overlay. Jika Anda memerlukan penyesuaian yang lebih mendetail, perubahan tambahan dapat dibuat melalui kode.
Penyesuaian tingkat tinggi
Jika preferensi dinonaktifkan saat mengemudi, mengetuknya akan menampilkan toast
pesan yang menyatakan bahwa preferensi tidak tersedia saat mengemudi, asalkan preferensinya
memiliki {i>controller<i} preferensi
yang melekat padanya. Pesan ini menggunakan atribut
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 benar (true) berarti {i>driver<i} 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 mana
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 berhasil,
menambahkan semua setelan dalam hierarki ke config_ignore_ux_restrictions
.
Termasuk sistem, bahasa dan {i>input<i}, serta preferensi TTS untuk konfigurasi, karena hierarki kita
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. Di sini
kita ingin mengaktifkan preferensi pemutaran, tetapi tidak mengaktifkan 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 saat mengemudi.
Saat ini tidak ada solusi berbasis
konfigurasi untuk membuat
beberapa penyesuaian. Sebagai gantinya, Anda dapat membuat kelas khusus yang memperluas
PreferenceController dan mengganti onApplyUxRestrictions()
untuk membuat
perubahan.
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 ini, yang dapat digunakan sebagai contoh untuk penyesuaian tambahan. Misalnya, dalam daftar titik akses Wi-Fi, perilaku yang diinginkan adalah hanya menampilkan titik akses yang tersimpan saat mengemudi (dan menyembunyikan 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 pengoperasian:
@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 memungkinkan perangkat Bluetooth terhubung dan terputus, tetapi ingin
menonaktifkan kemampuan untuk mengakses
pengaturan tambahan untuk perangkat ini. Untuk mencapai hal ini, kami
mengganti onApplyUxRestrictions
lagi, namun kali ini, jika NO_SETUP
pembatasan aktif, sembunyikan tindakan sekunder pada preferensi.
@Override protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) { super.onApplyUxRestrictions(uxRestrictions); if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) { updateActionVisibility(getPreference(), /* isActionVisible= */ false); } }