คู่มือการผสานรวมสำหรับ OEM

หน้านี้อธิบายวิธีประมวลผลการป้อนข้อมูลด้วยปุ่มหมุนใน VHAL, กำหนดค่าบิลด์ให้รวมบริการปุ่มหมุน และวิธีปรับแต่งประสบการณ์การใช้งานปุ่มหมุนในแอปทั้งหมด สำหรับแอป OEM ที่ติดตั้งไว้ล่วงหน้า เช่น Launcher ที่ OEM จัดหาให้ โปรดดู Car UI Library (car-ui-library)

VHAL

ตัวควบคุมปุ่มหมุนรองรับการดำเนินการต่อไปนี้

  • เลื่อนขึ้น ลง ซ้าย และขวา
  • หมุนตามเข็มนาฬิกาและทวนเข็มนาฬิกา
  • กดปุ่มตรงกลาง
  • กดปุ่มย้อนกลับ
  • กดปุ่มหน้าแรก
  • กดปุ่มอื่นๆ เช่น ปุ่มโทรศัพท์และปุ่มสื่อ

โปรดดูเอกสารประกอบเกี่ยวกับพร็อพเพอร์ตี้ของระบบและ int32Values ที่เกี่ยวข้องได้ที่ hardware/interfaces/automotive/vehicle/2.0/types.hal

VHAL ควรจัดการการดำเนินการต่อไปนี้

เลื่อน

เมื่อผู้ใช้ดันตัวควบคุมปุ่มหมุนไปทางขวา VHAL ควรใช้พร็อพเพอร์ตี้ HW_KEY_INPUT ที่มี int32Values ต่อไปนี้เพื่อส่งเหตุการณ์ไปยัง Android

  1. ACTION_DOWN
  2. KEYCODE_SYSTEM_NAVIGATION_RIGHT
  3. จอแสดงผลเป้าหมาย

เมื่อผู้ใช้ปล่อยตัวควบคุมปุ่มหมุน VHAL ควรใช้พร็อพเพอร์ตี้และคีย์โค้ดเดียวกันกับ ACTION_UP การเลื่อนไปในทิศทางอื่นๆ ควรใช้คีย์โค้ดที่เกี่ยวข้อง

ไม่มีคีย์โค้ดสำหรับแนวทแยง แต่ VHAL สามารถรวมเหตุการณ์แนวนอนและแนวตั้งเพื่อสร้างแนวทแยงได้หากฮาร์ดแวร์รองรับแนวทแยง ตัวอย่างเช่น การเลื่อนขึ้นและไปทางซ้ายควรสร้างเหตุการณ์ต่อไปนี้

  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_DOWN
  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_DOWN

การปล่อยตัวควบคุมปุ่มหมุน (ไม่ว่าจะปล่อยตามลำดับใด) ควรสร้างเหตุการณ์ต่อไปนี้

  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_UP
  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_UP

ผู้ใช้อาจดันตัวควบคุมปุ่มหมุนไปในทิศทางตั้งฉากก่อนที่จะปล่อย ตัวอย่างเช่น สถานการณ์สมมติต่อไปนี้

ทิศทางตั้งฉาก
รูปที่ 1 ทิศทางตั้งฉาก

การดำเนินการนี้ควรสร้างลำดับเหตุการณ์ต่อไปนี้

  1. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_DOWN
  2. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_DOWN
  3. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_UP
  4. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_UP

ไม่ควรสร้างเหตุการณ์ repeat ขณะที่กดตัวควบคุมปุ่มหมุนค้างไว้ในทิศทางเดียว

หมุน

เมื่อผู้ใช้หมุนตัวควบคุมปุ่มหมุนตามเข็มนาฬิกา 1 ระยะ (คลิก) VHAL ควรใช้พร็อพเพอร์ตี้ HW_ROTARY_INPUT ที่มี int32Values ต่อไปนี้เพื่อส่งเหตุการณ์ไปยัง Android

  1. ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION
  2. 1 ระยะ (คลิก)
  3. จอแสดงผลเป้าหมาย

ควรตั้งค่าการประทับเวลาของเหตุการณ์เป็นเวลาที่ผ่านไปในหน่วยนาโนวินาที

