Android Automotive มี UI ของระบบแบบใหม่ที่พัฒนาขึ้นสำหรับยานพาหนะโดยเฉพาะ คอมโพเนนต์ส่วนใหญ่ของ UI ของระบบจะเชื่อมโยงกับบริการเฟรมเวิร์กอย่างแน่นหนา UI ของระบบหมายถึงองค์ประกอบใดๆ ที่แสดงบนหน้าจอซึ่งไม่ได้เป็นส่วนหนึ่งของแอป UI ของระบบ Automotive (ในแพ็กเกจองค์ประกอบ CarSystemUI) เป็นส่วนขยายของ UI ของระบบ Android (ในแพ็กเกจ UI ของระบบ) ซึ่งปรับแต่งมาโดยเฉพาะสำหรับยานพาหนะ
UI ของระบบคืออะไร
คอมโพเนนต์เฉพาะสำหรับ UI ของระบบยานยนต์มีดังนี้
ส่วนประกอบ | คำอธิบาย |
---|---|
UI หน้าจอล็อก | หน้าจอที่ผู้ใช้ได้รับการตรวจสอบสิทธิ์เพื่อเข้าสู่ระบบบัญชีผู้ใช้ที่เฉพาะเจาะจง |
แถบนำทาง | แถบระบบที่วางตำแหน่งได้ที่ด้านซ้าย ด้านล่าง หรือด้านขวาของหน้าจอ และสามารถมีปุ่มแง่มุมสำหรับการไปยังแอปต่างๆ สลับแผงการแจ้งเตือน และควบคุมยานพาหนะ (เช่น HVAC) ซึ่งแตกต่างจากการใช้งาน UI ของระบบ Android ซึ่งมีปุ่มย้อนกลับ หน้าแรก และปุ่มสแต็กแอป |
แถบสถานะ | แถบระบบที่วางไว้ตามแนวหน้าจอและทำหน้าที่เป็นแถบนําทาง แถบสถานะยังมีฟังก์ชันการทำงานที่รองรับสิ่งต่อไปนี้ด้วย
|
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 จะระบุจุดแรกเข้าของอินเทอร์เฟซผู้ใช้เพื่อสลับผู้ใช้ได้ แต่บางครั้งผลลัพธ์ที่ได้อาจไม่เป็นไปตามที่ต้องการ ในกรณีนี้
- OEM จะสร้างและแสดงหน้าจอการโหลด (หรือกล่องโต้ตอบ) ที่กําหนดเอง
- สำหรับ UX โดยเฉพาะ OEM จะเปิดหน้าจอการโหลดที่กำหนดเองเมื่อผู้ใช้เลือกวิธีสลับ ซึ่งสามารถซ่อนไว้ได้เมื่อผู้ใช้สลับเสร็จแล้ว
- OEM ต้องตั้งค่ากรอบเวลาที่มีลำดับความสำคัญตามต้องการ เช่น ประเภทหน้าต่างที่มีลําดับความสําคัญสูงกว่า ความสำคัญต้องไม่เกินความสำคัญของ Keyguard
- OEM ตั้งค่า
config_customUserSwitchUi=true
ในเฟรมเวิร์กหลักconfig.xml
ตามที่อธิบายไว้ในconfig_customuserswitchui
ด้วยเหตุนี้ เฟรมเวิร์กจึงไม่แสดงCarUserSwitchingDialog
ปรับแต่งหน้าจอล็อก
หน้าจอล็อกเป็นส่วนสำคัญของ UI ของระบบ ซึ่ง OEM สามารถปรับแต่งได้
หากต้องการปรับแต่งขั้นตอน ให้เริ่มด้วย frameworks/base/packages/CarSystemUI/
ปรับแต่งการตั้งค่าผู้ใช้ครั้งแรก
วิซาร์ดการตั้งค่าจะดำเนินการตั้งค่าผู้ใช้ครั้งแรก คุณสามารถปรับแต่งข้อมูลนี้ได้ด้วย คุณใช้ UserManager API เพื่อสร้างผู้ใช้ได้ ในบางกรณี การดำเนินการนี้อาจทำได้ในเบื้องหลัง ซึ่งจะปรับปรุงขั้นตอนการตั้งค่าวิซาร์ด