Optimalisasi Gangguan di Pengaturan Mobil

Distraction Optimization (DO) disediakan sebagai alat untuk mengurangi interaksi pengemudi dengan aplikasi Pengaturan saat mobil bergerak. Karena beberapa pengaturan mungkin perlu diubah saat mengemudi, aplikasi tidak sepenuhnya diblokir. Namun, secara default, sebagian besar preferensi dinonaktifkan dengan hanya kunci dan preferensi yang mudah diperbarui yang diaktifkan.

Aplikasi yang diaktifkan saat mengemudi

Gambar 1. Aplikasi yang diaktifkan saat mengemudi

Seluruh aktivitas juga dapat diblokir jika gangguan 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

Kustomisasi dasar untuk kinerja DO dapat dilakukan melalui overlay konfigurasi. Jika Anda memerlukan penyesuaian yang lebih halus, perubahan tambahan dapat dilakukan melalui kode.

Kustomisasi Tingkat Tinggi

Saat preferensi dinonaktifkan saat mengemudi, mengetuknya akan menampilkan pesan roti panggang yang menyatakan bahwa preferensi tidak tersedia saat mengemudi, asalkan preferensi memiliki pengontrol preferensi yang terpasang padanya. Pesan menggunakan string restricted_while_driving , yang dapat dikustomisasi dengan overlay (asalkan string kurang dari batas 60 karakter).

Hamparan yang disesuaikan

Gambar 3. Hamparan yang disesuaikan

Seluruh kerangka kerja DO dapat dinonaktifkan menggunakan config_always_ignore_ux_restrictions . Menyetel ini 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 menunjuk ke string yang didefinisikan dalam preference_keys.xml.

Contoh

Untuk menunjukkan cara mengaktifkan pengaturan yang sangat berlapis 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 input, dan preferensi TTS untuk konfigurasi, karena hierarki kami adalah System->Languages ​​& Input->Text-to-speech output. Namun, preferensi dalam fragmen text-to-speech akan tetap 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 sehingga kami akan 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 Rinci

Ada beberapa preferensi yang mungkin memerlukan perilaku yang lebih disesuaikan daripada sekadar mengaktifkan/menonaktifkan preferensi berdasarkan status mengemudi. Misalnya, bluetooth dan wifi telah dimodifikasi untuk menampilkan perangkat bluetooth yang disimpan atau titik akses wifi 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 menimpa onApplyUxRestrictions() untuk membuat perubahan yang diinginkan.

Setelah pengontrol preferensi khusus dibuat, Anda dapat melapisi file XML yang relevan untuk menggantikan 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 disimpan saat mengemudi (dan menyembunyikan sisanya). Untuk mencapai 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 ke preferensi ini. Oleh karena itu, timpa onApplyUxRestrictions dan lakukan larangan 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 lain disediakan di perangkat berikat Bluetooth . Untuk terus mengaktifkan perangkat Bluetooth agar terhubung dan terputus, tetapi ingin menonaktifkan kemampuan untuk mengakses pengaturan tambahan untuk perangkat ini. Untuk mencapai ini, kami kembali menimpa 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);
    }
}