การหมุนทวนเข็มนาฬิกา 1 ระยะ (คลิก) ควรสร้างเหตุการณ์เดียวกัน แต่มีค่า -1 สำหรับจำนวนระยะ (คลิก)

หากมีการหมุนหลายระยะ (คลิก) ในทิศทางเดียวกันอย่างรวดเร็ว VHAL ควรนำระยะ (คลิก) มารวมกันเป็นเหตุการณ์เดียวเพื่อไม่ให้ระบบมีเหตุการณ์มากเกินไป ในกรณีนี้ การประทับเวลาของเหตุการณ์ควรเป็นเวลาที่เกิดการหมุนระยะ (คลิก) แรก int32Values ควรมีจำนวนนาโนวินาทีระหว่างการหมุนระยะ (คลิก) ที่ต่อเนื่องกัน

ตัวอย่างเช่น ลำดับการหมุนต่อไปนี้

  • ที่เวลา t0 ผู้ใช้หมุนทวนเข็มนาฬิกา 1 ระยะ (คลิก)
  • ที่เวลา t0 + 5 ns ผู้ใช้หมุนทวนเข็มนาฬิกา 1 ระยะ (คลิก)
  • ที่เวลา t0 + 8 ns ผู้ใช้หมุนทวนเข็มนาฬิกา 1 ระยะ (คลิก)

ควรสร้างเหตุการณ์ต่อไปนี้

  • พร็อพเพอร์ตี้: HW_ROTARY_INPUT
  • การประทับเวลา: t0
  • int32Values:
    1. ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION
    2. -3 (หมุนทวนเข็มนาฬิกา 3 ระยะ (คลิก))
    3. จอแสดงผลเป้าหมาย
    4. 5 ns ระหว่างระยะ (คลิก) แรกกับระยะ (คลิก) ที่ 2
    5. 3 ns ระหว่างระยะ (คลิก) ที่ 2 กับระยะ (คลิก) ที่ 3

ปุ่มตรงกลาง

เมื่อผู้ใช้กดปุ่มตรงกลาง VHAL ควรใช้พร็อพเพอร์ตี้ HW_KEY_INPUT ที่มี int32Values ต่อไปนี้เพื่อส่งเหตุการณ์ไปยัง Android

  1. ACTION_DOWN
  2. KEYCODE_DPAD_CENTER
  3. จอแสดงผลเป้าหมาย

เมื่อผู้ใช้ปล่อยตัวควบคุมปุ่มหมุน VHAL ควรใช้พร็อพเพอร์ตี้และคีย์โค้ดเดียวกันกับ ACTION_UP

อย่าสร้างเหตุการณ์ repeat เมื่อกดปุ่มตรงกลางค้างไว้

ปุ่มย้อนกลับ

เมื่อผู้ใช้กดปุ่มย้อนกลับ VHAL ควรใช้พร็อพเพอร์ตี้ HW_KEY_INPUT ที่มี int32Values ต่อไปนี้เพื่อส่งเหตุการณ์ไปยัง Android

  1. ACTION_DOWN
  2. KEYCODE_BACK
  3. จอแสดงผลเป้าหมาย

เมื่อผู้ใช้ปล่อยตัวควบคุมปุ่มหมุน VHAL ควรใช้พร็อพเพอร์ตี้และคีย์โค้ดเดียวกันกับ ACTION_UP

ไม่ควรสร้างเหตุการณ์ repeat ขณะที่กดปุ่มตรงกลางค้างไว้

ปุ่มหน้าแรก

จัดการปุ่มหน้าแรกเช่นเดียวกับปุ่มย้อนกลับ แต่ใช้ KEYCODE_HOME แทน KEYCODE_BACK

ปุ่มอื่นๆ

หากตัวควบคุมปุ่มหมุนมีปุ่มเพิ่มเติม VHAL สามารถจัดการปุ่มเหล่านั้นได้ตามที่ OEM ต้องการ เนื่องจากระบบ Android ไม่ถือว่าปุ่มเหล่านั้นเป็นส่วนหนึ่งของปุ่มหมุน โดยปกติแล้วระบบจะจัดการปุ่มเหล่านี้เหมือนกับปุ่มย้อนกลับและปุ่มหน้าแรก แต่ใช้คีย์โค้ดที่แตกต่างกัน เช่น KEYCODE_CALL หรือ KEYCODE_MUSIC

