Android Automotive มอบ System UI ใหม่ที่พัฒนาขึ้นสำหรับรถยนต์โดยเฉพาะ ส่วนประกอบส่วนใหญ่ของ UI ของระบบนั้นเชื่อมโยงอย่างแน่นหนากับบริการกรอบงาน System UI หมายถึงองค์ประกอบใดๆ ที่แสดงบนหน้าจอซึ่งไม่ได้เป็นส่วนหนึ่งของแอป UI ระบบยานยนต์ (ในแพ็คเกจองค์ประกอบ CarSystemUI) เป็นส่วนเสริมของ UI ระบบ Android (ในแพ็คเกจ UI ระบบ) ซึ่งได้รับการปรับแต่งสำหรับรถยนต์โดยเฉพาะ
UI ของระบบคืออะไร?
ส่วนประกอบเฉพาะสำหรับ UI ระบบยานยนต์ ได้แก่:
ส่วนประกอบ | คำอธิบาย |
---|---|
UI ล็อคหน้าจอ | หน้าจอที่ผู้ใช้ได้รับการรับรองความถูกต้องกับบัญชีผู้ใช้เฉพาะ |
แถบนำทาง | แถบระบบที่สามารถวางตำแหน่งทางซ้าย ล่าง หรือขวาของหน้าจอได้ และอาจมีปุ่มด้านข้างสำหรับการนำทางไปยังแอปต่างๆ สลับแผงการแจ้งเตือน และจัดให้มีการควบคุมยานพาหนะ (เช่น HVAC) สิ่งนี้แตกต่างจากการใช้งาน UI ระบบ Android ซึ่งมีปุ่ม Back, Home และ App-Stack |
แถบสถานะ | แถบระบบวางตำแหน่งตามแนวหน้าจอและทำหน้าที่เป็นแถบนำทาง แถบสถานะยังมีฟังก์ชันการทำงานเพื่อรองรับ:
|
UI ของระบบ | หมายถึงองค์ประกอบใดๆ ที่แสดงบนหน้าจอซึ่งไม่ได้เป็นส่วนหนึ่งของแอป |
UI ตัวสลับผู้ใช้ | หน้าจอที่ผู้ใช้สามารถเลือกผู้ใช้รายอื่นได้ |
UI ปริมาณ | กล่องโต้ตอบปรากฏขึ้นเมื่อไดรเวอร์ใช้ปุ่มระดับเสียงจริงเพื่อเปลี่ยนระดับเสียงบนอุปกรณ์ |
System UI ทำงานอย่างไร?
System UI คือแอป Android ที่ทำงานเมื่ออุปกรณ์เปิดอยู่ แอปเริ่มต้นผ่านการสะท้อนโดย SystemServer จุดเริ่มต้นที่เกี่ยวข้องมากที่สุดสำหรับแง่มุมที่ผู้ใช้มองเห็นของ UI ของระบบมีดังต่อไปนี้ ใช้ส่วนประกอบเหล่านี้เพื่อปรับแต่ง UI ระบบ Android สำหรับความสามารถเฉพาะด้านยานยนต์
-
config_statusBarComponent
-
config_systemUIFactoryComponent
CarSystemUI เป็นส่วนขยายของแพ็คเกจ System UI ซึ่งหมายความว่าคลาสและทรัพยากรในแพ็คเกจ System UI สามารถใช้และแทนที่โดยแพ็คเกจ CarSystemUI
ปรับแต่ง UI ของระบบ
ภาพซ้อนทับ
แม้ว่าคุณจะสามารถแก้ไขซอร์สโค้ด Android เพื่อปรับแต่ง System UI ได้ แต่การทำเช่นนี้จะทำให้การอัปเดต Android ในอนาคตทำได้ยากและซับซ้อนยิ่งขึ้น แต่ Android สนับสนุนการใช้ไดเร็กทอรีแบบซ้อนทับ ซึ่งช่วยให้คุณสามารถแทนที่ไฟล์ทรัพยากรได้โดยไม่ต้องแก้ไขซอร์สโค้ด ในระบบบิลด์ Android ระบบโอเวอร์เลย์จะแทนที่ไฟล์ในลักษณะที่มีการควบคุม ไฟล์ที่แก้ไขทั้งหมดจะถูกระบุอย่างชัดเจนโดยไม่ต้องข้ามแผนผังซอร์สโค้ด AOSP ทั้งหมด
ไฟล์ซ้อนทับต้องอยู่ในไดเร็กทอรี PRODUCT_PACKAGE_OVERLAYS
และต้องมีโฟลเดอร์ย่อยเหมือนกันทุกประการกับโครงสร้างราก AOSP ดั้งเดิม สำหรับ Android 10 หรือสูงกว่า PRODUCT_PACKAGE_OVERLAYS
ได้รับการตั้งค่าเป็น:
PRODUCT_PACKAGE_OVERLAYS := packages/services/Car/car_product/overlay
UI ระบบยานยนต์ใช้ทรัพยากรจาก System 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
(ใน System 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/
คำอธิบายของจุดเข้าการปรับแต่งหลักสองจุดมีระบุไว้ด้านล่าง
แถบนำทาง
UI ระบบยานยนต์สามารถมีแถบนำทางได้สามแถบที่ด้านซ้าย ด้านล่าง และด้านขวาของหน้าจอ การมองเห็นของแต่ละแถบระบบจะสลับด้วยการกำหนดค่าต่อไปนี้:
-
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
หากอุปกรณ์ได้รับการจัดเตรียมอย่างเหมาะสมสำหรับผู้ใช้ที่กำหนด
แถบสถานะ
พิจารณาแถบสถานะเป็นแถบนำทางพร้อมฟังก์ชันเพิ่มเติม แถบสถานะไม่มีธงให้ปิดใช้งานต่างจากแถบนำทาง คุณสามารถแก้ไขแถบสถานะด้วย:
-
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
ให้เพิ่มมิติต่อไปนี้เพื่อเพิ่มขนาดของไอคอนเป็นสองเท่า:
<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 รุ่นที่ใหม่กว่า เราขอแนะนำอย่างยิ่งให้คุณขยายโค้ด Automotive System UI แทนที่จะแก้ไขโค้ดโดยตรง ด้วยวิธีนี้ ซอร์สโค้ดของ Automotive System UI ที่ซ่อนอยู่สามารถอัปเกรดได้โดยมีข้อขัดแย้งในการผสานน้อยที่สุด เนื่องจากการปรับแต่งทั้งหมดถูกนำไปใช้ผ่านพื้นผิว API ที่รู้จัก
ลักษณะส่วนใหญ่ของ System UI สามารถปรับแต่งได้ผ่านจุดเข้าใช้งานสองจุดนี้:
-
config_statusBarComponent
-
config_systemUIFactoryComponent
ตัวอย่างเช่น หากคุณสร้างคลาสชื่อ com.android.systemui.statusbar.car.custom.CustomCarStatusBar
ซึ่งขยาย CarStatusBar
ให้อัปเดต config_statusBarComponent
ให้ชี้ไปที่คอมโพเนนต์ใหม่นี้ การขยายคลาสนี้ทำให้สามารถปรับแต่งองค์ประกอบส่วนใหญ่ที่เกี่ยวข้องกับแถบระบบและตรรกะการแจ้งเตือนได้
ในทำนองเดียวกัน คุณสามารถสร้าง CustomCarSystemUIFactory
และวางไว้ใน config_systemUIFactoryComponent
ใช้คลาสนี้เพื่ออัปเดตฟังก์ชันการทำงานของ VolumeUI และหน้าจอล็อค
ปรับแต่งการสลับและการปลดล็อคผู้ใช้
เนื้อหาต่อไปนี้จะอธิบายวิธีปรับแต่งประสบการณ์การเปลี่ยนผู้ใช้
ภาคเรียน | คำอธิบาย |
---|---|
คีย์การ์ด | กล่องโต้ตอบแบบเต็มหน้าจอเพื่อป้องกันการโต้ตอบโดยไม่ตั้งใจกับแอปเบื้องหน้า ปกป้องความเป็นส่วนตัวของผู้ใช้แต่ละคนเมื่อมีการตั้งค่าผู้ใช้หลายคน |
กำลังโหลดกล่องโต้ตอบ | หน้าจอการโหลดปรากฏขึ้นเมื่อสลับระหว่างผู้ใช้ |
ล็อคสกรีน คนโกหก | หน้าจอกำหนดให้บุคคลต้องป้อน PIN, รูปแบบ หรือรหัสผ่าน |
ผู้ใช้ | ผู้ใช้แอนดรอยด์ |
เครื่องมือเลือกผู้ใช้ | หน้าจอตัวเลือกผู้ใช้จะแสดงขึ้นเมื่ออุปกรณ์เปิดเครื่อง |
ตัวสลับผู้ใช้ | ตัวสลับผู้ใช้ปรากฏขึ้นเมื่อสลับหน้าจอจากการตั้งค่าด่วน |
ปรับแต่งการสลับผู้ใช้
คีย์การ์ดและคนโกหก
ใน Android Automotive OS หน้าจอ Keyguard พร้อมด้วยตัวเลือกผู้ใช้จะแสดง เฉพาะ เมื่อผู้ใช้คลิกปุ่มยกเลิกบนหน้าจอล็อกเท่านั้น หน้าจอ Keyguard แสดงอยู่ด้านล่าง
รูปภาพ 1. หน้าจอแผงปุ่มควบคุม
หน้าจอล็อคพร้อมตัวกั้นจะปรากฏขึ้นเมื่อผู้ใช้เลือกประเภทความเป็นส่วนตัวที่จะปลดล็อคอุปกรณ์ ดังที่แสดงด้านล่าง
รูปที่ 2 หน้าจอล็อค
เมื่อล็อคถูกตั้งค่าให้เปิดหรือปิดเครื่องด้วยตนเอง ให้ใช้คำแนะนำต่อไปนี้:
adb shell input keyevent 26
เครื่องมือเลือกผู้ใช้
หน้าจอตัวเลือกผู้ใช้จะปรากฏขึ้นเมื่ออุปกรณ์ที่รวมอยู่ในแถบสถานะ System UI ของรถยนต์และรีบูต Maps หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่ FullscreenUserSwitcher
รูปที่ 3 หน้าจอตัวเลือกผู้ใช้
เค้าโครงของหน้าจอนี้สามารถปรับแต่งได้ใน car_fullscreen_user_switcher.xml
กำลังโหลดหน้าจอ
หน้าจอการโหลดจะปรากฏขึ้นทุกครั้งที่มีการเปลี่ยนผู้ใช้ โดยไม่คำนึงถึงจุดเริ่มต้น เช่น ผ่านเครื่องมือเลือกผู้ใช้หรือหน้าจอการตั้งค่า หน้าจอการโหลดเป็นส่วนสำคัญของเฟรมเวิร์ก System 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
ปรับแต่งหน้าจอล็อค
หน้าจอล็อคเป็นส่วนสำคัญของ System UI ซึ่ง OEM สามารถปรับแต่งได้ หากต้องการปรับแต่งโฟลว์ ให้เริ่มต้นด้วย frameworks/base/packages/CarSystemUI/
ปรับแต่งการตั้งค่าผู้ใช้ครั้งแรก
ตัวช่วยสร้างการตั้งค่าดำเนินการตั้งค่าผู้ใช้ครั้งแรก สิ่งนี้ก็สามารถปรับแต่งได้เช่นกัน คุณสามารถใช้ UserManager API เพื่อสร้างผู้ใช้ได้ ในบางกรณี สามารถนำไปใช้ในเบื้องหลังได้ จึงทำให้กระบวนการตัวช่วยสร้างการตั้งค่าคล่องตัวขึ้น