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

การเพิ่มประสิทธิภาพการรบกวน (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 พารามิเตอร์ การดำเนินการที่ต้องการคือการแสดงจุดเข้าใช้งานที่บันทึกไว้ขณะขับรถเท่านั้น (และซ่อนส่วนที่เหลือ) โดยทำตามขั้นตอนต่อไปนี้

} else if (shouldApplyUxRestrictions(getUxRestrictions())) {
    wifiEntries = getCarWifiManager().getSavedWifiEntries();
} else {
    wifiEntries = getCarWifiManager().getAllWifiEntries();
}

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

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

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

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