การกำหนดค่าบิวด์

การนำทางด้วยปุ่มหมุนมีให้ใช้งานโดยบริการการช่วยเหลือพิเศษที่เรียกว่า RotaryService หากต้องการรวมบริการนี้ไว้ในอิมเมจระบบสำหรับอุปกรณ์ ให้เพิ่มบรรทัดต่อไปนี้ลงในไฟล์ Make

PRODUCT_PACKAGES += CarRotaryController

นอกจากนี้ คุณอาจต้องการรวมแพ็กเกจต่อไปนี้ไว้ในบิลด์การแก้ไขข้อบกพร่อง

ระบบจะเปิดใช้บริการปุ่มหมุนโดยอัตโนมัติเมื่ออุปกรณ์บูตและเมื่อมีการเปลี่ยนผู้ใช้ ซึ่งจะช่วยให้ผู้ใช้ใช้ตัวควบคุมปุ่มหมุนได้ในระหว่างการตั้งค่า

หากคุณใช้บิลด์เดียวกันสำหรับรถยนต์ที่มีและไม่มีตัวควบคุมปุ่มหมุน ให้เพิ่ม CarRotaryController ตามที่แสดงไว้ด้านบนเพื่อให้โค้ดที่จำเป็นรวมอยู่ในบิลด์ หากต้องการป้องกันไม่ให้เปิดใช้บริการปุ่มหมุนในรถยนต์ที่ไม่มีปุ่มหมุน ให้สร้าง RRO แบบคงที่เพื่อวางซ้อนทรัพยากรสตริง rotaryService ใน packages/services/Car/service ด้วยสตริงว่าง คุณจะใช้บิลด์เดียวกัน แต่มีการกำหนดค่าผลิตภัณฑ์แยกกันสำหรับอุปกรณ์ที่มีและไม่มีปุ่มหมุน โดยมีเพียงอุปกรณ์ที่มีปุ่มหมุนเท่านั้นที่จะมีการวางซ้อน

การปรับแต่ง

OEM สามารถปรับแต่งตรรกะการค้นหาโฟกัส การไฮไลต์โฟกัส และรายการเพิ่มเติมบางรายการผ่านการวางซ้อนทรัพยากรในตำแหน่งต่อไปนี้

  • car-ui-library อยู่ใน packages/apps/Car/libs/car-ui-lib
  • RotaryService อยู่ใน packages/apps/Car/RotaryController
  • Core อยู่ใน frameworks/base/core

ประวัติการเลื่อน

OEM สามารถกำหนดค่าว่าจะเปิดใช้ประวัติการเลื่อน 2 ประเภทหรือไม่ และหากเปิดใช้ ให้กำหนดขนาดแคชและนโยบายการหมดอายุ การดำเนินการทั้งหมดนี้ทำได้โดยการลบล้างทรัพยากร car-ui-library ต่างๆ

แคชประวัติโฟกัส

(Android 11 QPR3, Android 11 Car, Android 12)
แคชต่อFocusAreaนี้จะเก็บมุมมองที่โฟกัสล่าสุดภายใน FocusAreaเพื่อให้โฟกัสได้เมื่อเลื่อนกลับไปที่FocusArea คุณกำหนดค่าแคชนี้ได้โดยการวางซ้อนทรัพยากร car-ui-library ต่อไปนี้

  • car_ui_focus_history_cache_type:
    1. ปิดใช้แคช
    2. แคชจะหมดอายุหลังจากผ่านไประยะหนึ่ง (ดูด้านล่าง)
    3. แคชจะไม่มีวันหมดอายุ
  • car_ui_focus_history_expiration_period_ms: จำนวนมิลลิวินาทีก่อนที่แคชจะหมดอายุหากตั้งค่าประเภทแคชเป็น 2 (ดูด้านบน)

แคชประวัติ FocusArea

