Pengoptimalan gangguan di Setelan Mobil

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.

Aplikasi yang diaktifkan saat mengemudi

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.

Semua aktivitas diblokir

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

Overlay yang disesuaikan

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