Triển khai Giao diện người dùng hệ thống

Android Automotive cung cấp giao diện người dùng hệ thống mới được phát triển dành riêng cho xe. Hầu hết các thành phần của Giao diện người dùng hệ thống được kết hợp chặt chẽ với các dịch vụ khung. System UI (Giao diện người dùng hệ thống) là bất kỳ phần tử hiển thị trên màn hình nhưng không thuộc ứng dụng. Giao diện người dùng Automotive System (trong giao diện Gói phần tử CarSystemUI) là một tiện ích của Giao diện người dùng hệ thống Android (trong gói Giao diện người dùng hệ thống), được tuỳ chỉnh riêng cho xe.

Giao diện người dùng hệ thống là gì?

Các thành phần dành riêng cho giao diện người dùng của Automotive System bao gồm:

Thành phần Mô tả
Giao diện người dùng màn hình khoá Màn hình mà qua đó người dùng được xác thực để truy cập vào một tài khoản người dùng cụ thể.
Thanh điều hướng Thanh hệ thống có thể được đặt ở bên trái, dưới cùng hoặc bên phải màn hình và có thể bao gồm các nút thuộc tính để điều hướng đến các ứng dụng khác nhau, bật/tắt bảng thông báo và cung cấp các thiết bị điều khiển xe (chẳng hạn như HVAC). Giao diện này khác với giao diện người dùng hệ thống của Android Triển khai này, cung cấp các nút Quay lại, Trang chủ và ngăn xếp ứng dụng.
Thanh trạng thái Thanh hệ thống được đặt dọc theo màn hình và đóng vai trò là thanh điều hướng. Chiến lược phát hành đĩa đơn thanh trạng thái cũng cung cấp chức năng hỗ trợ:
  • Biểu tượng kết nối. Bao gồm Bluetooth, Wi-Fi và Điểm phát sóng/Kết nối di động.
  • Kéo xuống bảng thông báo. Ví dụ: vuốt xuống từ đầu màn hình.
  • Thông báo quan trọng (HUN).
Giao diện người dùng hệ thống Đề cập đến bất kỳ phần tử nào xuất hiện trên màn hình nhưng không thuộc một ứng dụng.
Giao diện người dùng của Trình chuyển đổi người dùng Màn hình mà qua đó người dùng có thể chọn một người dùng khác.
Giao diện người dùng âm lượng Hộp thoại xuất hiện khi người lái xe sử dụng các nút âm lượng vật lý để thay đổi âm lượng trên thiết bị.

Giao diện người dùng hệ thống hoạt động như thế nào?

Giao diện người dùng hệ thống là một ứng dụng Android sẽ chạy khi một thiết bị đang bật nguồn. Chiến lược phát hành đĩa đơn được khởi động thông qua sự phản chiếu của SystemServer (Máy chủ hệ thống). Dưới đây là các điểm truy cập phù hợp nhất để người dùng thấy được trong Giao diện người dùng hệ thống. Sử dụng các thành phần này để tuỳ chỉnh giao diện người dùng của hệ thống Android nhằm phục vụ các chức năng dành riêng cho Automotive.

  • config_statusBarComponent
  • config_systemUIFactoryComponent

CarSystemUI là một phần mở rộng của gói System UI, nghĩa là các lớp và gói CarSystemUI có thể sử dụng và ghi đè các tài nguyên trong gói Giao diện người dùng hệ thống.

Tuỳ chỉnh giao diện người dùng hệ thống

Lớp phủ

Mặc dù bạn có thể sửa đổi mã nguồn Android để tuỳ chỉnh Giao diện người dùng hệ thống, làm như vậy khiến việc áp dụng các bản cập nhật Android trong tương lai trở nên khó khăn và phức tạp hơn. Thay vào đó, Android hỗ trợ sử dụng thư mục lớp phủ, cho phép bạn thay thế các tệp tài nguyên mà không cần sửa đổi mã nguồn. Trong hệ thống xây dựng Android, hệ thống lớp phủ sẽ ghi đè các tệp trong một một cách có sự kiểm soát. Tất cả các tệp đã sửa đổi đều được xác định rõ ràng mà không cần duyệt qua toàn bộ cây mã nguồn AOSP (Dự án nguồn mở Android).

Các tệp lớp phủ phải được đặt trong thư mục PRODUCT_PACKAGE_OVERLAYS và phải có các thư mục con giống hệt như cấu trúc gốc AOSP ban đầu. Cho Android 10 trở lên, PRODUCT_PACKAGE_OVERLAYS được đặt thành:

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

Giao diện người dùng Automotive System sử dụng tài nguyên từ Giao diện người dùng hệ thống các gói CarSystemUI, có nghĩa là tài nguyên từ mỗi vị trí có thể bị ghi đè bằng lớp phủ để ảnh hưởng đến giao diện người dùng của Automotive System.

Để thay thế một tệp, hãy sao chép cấu trúc thư mục của tệp đang được thay thế trong Thư mục /overlay mà bạn đã chỉ định, sau đó đưa thư mục thay thế vào thư mục đó thư mục. Ví dụ: để thay thế:

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