(Android 11 QPR3, Android 11 Car, Android 12)
แคชนี้จะเก็บประวัติการเลื่อนเพื่อให้การเลื่อนไปในทิศทางตรงกันข้ามสามารถ ส่งคืนโฟกัสไปยัง FocusArea เดียวกันได้ คุณกำหนดค่าแคชนี้ได้โดยการวางซ้อนทรัพยากร car-ui-library ต่อไปนี้

  • car_ui_focus_area_history_cache_type:
    1. ปิดใช้แคช
    2. แคชจะหมดอายุหลังจากผ่านไประยะหนึ่ง (ดูด้านล่าง)
    3. แคชจะไม่มีวันหมดอายุ
  • car_ui_focus_area_history_expiration_period_ms: จำนวนมิลลิวินาทีก่อนที่ แคชจะหมดอายุหากตั้งค่าประเภทแคชเป็น 2 (ดูด้านบน)
  • car_ui_clear_focus_area_history_when_rotating: เลือกว่าจะล้างแคช เมื่อผู้ใช้หมุนตัวควบคุมหรือไม่

การหมุน

(Android 11 QPR3, Android 11 Car, Android 12)
OEM สามารถลบล้างทรัพยากรจำนวนเต็ม 2 รายการใน RotaryService เพื่อระบุว่ามีการเร่งความเร็วหรือไม่ เช่น การเร่งความเร็วของเมาส์สำหรับการหมุน

  • rotation_acceleration_3x_ms: ช่วงเวลา (เป็นมิลลิวินาที) ที่ใช้ในการตัดสินใจ ว่า Google ควรเร่งความเร็วการหมุนของตัวควบคุมสำหรับการหมุน 1 ระยะ (คลิก) หรือไม่ หากช่วงเวลาระหว่างการหมุนระยะ (คลิก) นี้กับการหมุนระยะ (คลิก) ก่อนหน้าน้อยกว่าค่านี้ ระบบจะถือว่าเป็นการหมุน 3 ระยะ (คลิก) ตั้งค่านี้เป็น 2147483647 เพื่อปิดใช้การเร่งความเร็ว 3 เท่า
  • rotation_acceleration_2x_ms: คล้ายกับ rotation_acceleration_3x_ms ใช้สำหรับการเร่งความเร็ว 2 เท่า ตั้งค่านี้เป็น 2147483647 เพื่อปิดใช้การเร่งความเร็ว 2 เท่า

การเร่งความเร็วจะทำงานได้ดีที่สุดเมื่อมีการประทับเวลาแยกกันสำหรับการหมุนแต่ละระยะ (คลิก) ตามที่ VHAL กำหนด หากไม่มีการประทับเวลา RotaryService จะถือว่าการหมุนระยะ (คลิก) มีระยะห่างเท่ากัน

/**
     * Property to feed H/W rotary events to android
     *
     * int32Values[0] : RotaryInputType identifying which rotary knob rotated
     * int32Values[1] : number of detents (clicks), positive for clockwise,
     *                  negative for counterclockwise
     * int32Values[2] : target display defined in VehicleDisplay. Events not
     *                  tied to specific display must be sent to
     *                  VehicleDisplay#MAIN.
     * int32values[3 .. 3 + abs(number of detents) - 2]:
     *                  nanosecond deltas between pairs of consecutive detents,
     *                  if the number of detents is > 1 or < -1
     *
     * VehiclePropValue.timestamp: when the rotation occurred. If the number of
     *                             detents is > 1 or < -1, this is when the
     *                             first detent of rotation occurred.
     *
     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
     * @data_enum RotaryInputType
     * @access VehiclePropertyAccess:READ
     */
    HW_ROTARY_INPUT = (
        0x0A20
        | VehiclePropertyGroup:SYSTEM
        | VehiclePropertyType:INT32_VEC
        | VehicleArea:GLOBAL),

การไฮไลต์โฟกัส

OEM สามารถลบล้างการไฮไลต์โฟกัสเริ่มต้นในเฟรมเวิร์ก Android และทรัพยากรการไฮไลต์โฟกัสหลายรายการใน car-ui-library

การไฮไลต์โฟกัสเริ่มต้น

