ใช้งาน UI ของระบบ

Android Automotive มี UI ของระบบแบบใหม่ที่พัฒนาขึ้นสำหรับยานพาหนะโดยเฉพาะ คอมโพเนนต์ส่วนใหญ่ของ UI ของระบบจะเชื่อมโยงกับบริการเฟรมเวิร์กอย่างแน่นหนา UI ของระบบหมายถึงองค์ประกอบใดๆ ที่แสดงบนหน้าจอซึ่งไม่ได้เป็นส่วนหนึ่งของแอป UI ของระบบ Automotive (ในแพ็กเกจองค์ประกอบ CarSystemUI) เป็นส่วนขยายของ UI ของระบบ Android (ในแพ็กเกจ UI ของระบบ) ซึ่งปรับแต่งมาโดยเฉพาะสำหรับยานพาหนะ

UI ของระบบคืออะไร

คอมโพเนนต์เฉพาะสำหรับ UI ของระบบยานยนต์มีดังนี้

ส่วนประกอบ คำอธิบาย
UI หน้าจอล็อก หน้าจอที่ผู้ใช้ได้รับการตรวจสอบสิทธิ์เพื่อเข้าสู่ระบบบัญชีผู้ใช้ที่เฉพาะเจาะจง
แถบนำทาง แถบระบบที่วางตำแหน่งได้ที่ด้านซ้าย ด้านล่าง หรือด้านขวาของหน้าจอ และสามารถมีปุ่มแง่มุมสำหรับการไปยังแอปต่างๆ สลับแผงการแจ้งเตือน และควบคุมยานพาหนะ (เช่น HVAC) ซึ่งแตกต่างจากการใช้งาน UI ของระบบ Android ซึ่งมีปุ่มย้อนกลับ หน้าแรก และปุ่มสแต็กแอป
แถบสถานะ แถบระบบที่วางไว้ตามแนวหน้าจอและทำหน้าที่เป็นแถบนําทาง แถบสถานะยังมีฟังก์ชันการทำงานที่รองรับสิ่งต่อไปนี้ด้วย
  • ไอคอนการเชื่อมต่อ ซึ่งรวมถึงบลูทูธ, Wi-Fi และการเชื่อมต่อฮอตสปอต/มือถือ
  • แผงการแจ้งเตือนแบบเลื่อนลง เช่น การปัดลงจากด้านบนของหน้าจอ
  • การแจ้งเตือนแบบ Heads Up (HUN)
UI ของระบบ หมายถึงองค์ประกอบใดๆ ที่แสดงบนหน้าจอซึ่งไม่ได้เป็นส่วนหนึ่งของแอป
UI ตัวสลับผู้ใช้ หน้าจอที่ผู้ใช้เลือกผู้ใช้รายอื่นได้
UI ระดับเสียง กล่องโต้ตอบที่แสดงเมื่อคนขับใช้ปุ่มปรับระดับเสียงจริงเพื่อเปลี่ยนระดับเสียงในอุปกรณ์

UI ของระบบทำงานอย่างไร

UI ของระบบคือแอป Android ที่ทำงานเมื่อเปิดอุปกรณ์ SystemServer จะเริ่มต้นแอปผ่านการสะท้อน รายการด้านล่างนี้คือจุดแรกเข้าที่มีความเกี่ยวข้องมากที่สุดสำหรับแง่มุมที่ผู้ใช้มองเห็นของ UI ของระบบ ใช้คอมโพเนนต์เหล่านี้เพื่อปรับแต่ง UI ของระบบ Android สำหรับความสามารถเฉพาะยานยนต์

  • config_statusBarComponent
  • config_systemUIFactoryComponent

CarSystemUI เป็นส่วนขยายของแพ็กเกจ System UI ซึ่งหมายความว่าแพ็กเกจ CarSystemUI สามารถใช้และลบล้างคลาสและทรัพยากรในแพ็กเกจ System UI ได้

ปรับแต่ง UI ของระบบ

การวางซ้อน

แม้ว่าคุณจะแก้ไขซอร์สโค้ด Android เพื่อปรับแต่ง UI ของระบบได้ แต่การดําเนินการดังกล่าวจะทำให้การอัปเดต Android ในอนาคตมีความซับซ้อนและยากขึ้น แต่ Android รองรับการใช้ไดเรกทอรีการวางซ้อนแทน ซึ่งช่วยให้คุณแทนที่ไฟล์ทรัพยากรได้โดยไม่ต้องแก้ไขซอร์สโค้ด ในระบบบิลด์ Android ระบบการวางซ้อนจะลบล้างไฟล์ในลักษณะที่ควบคุมได้ ไฟล์ที่แก้ไขทั้งหมดจะระบุไว้อย่างชัดเจนโดยไม่ต้องเรียกใช้ซอร์สโค้ด AOSP ทั้งหมด

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

