การเพิ่มประสิทธิภาพการเบี่ยงเบนความสนใจในการตั้งค่ารถยนต์

การเพิ่มประสิทธิภาพการเบี่ยงเบนความสนใจ (DO) เป็นเครื่องมือในการลดการโต้ตอบของผู้ขับขี่กับแอพการตั้งค่าในขณะที่รถกำลังเคลื่อนที่ อาจจำเป็นต้องเปลี่ยนการตั้งค่าบางอย่างในขณะขับรถ ดังนั้นแอปจึงไม่ถูกบล็อกโดยสมบูรณ์ อย่างไรก็ตาม ตามค่าเริ่มต้น การตั้งค่าส่วนใหญ่จะถูกปิดใช้งานโดยเปิดใช้งานเฉพาะการตั้งค่าที่สำคัญและอัปเดตได้อย่างง่ายดาย

เปิดใช้งานแอพในขณะขับรถ

รูปที่ 1 แอปที่เปิดใช้งานในขณะขับรถ

กิจกรรมทั้งหมดสามารถถูกบล็อกได้หากไม่ได้เพิ่มประสิทธิภาพการรบกวนสมาธิ ดังที่แสดงด้านล่าง ปัจจุบันวิธีนี้ใช้สำหรับการค้นหาการตั้งค่าเป็นหลัก

กิจกรรมทั้งหมดถูกบล็อก

รูปที่ 2 กิจกรรมทั้งหมดถูกบล็อก

การปรับแต่งพื้นฐานสำหรับประสิทธิภาพของ DO สามารถทำได้ผ่านการซ้อนทับการกำหนดค่า หากคุณต้องการการปรับแต่งแบบละเอียดมากขึ้น การเปลี่ยนแปลงเพิ่มเติมสามารถทำได้ผ่านโค้ด

การปรับแต่งระดับสูง

เมื่อการตั้งค่าถูกปิดใช้งานในขณะขับรถ การแตะที่การตั้งค่านั้นจะแสดงข้อความแจ้งว่าการตั้งค่านั้นไม่พร้อมใช้งานในขณะขับรถ โดยที่การตั้งค่านั้นมีตัวควบคุมการตั้งค่าติดอยู่ ข้อความใช้สตริง restricted_while_driving ซึ่งสามารถปรับแต่งด้วยการซ้อนทับได้ (หากสตริงมีความยาวน้อยกว่าขีดจำกัด 60 อักขระ)

การซ้อนทับที่กำหนดเอง

รูปที่ 3 การซ้อนทับแบบกำหนดเอง

กรอบงาน DO ทั้งหมดสามารถปิดการใช้งานได้โดยใช้ config_always_ignore_ux_restrictions การตั้งค่านี้เป็นจริงหมายความว่าคนขับสามารถโต้ตอบกับทุกแง่มุมของแอพการตั้งค่าได้

<bool name="config_always_ignore_ux_restrictions">true</bool>

หากการกำหนดค่าข้างต้นถูกตั้งค่าเป็นเท็จ แอปการตั้งค่าจะย้อนกลับไปที่ config_ignore_ux_restrictions เพื่อพิจารณาว่าควรเปิดใช้งานการตั้งค่าใดขณะขับรถ สตริงที่จัดเตรียมไว้ที่นี่ควรชี้ไปที่สตริงที่กำหนดไว้ใน preference_keys.xml.

ตัวอย่าง

เพื่อแสดงวิธีเปิดใช้งานการตั้งค่าที่ซ้อนกันอย่างลึกซึ้งในขณะขับรถ ตัวอย่างนี้จะสาธิตวิธีเปิดใช้งานการตั้งค่าเอาต์พุตข้อความเป็นคำพูด (TTS) เพื่อให้ได้ผล ให้เพิ่มการตั้งค่าทั้งหมดในลำดับชั้นไปที่ config_ignore_ux_restrictions ซึ่งรวมถึงระบบ ภาษาและการป้อนข้อมูล และการตั้งค่า TTS ในการกำหนดค่า เนื่องจากลำดับชั้นของเราคือ ระบบ -> ภาษาและการป้อนข้อมูล -> เอาต์พุตข้อความเป็นคำพูด อย่างไรก็ตาม การตั้งค่าภายในส่วนของข้อความเป็นคำพูดยังคงปิดใช้งานอยู่ เพื่อเปิดใช้งาน เราจำเป็นต้องเพิ่มคีย์สำหรับการตั้งค่าที่เราต้องการให้สามารถเข้าถึงได้ ในตัวอย่างนี้ เราต้องการเปิดใช้งานการตั้งค่าการเล่น แต่ไม่ใช่การตั้งค่ากลไก ดังนั้นเราจึงเพิ่ม pk_tts_playback_group ให้กับการกำหนดค่าของเรา

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