เฟรมเวิร์ก Android มีการไฮไลต์โฟกัสเริ่มต้นผ่านแอตทริบิวต์ selectableItemBackground ใน Theme.DeviceDefault แอตทริบิวต์นี้จะอ้างอิงถึง item_background.xml ใน Core OEM สามารถวางซ้อน item_background.xml เพื่อเปลี่ยน Drawable การไฮไลต์โฟกัสเริ่มต้นได้

โดยปกติแล้ว Drawable นี้ควรเป็น StateListDrawable ซึ่งจะปรับพื้นหลังตามสถานะต่างๆ ที่รวมกัน รวมถึง android:state_focused และ android:state_pressed เมื่อผู้ใช้ใช้ตัวควบคุมปุ่มหมุนเพื่อโฟกัสมุมมอง android:state_focused จะเป็น true แต่ android:state_pressed จะเป็น false หากผู้ใช้กดปุ่มตรงกลางบนตัวควบคุมปุ่มหมุน ทั้ง android:state_focused และ android:state_pressed จะเป็น true ขณะที่ผู้ใช้กดปุ่มค้างไว้ เมื่อผู้ใช้ปล่อยปุ่ม android:state_focused เท่านั้นที่จะยังคงเป็น true

car-ui-library ใช้ธีมที่ได้มาจาก Theme.DeviceDefault ดังนั้น การวางซ้อนนี้จึงส่งผลต่อแอปที่ใช้ไลบรารีนี้และแอปที่ใช้ธีมที่ได้มาจาก Theme.DeviceDefault แต่จะไม่ส่งผลต่อแอปที่ใช้ธีมที่ไม่เกี่ยวข้อง เช่น Theme.Material

ทรัพยากรการไฮไลต์โฟกัสใน car-ui-library

OEM สามารถลบล้างทรัพยากร car-ui-library หลายรายการเพื่อควบคุมลักษณะการไฮไลต์โฟกัสในมุมมองที่มีการไฮไลต์โฟกัสที่ไม่ใช่สี่เหลี่ยมผืนผ้า (เช่น วงกลมหรือรูปทรงแคปซูล) และในแอปที่ใช้ธีมที่ไม่ได้มาจาก Theme.DeviceDefault ควรวางซ้อนทรัพยากรเหล่านี้ เพื่อให้การไฮไลต์โฟกัสสอดคล้องกับ Drawable การไฮไลต์โฟกัสเริ่มต้น

(Android 11 QPR3, Android 11 Car, Android 12)
ระบบจะใช้ทรัพยากรต่อไปนี้เพื่อระบุเมื่อมุมมองโฟกัสอยู่แต่ ไม่ได้ กด

  • car_ui_rotary_focus_fill_color: สีเติม
  • car_ui_rotary_focus_stroke_color: สีเส้นขอบ
  • car_ui_rotary_focus_stroke_width: ความหนาของเส้นขอบ

(Android 11 QPR3, Android 11 Car, Android 12)
ระบบจะใช้ทรัพยากรต่อไปนี้เพื่อระบุเมื่อมุมมองโฟกัสอยู่ และ กด

  • car_ui_rotary_focus_pressed_fill_color: สีเติม
  • car_ui_rotary_focus_pressed_stroke_color: สีเส้นขอบ
  • car_ui_rotary_focus_pressed_stroke_width: ความหนาของเส้นขอบ

บางครั้งปุ่มจะมีสีพื้นหลังทึบเพื่อดึงดูดความสนใจของผู้ใช้ ดังที่แสดงในตัวอย่าง ซึ่งอาจทำให้มองเห็นการไฮไลต์โฟกัสได้ยาก

ปุ่มที่มีพื้นหลังทึบ
รูปที่ 2 ปุ่มที่มีพื้นหลังทึบ

ในสถานการณ์นี้ นักพัฒนาแอปสามารถระบุการไฮไลต์โฟกัสที่กำหนดเองได้โดยใช้สี รอง ดังนี้
  • (Android 11 QPR3, Android 11 Car, Android 12)
    car_ui_rotary_focus_fill_secondary_color
    car_ui_rotary_focus_stroke_secondary_color
  • (Android 12)
    car_ui_rotary_focus_pressed_fill_secondary_color
    car_ui_rotary_focus_pressed_stroke_secondary_color