PRODUCT_PACKAGE_OVERLAYS := packages/services/Car/car_product/overlay

UI ระบบยานยนต์ใช้ทรัพยากรจาก UI ระบบ และแพ็กเกจ CarSystemUI ซึ่งหมายความว่าทรัพยากรจากแต่ละตำแหน่งสามารถลบล้างได้ด้วยการวางซ้อนเพื่อส่งผลต่อรูปลักษณ์ของ UI ระบบยานยนต์

หากต้องการแทนที่ไฟล์ ให้ทำซ้ำโครงสร้างไดเรกทอรีของไฟล์ที่จะแทนที่ในไดเรกทอรี /overlay ที่คุณระบุ แล้วใส่ไฟล์ที่จะแทนที่ไว้ในไดเรกทอรีนั้น เช่น ในการแทนที่

frameworks/base/packages/CarSystemUI/res/layout/super_status_bar.xml

เพิ่มไฟล์ super_status_bar.xml ที่จะแทนที่ซึ่งอยู่ในตำแหน่งต่อไปนี้

packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/

หากต้องการแทนที่ frameworks/base/packages/SystemUI/res/values/config.xml (ใน UI ของระบบ ไม่ใช่ CarSystemUI) ให้เพิ่มไฟล์ config.xml ที่จะแทนที่ลงในตำแหน่งต่อไปนี้

packages/services/Car/car_product/overlay/frameworks/base/packages/SystemUI/res/layout/

หรือ

packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/

คำอธิบายของจุดแรกเข้าสำหรับการปรับแต่งหลัก 2 จุดมีดังนี้

UI ของระบบยานยนต์อาจมีแถบนําทาง 3 แถบทางด้านซ้าย ด้านล่าง และขวาของหน้าจอ คุณสามารถสลับการแสดงผลของแถบระบบแต่ละแถบได้ด้วยการกำหนดค่าต่อไปนี้

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

แต่ละแถบมีสถานะที่จัดสรรและไม่จัดสรร ซึ่งสามารถปรับแต่งได้โดยการวางซ้อนไฟล์เลย์เอาต์ที่เกี่ยวข้อง

  • car_left_system_bar.xml
  • car_left_system_bar_unprovisioned.xml
  • car_system_bar.xml (เลย์เอาต์สำหรับแถบนําทางด้านล่าง)
  • car_system_bar_unprovisioned.xml
  • car_right_system_bar.xml
  • car_right_system_bar_unprovisioned.xml

เลย์เอาต์เหล่านี้ต้องมี com.android.systemui.car.systembar.CarSystemBarView ที่ระดับบนสุด ซึ่งสามารถรวมมุมมองอื่นๆ ที่จำเป็น คุณรวมปุ่มภายในแถบนําทางได้โดยใช้ com.android.systemui.car.systembar.CarSystemBarButton

ยอดดูเหล่านี้จะเพิ่มขึ้นใน CarSystemBar#createSystemBar หากมีการจัดสรรอุปกรณ์ให้กับผู้ใช้อย่างถูกต้อง

แถบสถานะ

โปรดพิจารณาแถบสถานะเป็นแถบนําทางที่มีฟังก์ชันเพิ่มเติม แถบสถานะไม่มี Flag สำหรับการปิดใช้ ซึ่งต่างจากแถบนำทาง คุณแก้ไขแถบสถานะได้ด้วยวิธีต่อไปนี้

  • car_top_navigation_bar.xml
  • car_top_navigation_bar_unprovisioned.xml

เลย์เอาต์เหล่านี้ต้องมี com.android.systemui.statusbar.car.CarNavigationBarView ที่ระดับบนสุด แถบสถานะมีไอคอนสถานะ หากต้องการเปลี่ยนขนาดของไอคอน ให้ปรับขนาดไอคอนอย่างสม่ำเสมอด้วยปัจจัยการขยายแทนการระบุขนาดที่เจาะจง ตัวอย่างเช่น ในไฟล์วางซ้อน /overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml ให้เพิ่มมิติข้อมูลต่อไปนี้เพื่อเพิ่มขนาดไอคอนเป็น 2 เท่า