การปรับแต่งโดยละเอียด

มีการตั้งค่าบางอย่างที่อาจต้องมีพฤติกรรมที่ได้รับการปรับแต่งมากกว่าการเปิด/ปิดใช้งานการตั้งค่าตามสถานะการขับขี่ ตัวอย่างเช่น บลูทูธและ Wi-Fi ได้รับการแก้ไขแล้วเพื่อแสดงอุปกรณ์บลูทูธที่บันทึกไว้หรือจุดเข้าใช้งาน Wi-Fi ขณะขับรถ

ขณะนี้ยังไม่มีโซลูชันที่ใช้การกำหนดค่าเพื่อทำการปรับเปลี่ยนประเภทนี้ คุณสามารถสร้างคลาสแบบกำหนดเองที่ขยาย PreferenceController และแทนที่ onApplyUxRestrictions() เพื่อทำการเปลี่ยนแปลงที่ต้องการได้

เมื่อมีการสร้างตัวควบคุมการกำหนดค่าตามความชอบแบบกำหนดเอง คุณสามารถซ้อนทับไฟล์ XML ที่เกี่ยวข้องเพื่อแทนที่ตัวควบคุมการกำหนดค่าตามความชอบดีฟอลต์ด้วยการใช้งานของคุณเอง

ตัวอย่าง

ใน CarSettings การตั้งค่าบางอย่างจะมีพฤติกรรมที่ได้รับการปรับแต่งมากกว่านี้ ซึ่งสามารถใช้เป็นตัวอย่างในการปรับแต่งเพิ่มเติมได้ ตัวอย่างเช่น ใน รายการจุดเข้าใช้งาน Wi-Fi ลักษณะการทำงานที่ต้องการคือแสดงเฉพาะจุดเข้าใช้งานที่บันทึกไว้ในขณะขับรถ (และซ่อนส่วนที่เหลือ) เพื่อให้บรรลุเป้าหมายนี้ ให้ทำดังต่อไปนี้:

mAccessPoints = CarUxRestrictionsHelper.isNoSetup(getUxRestrictions())
               ? getCarWifiManager().getSavedAccessPoints()
               : getCarWifiManager().getAllAccessPoints();

เนื่องจากจุดเข้าใช้งานที่ปรากฏที่นี่ถูกจำกัดอยู่แล้ว คุณจึงไม่ต้องการใช้ UxRestrictions เพิ่มเติมกับการตั้งค่าเหล่านี้ ดังนั้น ให้แทนที่ onApplyUxRestrictions และดำเนินการ no-op โดยเจตนา:

@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.
}

อีกตัวอย่างหนึ่งมีให้ใน อุปกรณ์ที่เชื่อมต่อด้วย Bluetooth เพื่อเปิดใช้งานอุปกรณ์ Bluetooth ต่อไปเพื่อเชื่อมต่อและยกเลิกการเชื่อมต่อ แต่ต้องการปิดการใช้งานความสามารถในการเข้าถึงการตั้งค่าเพิ่มเติมสำหรับอุปกรณ์เหล่านี้ เพื่อให้บรรลุเป้าหมายนี้ เราจะแทนที่ onApplyUxRestrictions อีกครั้ง แต่คราวนี้ หากข้อจำกัด NO_SETUP ทำงานอยู่ ให้ซ่อนการดำเนินการรองในการตั้งค่า

@Override
protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
    super.onApplyUxRestrictions(uxRestrictions);
    if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) {
        updateActionVisibility(getPreference(), /* isActionVisible= */ false);
    }
}