สีใดก็ได้สามารถโปร่งใสและขนาดใดก็ได้สามารถเป็น 0 ได้ เช่น หากคุณต้องการเฉพาะการเติมหรือเฉพาะเส้นขอบ

การไฮไลต์ FocusArea

(Android 11 QPR3, Android 11 Car, Android 12)
FocusArea สามารถวาดการไฮไลต์ 2 ประเภทเมื่อมีการโฟกัสองค์ประกอบย่อยรายการใดรายการหนึ่ง และสามารถใช้ร่วมกันได้หากต้องการ ฟีเจอร์นี้ปิดใช้อยู่โดยค่าเริ่มต้นใน AOSP แต่สามารถเปิดใช้ได้โดยการลบล้างทรัพยากร car-ui-library

  • car_ui_enable_focus_area_foreground_highlight: วาดการไฮไลต์ที่ด้านบนของ FocusArea และองค์ประกอบย่อย ใน AOSP Drawable นี้จะเป็นเส้นขอบรอบ FocusArea OEM สามารถลบล้าง car_ui_focus_area_foreground_highlight Drawable ได้
  • car_ui_enable_focus_area_background_highlight: วาดการไฮไลต์ที่ด้านบนของ FocusArea แต่ด้านหลังองค์ประกอบย่อย ใน AOSP Drawable นี้จะเป็นการเติมสีทึบ OEM สามารถลบล้าง Drawable car_ui_focus_area_background_highlight ได้

ตัวแก้ไขวิธีการป้อนข้อมูล

ตัวแก้ไขวิธีการป้อนข้อมูล (IME) เป็นวิธีการป้อนข้อมูล เช่น แป้นพิมพ์บนหน้าจอ

(Android 11 QPR3, Android 11 Car, Android 12)
OEM ต้องวางซ้อนทรัพยากรสตริง default_touch_input_method ใน RotaryService เพื่อระบุ ComponentName ของ IME ที่ใช้การสัมผัส ตัวอย่างเช่น หาก OEM ใช้ IME ที่มาพร้อมกับ Android Automotive ก็ควรกำหนด com.google.android.apps.automotive.inputmethod/.InputMethodService

(Android 11 QPR3, Android 11 Car, Android 12)
หาก OEM สร้าง IME สำหรับปุ่มหมุนโดยเฉพาะ ก็ควรกำหนด ComponentName ในทรัพยากร rotary_input_method หากมีการวางซ้อนทรัพยากรนี้ ระบบจะใช้ IME ที่ระบุเมื่อใดก็ตามที่ผู้ใช้โต้ตอบกับชุดอุปกรณ์ส่วนหัวผ่านการเลื่อน การหมุน และปุ่มตรงกลางของตัวควบคุมปุ่มหมุน เมื่อผู้ใช้แตะหน้าจอ ระบบจะใช้ IME ก่อนหน้า ปุ่มย้อนกลับ (และปุ่มอื่นๆ บนตัวควบคุมปุ่มหมุน) จะไม่มีผลต่อการเลือก IME หากไม่มีการวางซ้อนทรัพยากรนี้ การสลับ IME จะไม่เกิดขึ้น Carboard ไม่รองรับปุ่มหมุน ดังนั้นผู้ใช้จึงป้อนข้อความผ่านตัวควบคุมปุ่มหมุนไม่ได้หาก OEM ไม่ได้ให้ IME ปุ่มหมุน

RotaryIME เป็น IME ปุ่มหมุนเวอร์ชันเดโม แม้ว่าจะเป็นเวอร์ชันพื้นฐาน แต่ก็เพียงพอที่จะลองใช้การสลับ IME อัตโนมัติตามที่อธิบายไว้ข้างต้น คุณดูซอร์สโค้ดของ RotaryIME ได้ที่ packages/apps/Car/tests/RotaryIME/

การเลื่อนนอกหน้าจอ