Thêm tệp super_status_bar.xml thay thế nằm trong:

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

Để thay thế frameworks/base/packages/SystemUI/res/values/config.xml, (trong Giao diện người dùng hệ thống, không phải CarSystemUI), hãy thêm tệp config.xml thay thế vào:

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

hoặc

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

Dưới đây là nội dung mô tả về hai điểm truy cập tuỳ chỉnh chính.

Giao diện người dùng Automotive System có thể có 3 thanh điều hướng ở bên trái, dưới cùng và bên phải màn hình. Chế độ hiển thị của từng thanh hệ thống được bật/tắt với các cấu hình sau:

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

Mỗi thanh có một trạng thái được cấp phép và không được cấp phép, có thể được tuỳ chỉnh bằng cách phủ các tệp bố cục tương ứng:

  • car_left_system_bar.xml
  • car_left_system_bar_unprovisioned.xml
  • car_system_bar.xml (bố cục cho thanh điều hướng dưới cùng)
  • car_system_bar_unprovisioned.xml
  • car_right_system_bar.xml
  • car_right_system_bar_unprovisioned.xml

Những bố cục này phải chứa com.android.systemui.car.systembar.CarSystemBarView ở cấp cao nhất, có thể bao gồm mọi chế độ xem cần thiết khác. Các nút bên trong thanh điều hướng có thể được đưa vào bằng cách sử dụng com.android.systemui.car.systembar.CarSystemBarButton.

Các thành phần hiển thị này được tăng cường trong CarSystemBar#createSystemBar, nếu thiết bị được cấp phép phù hợp cho một người dùng cụ thể.

Thanh trạng thái

Hãy coi thanh trạng thái là thanh điều hướng có thêm chức năng. Không giống như thanh điều hướng thì thanh trạng thái không có cờ để tắt. Bạn có thể sửa đổi thanh trạng thái bằng:

  • car_top_navigation_bar.xml
  • car_top_navigation_bar_unprovisioned.xml

Những bố cục này phải chứa com.android.systemui.statusbar.car.CarNavigationBarView ở cấp cao nhất. Thanh trạng thái chứa các biểu tượng trạng thái. Để thay đổi kích thước của một biểu tượng, hãy điều chỉnh tỷ lệ biểu tượng một cách nhất quán với hệ số tỷ lệ thay vì chỉ định kích thước cụ thể. Ví dụ: trong một lớp phủ tệp /overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml, hãy thêm các kích thước sau để tăng gấp đôi kích thước của các biểu tượng:

<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>

Thanh trạng thái nằm trong lớp cửa sổ đặc biệt cũng bao gồm bảng thông báo, trình chuyển đổi người dùng, thông báo quan trọng (HUN) và bàn phím. Các bố cục khác nhau cho những bố cục này được bao gồm trong super_status_bar.xml.

Thay đổi mã nguồn giao diện người dùng hệ thống

Lớp phủ có thể không có sự linh hoạt cần thiết để tuỳ chỉnh đầy đủ hành vi của Giao diện người dùng hệ thống.

Cảnh báo. Khó cập nhật các thay đổi đối với mã nguồn Android trong các bản phát hành Android sau này. Bạn nên mở rộng mã giao diện người dùng của Automotive System thay vì trực tiếp sửa đổi mã. Bằng cách này, mã nguồn giao diện người dùng của Automotive System có thể được nâng cấp mà không bị xung đột hợp nhất, vì tất cả các hoạt động tuỳ chỉnh đều được triển khai thông qua các nền tảng API đã biết.

Bạn có thể tuỳ chỉnh hầu hết các khía cạnh của Giao diện người dùng hệ thống thông qua hai điểm truy cập sau đây:

  • config_statusBarComponent
  • config_systemUIFactoryComponent

Ví dụ: nếu bạn tạo một lớp có tên com.android.systemui.statusbar.car.custom.CustomCarStatusBar, kéo dài CarStatusBar, cập nhật config_statusBarComponent thành điểm cho thành phần mới này. Việc mở rộng lớp này cho phép tuỳ chỉnh hầu hết các phần tử liên quan vào thanh hệ thống và logic thông báo.

Tương tự, bạn có thể tạo CustomCarSystemUIFactory rồi đặt vào config_systemUIFactoryComponent. Hãy sử dụng lớp này để cập nhật chức năng của Giao diện người dùng âm lượng và màn hình khoá.

Tuỳ chỉnh tính năng chuyển đổi và mở khoá người dùng

Tài liệu sau đây mô tả cách tuỳ chỉnh trải nghiệm chuyển đổi người dùng.

Thuật ngữ Mô tả
Khóa bàn phím Hộp thoại toàn màn hình để ngăn việc vô tình tương tác với ứng dụng trên nền trước. Bảo vệ quyền riêng tư của từng người dùng khi thiết lập nhiều người dùng.
Đang tải hộp thoại Màn hình tải xuất hiện khi chuyển đổi giữa các Người dùng.
Màn hình khoá, trình trả lại Màn hình yêu cầu người dùng nhập mã PIN, hình mở khoá hoặc mật khẩu.
Người dùng Người dùng Android.
Bộ chọn người dùng Màn hình bộ chọn người dùng hiển thị khi khởi động thiết bị.
Trình chuyển đổi người dùng Trình chuyển đổi người dùng hiển thị khi chuyển màn hình từ trình đơn Cài đặt nhanh.

