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