โดยค่าเริ่มต้น เมื่อผู้ใช้พยายามเลื่อนออกจากขอบหน้าจอ จะไม่มีอะไรเกิดขึ้น OEM สามารถกำหนดค่าสิ่งที่ควรเกิดขึ้นในแต่ละทิศทางทั้ง 4 ทิศทางได้โดยการระบุการดำเนินการต่อไปนี้ร่วมกัน

  1. การดำเนินการส่วนกลางที่กำหนดโดย AccessibilityService เช่น GLOBAL_ACTION_BACK
  2. คีย์โค้ด เช่น KEYCODE_BACK
  3. Intent เพื่อเปิดใช้กิจกรรมที่แสดงเป็น URL

(Android 11 QPR3, Android 11 Car, Android 12)
การดำเนินการเหล่านี้ระบุได้โดยการวางซ้อนทรัพยากร Array ต่อไปนี้ใน RotaryService

  • off_screen_nudge_global_actions: อาร์เรย์ของการดำเนินการส่วนกลางที่จะดำเนินการเมื่อ ผู้ใช้เลื่อนขึ้น ลง ซ้าย หรือขวาออกจากขอบหน้าจอ ระบบจะไม่ดำเนินการส่วนกลางหากองค์ประกอบที่เกี่ยวข้องของอาร์เรย์นี้เป็น -1
  • off_screen_nudge_key_codes: อาร์เรย์ของคีย์โค้ดของเหตุการณ์การคลิกที่จะแทรก เมื่อผู้ใช้เลื่อนขึ้น ลง ซ้าย หรือขวาออกจากขอบหน้าจอ ระบบจะไม่แทรกเหตุการณ์หากองค์ประกอบที่เกี่ยวข้องของอาร์เรย์นี้เป็น 0 (KEYCODE_UNKNOWN)
  • off_screen_nudge_intents: อาร์เรย์ของ Intent เพื่อเปิดใช้กิจกรรมเมื่อ ผู้ใช้เลื่อนขึ้น ลง ซ้าย หรือขวาออกจากขอบหน้าจอ ระบบจะไม่เปิดใช้กิจกรรมหากองค์ประกอบที่เกี่ยวข้องของอาร์เรย์นี้ว่างเปล่า

การกำหนดค่าอื่นๆ

คุณควรวางซ้อนทรัพยากร RotaryService ต่อไปนี้

  • (Android 11 QPR3, Android 11 Car, Android 12)
    config_showHeadsUpNotificationOnBottom: ค่าบูลีนเพื่อแสดงว่าควรแสดงการแจ้งเตือนแบบ Heads-up ที่ด้านล่างแทนที่จะเป็นด้านบนหรือไม่ ค่านี้ต้องมีค่าเดียวกับทรัพยากรบูลีนในconfig_showHeadsUpNotificationOnBottom frameworks/base/packages/CarSystemUI/res/values/config.xml
  • (Android 11 QPR3, Android 11 Car, Android 12)
    notification_headsup_card_margin_horizontal: ระยะขอบซ้ายและขวาสำหรับ หน้าต่างการแจ้งเตือนแบบ Heads-up ค่านี้ต้องมีค่าเดียวกับทรัพยากร dimen notification_headsup_card_margin_horizontal ใน packages/apps/Car/Notification/res/values/dimens.xml
  • (Android 12)
    excluded_application_overlay_window_titles: อาร์เรย์ของ ชื่อหน้าต่างที่ไม่ควรพิจารณาว่าเป็นหน้าต่างการวางซ้อน ซึ่งควรรวมชื่อหน้าต่างแอปที่แสดง TaskViews หรือ TaskDisplayAreas โดยค่าเริ่มต้น รายการนี้จะมีเพียง "Maps"

คุณสามารถวางซ้อนทรัพยากร RotaryService ต่อไปนี้

  • (Android 11 QPR3, Android 11 Car, Android 12)
    long_press_ms: ค่าจำนวนเต็มเพื่อแสดงจำนวนมิลลิวินาทีที่ต้องกดปุ่มตรงกลางค้างไว้เพื่อทริกเกอร์การกดแบบยาว ค่า 0 หมายความว่าควรใช้การหมดเวลาการกดแบบยาวเริ่มต้นของระบบ นี่คือค่าเริ่มต้น