<resources>
    <!-- The amount by which to scale up the status bar icons.-->
    <item name="status_bar_icon_scale_factor" format="float" type="dimen">2</item>
</resources>

แถบสถานะอยู่ในเลเยอร์หน้าต่างพิเศษที่มีแผงการแจ้งเตือน ตัวสลับผู้ใช้ การแจ้งเตือนแบบ Heads Up (HUN) และตัวล็อกคีย์ เลย์เอาต์ต่างๆ ของสิ่งเหล่านี้จะรวมอยู่ใน super_status_bar.xml

การเปลี่ยนแปลงซอร์สโค้ด UI ของระบบ

การวางซ้อนอาจมีความยืดหยุ่นไม่เพียงพอในการปรับแต่งลักษณะการทำงานของ UI ของระบบ

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

คุณปรับแต่งแง่มุมส่วนใหญ่ของ UI ของระบบได้ผ่านจุดแรกเข้า 2 จุดต่อไปนี้

  • config_statusBarComponent
  • config_systemUIFactoryComponent

ตัวอย่างเช่น หากคุณสร้างคลาสชื่อ com.android.systemui.statusbar.car.custom.CustomCarStatusBar ซึ่งขยายมาจาก CarStatusBar ให้อัปเดต config_statusBarComponent ให้ชี้ไปยังคอมโพเนนต์ใหม่นี้ การขยายคลาสนี้ช่วยให้ปรับแต่งองค์ประกอบส่วนใหญ่ที่เกี่ยวข้องกับแถบระบบและตรรกะการแจ้งเตือนได้

ในทํานองเดียวกัน คุณสามารถสร้าง CustomCarSystemUIFactory และวางไว้ใน config_systemUIFactoryComponent ใช้คลาสนี้เพื่ออัปเดตฟังก์ชันการทำงานของ VolumeUI และหน้าจอล็อก

ปรับแต่งการเปลี่ยนผู้ใช้และการปลดล็อก

เนื้อหาต่อไปนี้อธิบายวิธีปรับแต่งประสบการณ์การเปลี่ยนของผู้ใช้

คำศัพท์ คำอธิบาย
การล็อกปุ่มกด กล่องโต้ตอบแบบเต็มหน้าจอเพื่อป้องกันไม่ให้มีการทำงานกับแอปที่ทำงานอยู่เบื้องหน้าโดยไม่ตั้งใจ ปกป้องความเป็นส่วนตัวของผู้ใช้แต่ละรายเมื่อมีการตั้งค่าผู้ใช้หลายคน
กำลังโหลดกล่องโต้ตอบ หน้าจอการโหลดที่แสดงเมื่อสลับระหว่างผู้ใช้
หน้าจอล็อก, โปรแกรมป้องกัน หน้าจอที่กำหนดให้ผู้ใช้ป้อน PIN, รูปแบบ หรือรหัสผ่าน
ผู้ใช้ ผู้ใช้ Android
เครื่องมือเลือกผู้ใช้ หน้าจอเครื่องมือเลือกผู้ใช้ที่แสดงเมื่อบูตอุปกรณ์
ตัวสลับผู้ใช้ ตัวสลับผู้ใช้ที่แสดงเมื่อเปลี่ยนหน้าจอจากการตั้งค่าด่วน

ปรับแต่งการเปลี่ยนผู้ใช้

การล็อกปุ่มกดและเจ้าหน้าที่รักษาความปลอดภัย

ใน Android Automotive OS หน้าจอล็อกคีย์ที่มีเครื่องมือเลือกผู้ใช้จะแสดงเฉพาะเมื่อผู้ใช้คลิกปุ่ม "ยกเลิก" ในหน้าจอล็อก หน้าจอ Keyguard จะแสดงอยู่ด้านล่าง

หน้าจอการล็อกปุ่มกด

รูปที่ 1 หน้าจอล็อกปุ่มกด

หน้าจอล็อกที่มีตัวล็อกชั่วคราวจะแสดงขึ้นเมื่อผู้ใช้เลือกประเภทความเป็นส่วนตัวที่จะใช้ปลดล็อกอุปกรณ์ ดังที่แสดงด้านล่าง

หน้าจอล็อก

รูปที่ 2 หน้าจอล็อก

เมื่อตั้งค่าล็อกให้เปิดหรือปิดด้วยตนเอง ให้ทำตามวิธีการต่อไปนี้

adb shell input keyevent 26

เครื่องมือเลือกผู้ใช้

