ติดตั้งใช้งาน UI ของระบบ

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

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

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

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

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

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

  • config_statusBarComponent
  • config_systemUIFactoryComponent

CarSystemUI เป็นส่วนขยายของแพ็กเกจ UI ของระบบ (System UI) ซึ่งหมายความว่าแพ็กเกจ CarSystemUI สามารถใช้และลบล้างคลาสและทรัพยากรในแพ็กเกจ 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 ของระบบ Automotive ใช้ทรัพยากรจากแพ็กเกจ UI ของระบบและแพ็กเกจ CarSystemUI ซึ่งหมายความว่าทรัพยากรจากแต่ละแพ็กเกจสามารถลบล้างได้ด้วยการวางซ้อนเพื่อส่งผลต่อรูปลักษณ์ของ UI ของระบบ Automotive

หากต้องการแทนที่ไฟล์ ให้ทำซ้ำโครงสร้างไดเรกทอรีของไฟล์ที่จะแทนที่ในไดเรกทอรี /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 ของระบบ Automotive อาจมีแถบนําทาง 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

มุมมองเหล่านี้จะได้รับการ Inflate ใน 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>

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

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

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

โปรดทราบ การเปลี่ยนแปลงที่ทำในซอร์สโค้ดของ Android จะอัปเดตได้ยากใน Android เวอร์ชันที่ใหม่กว่า เราขอแนะนําอย่างยิ่งให้คุณขยายโค้ด UI ของระบบ Automotive แทนการแก้ไขโค้ดโดยตรง วิธีนี้ช่วยให้อัปเกรดซอร์สโค้ด UI ของระบบ Automotive ที่อยู่เบื้องหลังได้โดยมีข้อขัดแย้งในการผสานน้อยที่สุด เนื่องจากมีการใช้การปรับแต่งทั้งหมดผ่านแพลตฟอร์ม 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 หน้าจอการล็อกปุ่มกดที่มีเครื่องมือเลือกผู้ใช้จะแสดงเฉพาะเมื่อผู้ใช้คลิกปุ่ม "ยกเลิก" ในหน้าจอล็อก หน้าจอการล็อกปุ่มกดจะแสดงอยู่ด้านล่าง

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

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

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

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

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

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