Tuỳ chỉnh tính năng chuyển đổi người dùng

Bàn phím và bộ trả bóng

Trong Android Automotive OS, màn hình Bàn phím có bộ chọn người dùng chỉ hiển thị khi người dùng nhấp vào nút Cancel (Huỷ) trên màn hình khoá. Màn hình Bàn phím được hiển thị dưới đây.

Màn hình bàn phím

Hình 1. Màn hình bảo vệ bàn phím

Màn hình khoá có trình trả lại sẽ hiển thị khi người dùng đã chọn loại quyền riêng tư cần dùng mở khoá thiết bị, như minh hoạ dưới đây.

Màn hình khoá

Hình 2. Màn hình khoá.

Khi bạn đặt khoá để bật hoặc tắt nguồn theo cách thủ công, hãy làm theo hướng dẫn sau:

adb shell input keyevent 26

Bộ chọn người dùng

Màn hình bộ chọn người dùng xuất hiện khi có một thiết bị tích hợp với thanh trạng thái Giao diện người dùng hệ thống của ô tô và Maps sẽ khởi động lại. Để tìm hiểu thêm, hãy xem FullscreenUserSwitcher.

Màn hình tải

Hình 3. Màn hình bộ chọn người dùng

Bạn có thể tuỳ chỉnh bố cục của màn hình này theo car_fullscreen_user_switcher.xml.

Màn hình tải

Màn hình tải hiển thị bất cứ khi nào người dùng được chuyển đổi, bất kể điểm truy cập. Để chẳng hạn như thông qua bộ chọn người dùng hoặc màn hình Cài đặt. Màn hình tải là một phần không thể thiếu của giao diện người dùng hệ thống khung và ánh xạ tới lớp công khai có tên CarUserSwitchingDialog. Xem Hình 3 ở trên là một ví dụ.

Bạn có thể tuỳ chỉnh giao diện bằng Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog.

Để thiết lập người dùng Android, quy trình ban đầu của Trình hướng dẫn thiết lập sẽ cho phép người lái xe thiết lập người dùng đặt tên cho chính họ. Sau đó, nếu người lái xe liên kết người dùng Android với Tài khoản Google, tên được chọn từ tài khoản đó. Tuy nhiên, nếu người lái xe chỉ định một tên (ví dụ: DriverB), sau đó liên kết tên người dùng đó với Tài khoản Google của họ bằng tên của Maddy, tên được gán ban đầu (DriverB) sẽ không thay đổi vì tên đó đã được đặt rõ ràng. Tài xế chỉ có thể thay đổi tên trên trình đơn Cài đặt.

Có thể tuỳ chỉnh bố cục trong car_user_switching_dialog.xml.

OEM có thể che giấu thanh trạng thái và điều hướng bằng cách sử dụng giao diện có tên NoActionBar.Fullscreen. (Đây là giao diện người dùng hệ thống gốc, được cập nhật cho giao diện người dùng tham chiếu của ô tô.) Để biết thêm thông tin, hãy xem Tuỳ chỉnh.

Mặc dù OEM có thể cung cấp điểm truy cập giao diện người dùng để chuyển đổi người dùng, nhưng đôi khi kết quả có thể không mong muốn. Nếu điều này xảy ra:

  1. OEM sẽ tạo và hiển thị màn hình (hoặc hộp thoại) tải tuỳ chỉnh.
    • Dành riêng cho trải nghiệm người dùng, OEM khởi chạy màn hình tải tuỳ chỉnh khi người dùng chọn phương tiện để nút chuyển mà có thể được ẩn đi khi quá trình chuyển đổi người dùng hoàn tất.
    • OEM phải đặt mức độ ưu tiên theo lựa chọn ưu tiên của họ. Ví dụ: loại cửa sổ có mức độ ưu tiên cao hơn. Mức độ ưu tiên mức độ ưu tiên không thể vượt quá mức ưu tiên của Bàn phím.
  2. OEM đặt config_customUserSwitchUi=true trong khung cốt lõi config.xml như được mô tả trong config_customuserswitchui. Là một thì khung này sẽ không hiển thị CarUserSwitchingDialog.

Tuỳ chỉnh màn hình khoá

Màn hình khoá là một phần không thể thiếu của Giao diện người dùng hệ thống mà OEM có thể tuỳ chỉnh. Để tuỳ chỉnh quy trình, hãy bắt đầu với frameworks/base/packages/CarSystemUI/.

Tuỳ chỉnh chế độ thiết lập của người dùng lần đầu tiên

Trình hướng dẫn thiết lập sẽ thực hiện quá trình thiết lập cho người dùng lần đầu tiên. Bạn cũng có thể tuỳ chỉnh sự kiện này. Bạn có thể sử dụng API UserManager để tạo một người dùng. Trong một số trường hợp, tính năng này có thể được triển khai ở chế độ nền, nhờ đó tinh giản hoá quá trình Trình hướng dẫn thiết lập.