หน้าจอเครื่องมือเลือกผู้ใช้จะปรากฏขึ้นเมื่ออุปกรณ์ที่เป็นส่วนสำคัญของแถบสถานะ UI ของระบบรถยนต์และ Maps รีบูต ดูข้อมูลเพิ่มเติมได้ที่ FullscreenUserSwitcher

การโหลดหน้าจอ

รูปที่ 3 หน้าจอเครื่องมือเลือกผู้ใช้

คุณปรับแต่งเลย์เอาต์ของหน้าจอนี้ได้ใน car_fullscreen_user_switcher.xml

การโหลดหน้าจอ

หน้าจอกำลังโหลดจะแสดงทุกครั้งที่มีการเปลี่ยนผู้ใช้ ไม่ว่าจะเปลี่ยนจากจุดเข้าชมใดก็ตาม เช่น ผ่านเครื่องมือเลือกผู้ใช้หรือหน้าจอการตั้งค่า หน้าจอการโหลดเป็นส่วนสำคัญของ UI ระบบเฟรมเวิร์ก และจับคู่กับคลาสสาธารณะชื่อ CarUserSwitchingDialog ดูตัวอย่างได้ที่รูปที่ 3 ด้านบน

คุณปรับแต่งธีมได้ด้วย Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog

หากต้องการตั้งค่าผู้ใช้ Android ขั้นตอนแรกของวิซาร์ดการตั้งค่าจะอนุญาตให้คนขับตั้งชื่อผู้ใช้ให้ตนเอง หากคนขับเชื่อมโยงผู้ใช้ Android กับบัญชี Google ระบบจะเลือกชื่อผู้ใช้จากบัญชีนั้น อย่างไรก็ตาม หากคนขับระบุชื่อ เช่น DriverB แล้วเชื่อมโยงชื่อผู้ใช้นั้นกับบัญชี Google โดยใช้ชื่อ Maddy ในภายหลัง ระบบจะไม่เปลี่ยนชื่อที่กำหนดไว้ตั้งแต่แรก (DriverB) เนื่องจากมีการตั้งชื่อนั้นไว้อย่างชัดเจน คนขับจะเปลี่ยนชื่อได้ในเมนูการตั้งค่าเท่านั้น

คุณปรับแต่งเลย์เอาต์ได้ใน car_user_switching_dialog.xml.

OEM สามารถซ่อนสถานะและแถบนําทางได้โดยใช้ธีมที่มีชื่อว่า NoActionBar.Fullscreen (นี่คือ UI ของระบบเวอร์ชันเดิมที่อัปเดตสำหรับ UI อ้างอิงสำหรับรถยนต์) ดูข้อมูลเพิ่มเติมได้ที่การปรับแต่ง

แม้ว่า OEM จะระบุจุดแรกเข้าของอินเทอร์เฟซผู้ใช้เพื่อสลับผู้ใช้ได้ แต่บางครั้งผลลัพธ์ที่ได้อาจไม่เป็นไปตามที่ต้องการ ในกรณีนี้

  1. OEM จะสร้างและแสดงหน้าจอการโหลด (หรือกล่องโต้ตอบ) ที่กําหนดเอง
    • สำหรับ UX โดยเฉพาะ OEM จะเปิดหน้าจอการโหลดที่กำหนดเองเมื่อผู้ใช้เลือกวิธีสลับ ซึ่งสามารถซ่อนไว้ได้เมื่อผู้ใช้สลับเสร็จแล้ว
    • OEM ต้องตั้งค่ากรอบเวลาที่มีลำดับความสำคัญตามต้องการ เช่น ประเภทหน้าต่างที่มีลําดับความสําคัญสูงกว่า ความสำคัญต้องไม่เกินความสำคัญของ Keyguard
  2. OEM ตั้งค่า config_customUserSwitchUi=true ในเฟรมเวิร์กหลัก config.xml ตามที่อธิบายไว้ใน config_customuserswitchui ด้วยเหตุนี้ เฟรมเวิร์กจึงไม่แสดง CarUserSwitchingDialog

ปรับแต่งหน้าจอล็อก

หน้าจอล็อกเป็นส่วนสำคัญของ UI ของระบบ ซึ่ง OEM สามารถปรับแต่งได้ หากต้องการปรับแต่งขั้นตอน ให้เริ่มด้วย frameworks/base/packages/CarSystemUI/

ปรับแต่งการตั้งค่าผู้ใช้ครั้งแรก

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