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

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

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

หมุน

เมื่อผู้ใช้หมุนตัวควบคุมแบบหมุนตามเข็มนาฬิกา 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

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

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

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

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

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

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

ปุ่มหน้าหลัก

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

โดยปกติแล้ว องค์ประกอบที่วาดได้นี้ควรเป็น 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 ทรัพยากรเหล่านี้ควรวางซ้อนกันเพื่อให้การไฮไลต์โฟกัสสอดคล้องกับรูปภาพที่วาดได้การไฮไลต์โฟกัสเริ่มต้น

(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 ประเภทเมื่อโฟกัสองค์ประกอบย่อยรายการใดรายการหนึ่ง คุณใช้ทั้ง 2 รายการร่วมกันได้หากต้องการ ฟีเจอร์นี้ปิดใช้อยู่โดยค่าเริ่มต้นใน AOSP แต่เปิดใช้ได้โดยการลบล้างทรัพยากร car-ui-library ดังนี้

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

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

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