Optimalisasi gangguan di Pengaturan Mobil

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.

Mengaktifkan aplikasi saat mengemudi

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.

Semua aktivitas diblokir

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

Hamparan yang disesuaikan

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