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

Android Automotive cung cấp một Giao diện người dùng hệ thống mới được phát triển dành riêng cho ô tô. Hầu hết các thành phần của Giao diện người dùng hệ thống đều được ghép nối chặt chẽ với các dịch vụ khung. Giao diện người dùng hệ thống đề cập đến mọi thành phần hiển thị trên màn hình không thuộc một ứng dụng. Giao diện người dùng hệ thống ô tô (trong gói phần tử CarSystemUI) là phần mở rộng 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 Hệ thống ô tô 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 xác thực người dùng với 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 khía để đ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 chế độ điều khiển xe (chẳng hạn như hệ thống điều hòa không khí). Điều này khác với cách triển khai Giao diện người dùng hệ thống Android, trong đó cung cấp các nút Quay lại, Màn hình chính 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. 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.
  • Bảng thông báo kéo xuống. Ví dụ: vuốt từ đầu màn hình xuống.
  • Thông báo quan trọng (HUN).
Giao diện người dùng hệ thống Tham chiếu đến bất kỳ phần tử nào hiển thị trên màn hình không phải là một phần của ứ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à 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 hiển thị khi trình điều khiển sử dụng các nút âm lượng thực để 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 của hệ thống là một ứng dụng Android chạy khi thiết bị bật nguồn. Ứng dụng được khởi động thông qua phản chiếu của SystemServer. Dưới đây là danh sách các điểm truy cập phù hợp nhất cho các khía cạnh hiển thị với người dùng của 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 hệ thống Android cho các chức năng dành riêng cho ô tô.

  • config_statusBarComponent
  • config_systemUIFactoryComponent

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

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, nhưng việc này sẽ 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ợ việc 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 theo cách 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.

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 với cấu trúc gốc của AOSP. Đối với 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 của hệ thống ô tô sử dụng tài nguyên từ Giao diện người dùng hệ thống các gói CarSystemUI, nghĩa là tài nguyên từ mỗi vị trí có thể được ghi đè bằng lớp phủ để ảnh hưởng đến giao diện của Giao diện người dùng của hệ thống ô tô.

Để 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 tệp thay thế vào 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 của hệ thống ô tô có thể có ba thanh điều hướng ở bên trái, dưới cùng và bên phải màn hình. Bạn có thể bật/tắt chế độ hiển thị của từng thanh hệ thống bằng các cấu hình sau:

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

Mỗi thanh có trạng thái đã cấp phép và chưa cấp phép. Bạn có thể tuỳ chỉnh trạng thái này 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

Các 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 thành phần hiển thị cần thiết khác. Bạn có thể thêm các nút bên trong thanh điều hướng 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 đúng cách cho một người dùng cụ thể.

Thanh trạng thái

Hãy xem thanh trạng thái là một thanh điều hướng có chức năng bổ sung. Không giống như thanh điều hướng, thanh trạng thái không có cờ để tắt thanh này. 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

Các 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 kích thước biểu tượng một cách đồng nhất bằng hệ số tỷ lệ thay vì chỉ định một kích thước cụ thể. Ví dụ: trong tệp lớp phủ /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 một lớp cửa sổ đặc biệt, trong đó cũng có bảng thông báo, trình chuyển đổi người dùng, thông báo quan trọng (HUN) và khoá phím. Các bố cục khác nhau cho các thành phần này được đưa vào 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 cung cấp 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 Hệ thống ô tô 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 Hệ thống ô tô cơ bản có thể được nâng cấp với ít xung đột hợp nhất nhất vì tất cả các 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:

  • 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 mở rộng CarStatusBar, hãy cập nhật config_statusBarComponent để trỏ đến 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 đến thanh hệ thống và logic thông báo.

Tương tự, bạn có thể tạo CustomCarSystemUIFactory và đặt vào config_systemUIFactoryComponent. Sử dụng lớp này để cập nhật chức năng của VolumeUI 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 của 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.
Hộp thoại đang tải Màn hình tải xuất hiện khi chuyển đổi giữa Người dùng.
Màn hình khoá, trình chặn 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 thiết bị khởi động.
Trình chuyển đổi người dùng Trình chuyển đổi người dùng hiển thị khi chuyển đổi màn hình từ QuickSettings.

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

Trình bảo vệ khoá và trình chặn

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

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

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

Màn hình khoá có trình chặn sẽ xuất hiện khi người dùng đã chọn một loại quyền riêng tư để 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 khoá được đặt để kích hoạt chế độ 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 sẽ xuất hiện khi một thiết bị tích hợp vào thanh trạng thái Giao diện người dùng hệ thống của ô tô và Maps được 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 trong car_fullscreen_user_switcher.xml.

Màn hình tải

Màn hình tải sẽ xuất hiện bất cứ khi nào người dùng được chuyển đổi, bất kể điểm truy cập. Ví dụ: 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à liên kết đến lớp công khai có tên CarUserSwitchingDialog. Hãy xem Hình 3 ở trên để biế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 cho phép người lái xe thiết lập tên người dùng cho chính họ. Sau đó, nếu trình điều khiển liên kết người dùng Android với một Tài khoản Google, tên người dùng sẽ được chọn từ tài khoản đó. Tuy nhiên, nếu trình điều khiển chỉ định một tên, chẳng hạn như DriverB, sau đó liên kết tên người dùng đó với Tài khoản Google của họ có tên là Maddy, thì tên được chỉ định ban đầu (DriverB) sẽ không thay đổi vì tên đó đã được đặt rõ ràng. Trình điều khiển chỉ có thể thay đổi tên trên trình đơn Cài đặt.

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

Nhà sản xuất thiết bị gốc (OEM) có thể ẩn thanh trạng thái và thanh đ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 ban đầu, được cập nhật cho giao diện người dùng tham chiếu trên ô tô.) Để biết thêm thông tin, hãy xem phần Tuỳ chỉnh.

Mặc dù nhà sản xuất thiết bị gốc (OEM) có thể cung cấp các đ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. Nhà sản xuất thiết bị gốc (OEM) tạo và hiển thị màn hình tải (hoặc hộp thoại) tuỳ chỉnh.
    • Riêng về trải nghiệm người dùng, nhà sản xuất thiết bị gốc (OEM) sẽ khởi chạy màn hình tải tuỳ chỉnh khi người dùng chọn phương thức chuyển đổi. Màn hình này có thể được ẩn khi người dùng hoàn tất quá trình chuyển đổi.
    • Nhà sản xuất thiết bị gốc (OEM) phải đặt cửa sổ ư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 của tính năng này không được vượt quá mức độ ưu tiên của tính năng Khoá màn hình.
  2. OEM đặt config_customUserSwitchUi=true trong khung chính config.xml như mô tả trong config_customuserswitchui. Do đó, khung 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 và nhà sản xuất thiết bị gốc (OEM) có thể tuỳ chỉnh màn hình này. Để tuỳ chỉnh luồng, hãy bắt đầu bằng frameworks/base/packages/CarSystemUI/.

Tuỳ chỉnh quy trình thiết lập lần đầu cho người dùng

Trình hướng dẫn thiết lập thực hiện việc thiết lập người dùng lần đầu. Bạn cũng có thể tuỳ chỉnh phần này. Bạn có thể sử dụng API UserManager để tạo người dùng. Trong một số trường hợp, bạn có thể triển khai việc này ở chế độ nền, nhờ đó đơn giản hoá quy trình của Trình hướng dẫn thiết lập.