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 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 được kết hợp chặt chẽ với các dịch vụ khung. Giao diện người dùng hệ thống đề cập đến bất kỳ thành phần nào được 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 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 tùy chỉnh riêng cho ô tô.

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 Hệ thống ô tô bao gồm:

Thành phần Sự miêu tả
Giao diện người dùng màn hình khóa Màn hình thông qua đó người dùng được xác thực 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 bên cạnh để điều hướng đến các ứng dụng khác nhau, chuyển đổi bảng thông báo và cung cấp khả năng điều khiển phương tiện (chẳng hạn như HVAC). Điều này khác với cách triển khai Giao diện người dùng hệ thống Android vốn 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. Thanh trạng thái cũng cung cấp chức năng hỗ trợ:
  • Các biểu tượng kết nối Bao gồm kết nối Bluetooth, Wi-Fi và Hotspot/Di động.
  • Bảng thông báo kéo xuống. Ví dụ: vuốt từ trên cùng của màn hình xuống.
  • Thông báo cảnh báo (HUN).
Giao diện người dùng hệ thống Đề cập đến bất kỳ thành phần 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 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 khối 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 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 chạy khi thiết bị được bật nguồn. Ứng dụng được khởi động thông qua sự phản ánh của SystemServer . Các điểm nhập phù hợp nhất cho các khía cạnh mà người dùng có thể nhìn thấy của Giao diện người dùng hệ thống được liệt kê bên dưới. Sử dụng các thành phần này để tùy 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à 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 đè.

Tùy 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 để tùy chỉnh Giao diện người dùng hệ thống, nhưng làm như vậ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ợ 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 được 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 như cấu trúc gốc AOSP ban đầu. Đố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 hệ thống ô tô sử dụng tài nguyên từ giao diện người dùng hệ thống gói CarSystemUI, 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 của giao diện người dùng 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 ở:

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

Để thay thế frameworks/base/packages/SystemUI/res/values/config.xml , (trong System UI, 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/

Mô tả về hai điểm nhập tùy chỉnh chính được cung cấp bên dưới.

Giao diện người dùng 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. Khả năng hiển thị của từng thanh hệ thống được chuyển đổi theo các cấu hình sau:

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

Mỗi thanh có trạng thái được cung cấp và không được cung cấp, có thể được tùy chỉnh bằng cách xếp chồng 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 phía dưới)
  • 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 chế độ xem 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 chế độ xem này sẽ tăng cao trong CarSystemBar#createSystemBar nếu thiết bị được cung cấp đúng cách cho một người dùng nhất định.

Thanh trạng thái

Hãy coi thanh trạng thái là 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 nó. 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 biểu tượng, hãy chia tỷ lệ biểu tượng một cách thống nhất theo hệ số tỷ lệ thay vì chỉ định 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 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 cũng bao gồm bảng thông báo, trình chuyển đổi người dùng, thông báo cảnh báo (HUN) và bộ bảo vệ phím. Các bố cục khác nhau cho những thứ 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 cung cấp tính linh hoạt cần thiết để tùy chỉnh đầy đủ hành vi của Giao diện người dùng hệ thống.

Báo động. Những thay đổi được thực hiện đối với mã nguồn Android rất khó cập nhật trong các bản phát hành Android sau này. Chúng tôi đặc biệt khuyên 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 UI của Hệ thống ô tô cơ bản có thể được nâng cấp với mức xung đột hợp nhất tối thiểu vì tất cả các tùy chỉnh đều được triển khai thông qua các bề mặt API đã biết.

Hầu hết các khía cạnh của Giao diện người dùng hệ thống có thể được tùy chỉnh thông qua hai điểm nhậ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 , lớp này 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 tùy chỉnh hầu hết các thành phần 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 nó 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 khóa.

Tùy chỉnh chuyển đổi và mở khóa người dùng

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

Thuật ngữ Sự miêu tả
Bảo vệ bàn phím Hộp thoại toàn màn hình để ngăn chặn sự tương tác ngẫu nhiên với ứng dụng trên nền trước. Bảo vệ quyền riêng tư của mỗi 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 hiển thị khi chuyển đổi giữa Người dùng.
Màn hình khóa, người bảo vệ Màn hình yêu cầu một người nhập mã PIN, hình mở khóa 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ị được khởi động.
Trình chuyển đổi người dùng Trình chuyển đổi người dùng được hiển thị khi chuyển đổi màn hình từ QuickSettings.

Tùy chỉnh chuyển đổi người dùng

Bảo vệ bàn phím và bảo vệ

Trong Android Automotive OS, màn hình Keyguard với bộ chọn người dùng chỉ hiển thị khi người dùng nhấp vào nút Hủy trên màn hình khóa. Màn hình Keyguard được hiển thị bên dưới.

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

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

Màn hình khóa có trình bảo vệ được hiển thị khi người dùng đã chọn loại quyền riêng tư để mở khóa thiết bị, như hiển thị bên dưới.

Màn hình khóa

Hình 2. Màn hình khóa.

Khi khóa được đặt để kích hoạt bật hoặc tắt nguồn theo cách thủ công, hãy sử dụng 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 được hiển thị khi 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à Bản đồ được khởi động lại. Để tìm hiểu thêm, hãy xem FullscreenUserSwitcher .

Đang tải màn hình

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

Bố cục của màn hình này có thể được tùy chỉnh trong car_fullscreen_user_switcher.xml .

Đang tải màn hình

Màn hình tải được hiển thị bất cứ khi nào người dùng được chuyển đổi, bất kể điểm vào. 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 không thể thiếu với 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 để biết ví dụ.

Chủ đề có thể được tùy chỉnh bằng Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog .

Để thiết lập người dùng Android, quy trình Trình hướng dẫn thiết lập ban đầu cho phép trình điều khiển tự thiết lập tên người dùng. Sau đó, nếu trình điều khiển liên kết người dùng Android với tài khoản Google thì 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ọ với tên Maddy, thì tên được gán ban đầu (DriverB) sẽ không bị 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 menu Cài đặt.

Bố cục có thể được tùy chỉnh trong car_user_switching_dialog.xml .

OEM có thể ẩn trạng thái và thanh điều hướng bằng cách sử dụng chủ đề 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 ô tô.) Để biết thêm thông tin, hãy xem Tùy chỉnh .

Mặc dù 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. OEM tạo và hiển thị màn hình tải (hoặc hộp thoại) tùy chỉnh.
    • Cụ thể đối với UX, OEM khởi chạy màn hình tải tùy chỉnh khi người dùng chọn phương tiện để chuyển đổi, màn hình này có thể bị ẩn khi quá trình chuyển đổi của người dùng hoàn tất.
    • OEM phải đặt cửa sổ ưu tiên theo sở thích của họ. Ví dụ: loại cửa sổ có mức độ ưu tiên cao hơn. Mức độ ưu tiên không được vượt quá mức ưu tiên của Keyguard.
  2. OEM đặt config_customUserSwitchUi=true trong khung lõi config.xml như được mô tả trong config_customuserswitchui . Kết quả là khung không hiển thị CarUserSwitchingDialog .

Tùy chỉnh màn hình khóa

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

Tùy chỉnh thiết lập người dùng lần đầu

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