DriverUI

Theo truyền thống, giao diện người dùng cụm đồng hồ được đặt phía sau vô lăng trên một màn hình riêng. Các OEM dần kết hợp cụm đồng hồ và IVI vào một màn hình duy nhất. Giao diện người dùng kết hợp này là DriverUI.

DriverUI

Hình 1. DriverUI.

DriverUI là một ứng dụng hệ thống Android kết xuất toàn bộ màn hình cụm đồng hồ, ngoại trừ các thành phần liên quan đến an toàn hoặc quy định do trình kết xuất có độ tin cậy cao (HAR) kết xuất. DriverUI hiển thị thông tin liên quan đến chế độ phát nội dung nghe nhìn , cuộc gọi điện thoại, bản đồ, tính năng điều hướng và nhiều thông tin khác, đồng thời triển khai Thiết kế ô tô cho Compose.

DriverUI làm hoạt động cụm đồng hồ mặc định

DriverUI chạy dưới dạng một ứng dụng cụm đồng hồ có đặc quyền trong Android và AAOS tự động khởi động ứng dụng này.

AAOS sử dụng lớp ClusterHomeManager (còn gọi là Cluster2) để tạo cụm đồng hồ. Lớp này chỉ định cấu hình cần thiết để xác định việc triển khai cụm đồng hồ và cách AAOS tương tác với cụm đồng hồ đó. Google cung cấp các cách triển khai tham chiếu của API Cluster2.

Nền tảng

Bạn có thể tạo và chạy tính năng An toàn màn hình trên SDV. Nền tảng xe được xác định bằng phần mềm (SDV):

  • Yêu cầu 2 máy ảo khách.
  • Chạy HAR trong Nội dung nghe nhìn SDV (còn gọi là máy ảo khởi động nhanh) trong một máy ảo khách.
  • Chạy DriverUI trong một máy ảo IVI SDV khách khác.
  • Chạy Trình giám sát an toàn trên máy ảo Nội dung nghe nhìn SDV.

Kiến trúc nền tảng SDV

Hình 2. Kiến trúc nền tảng SDV.

Kết hợp đầu ra của HAR và DriverUI

HAR và DriverUI sử dụng các màn hình riêng biệt để kết xuất giao diện người dùng. Hai đầu ra này là đầu ra tổng hợp và xuất hiện dưới dạng một hình ảnh đối với DriverUI.

Để đạt được điều này, HAR kiểm soát độ trong suốt của các khu vực mà đầu ra của Android xuất hiện dựa trên thông báo nhịp tim từ DriverUI. Khi DriverUI không hoạt động, HAR sẽ phát hiện thấy không có nhịp tim và kết xuất các khu vực DriverUI ở dạng mờ đục, đồng thời hiển thị trình giữ chỗ. Khi nhận được nhịp tim, trình giữ chỗ sẽ bị xoá và các khu vực DriverUI được đặt ở trạng thái trong suốt.

Thành phần HAR và DriverUI

Hình 3. Thành phần HAR và DriverUI.

Giao tiếp giữa DriverUI và HAR

DriverUI và HAR giao tiếp với nhau bằng cách sử dụng lệnh gọi quy trình từ xa (RPC). Thông báo nhịp tim là một ví dụ về dữ liệu được gửi qua kênh RPC và bao gồm dấu thời gian làm một trong các trường của thông báo đó.

gRPC được dùng cho RPC. Trên SDV, tính năng giao tiếp SDV cung cấp Ứng dụng cổng SDV để phát hiện và thiết lập một kênh từ DriverUI đến HAR. Dịch vụ gRPC xác định một tệp vùng đệm giao thức:


// Heartbeat.
rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse) {}

// Document switched in the DriverUI.
rpc DocumentSwitched(DocumentSwitchedRequest) returns (DocumentSwitchedResponse) {}

// Document updated in the DriverUI. Unary RPC.
rpc DocumentUpdated(DocumentUpdatedRequest) returns (DocumentUpdatedResponse) {}

// Document updated in the DriverUI. Requests are streamed with each request
// containing a part of the document and the entire document is assembled from these
// chunks by the server.
rpc DocumentUpdatedStreaming(stream DocumentUpdatedRequest) returns (DocumentUpdatedResponse) {}

/// Request for HAR to change design tokens.
rpc DesignTokenUpdate(DesignTokenUpdateRequest) returns (DesignTokenUpdateResponse) {}

// Request to change the current locale used in HAR.
rpc LocaleUpdate(LocaleUpdateRequest) returns (LocaleUpdateResponse) {}

// Requests to swap a certain variant at a Figma node.
rpc ChangeVariant(ChangeVariantRequest) returns (ChangeVariantResponse) {}

// Requests to change the container (display/root node) configuration (dpi, size) in HAR.
rpc ChangeContainerConfiguration(ChangeContainerConfigurationRequest) returns (ChangeContainerConfigurationResponse) {}

Thông tin chi tiết về yêu cầu và phản hồi có trong nguồn An toàn màn hình tại packages/apps/Car/DriverUI/proto/driverui.proto trong kho lưu trữ mã nguồn ub-automotive.

Trên nền tảng SDV, tính năng giao tiếp SDV cung cấp Ứng dụng cổng SDV để phát hiện và thiết lập một kênh gRPC từ DriverUI đến HAR.

Việc thực thi các lệnh này bằng thiết bị đầu cuối IVI sẽ gửi thông tin liên lạc đến Nội dung nghe nhìn SDV, kích hoạt các bản cập nhật giao diện trên toàn bộ cụm đồng hồ.

adb shell cmd car_service inject-key -d 1 9 # Purple Theme
adb shell cmd car_service inject-key -d 1 8 # Blue Theme

Giao tiếp RPC để thay đổi cả DriverUI và giao diện HAR.

Hình 4. Giao tiếp RPC để thay đổi cả giao diện DriverUI và HAR.

Hiển thị thông tin về Nội dung nghe nhìn, Maps và Điện thoại trên cụm đồng hồ

Thông qua giao tiếp với IVI, DriverUI có thể hiển thị thông tin về Nội dung nghe nhìn, Maps và Điện thoại trong cụm đồng hồ tham chiếu. Mặc dù Nội dung nghe nhìn đóng vai trò là trạng thái mặc định trong quá trình triển khai tham chiếu, nhưng màn hình sẽ cập nhật dựa trên các dịch vụ đang hoạt động theo mức độ ưu tiên sau:

  1. Maps
  2. Điện thoại
  3. Nội dung nghe nhìn

Hệ thống tự động ưu tiên hiển thị tính năng điều hướng của Maps hoặc các dịch vụ Điện thoại đang hoạt động so với trạng thái Nội dung nghe nhìn mặc định.

Các trạng thái hiển thị khác nhau của DriverUI được minh hoạ trong hình sau:

DriverUI giới thiệu đầy đủ phần Nội dung nghe nhìn và Điện thoại trong cụm.

Hình 5. DriverUI giới thiệu phần Nội dung nghe nhìn và Điện thoại trong cụm đồng hồ đầy đủ.

Tích hợp Thiết kế ô tô cho Compose

DriverUI triển khai Thiết kế ô tô cho Compose để cho phép các thiết kế (Figma) giới thiệu và lặp lại trực tiếp trong ứng dụng Android. Quá trình tích hợp này giúp thu hẹp khoảng cách giữa thiết kế và phát triển bằng cách cho phép kết xuất tài liệu thiết kế trong môi trường thời gian chạy.

Truy cập vào tài sản thiết kế

Các tài liệu Figma mẫu cho DriverUI là một phần của cơ sở mã. Cách truy cập và sửa đổi các thiết kế này:

  1. Khởi chạy DriverUI bằng tệp thiết kế DCF Thiết kế ô tô cho Compose cục bộ từ packages/apps/Car/DriverUI/src/main/assets/figma/*.dcf.
  2. Tìm tệp tài sản packages/apps/Car/DriverUI/src/main/assets/DriverUI.fig.
  3. Nhập tệp này vào Figma để xem các thiết kế nguồn hoặc thực hiện thay đổi.

Phiên bản Thiết kế ô tô cho Compose

  • Gradle sử dụng phiên bản Thiết kế ô tô cho Compose được chỉ định cho designcompose trong packages/apps/Car/libs/aaos-apps-gradle-project/gradle/libs.versions.toml.
  • Các bản phát hành Thiết kế ô tô cho Compose có trên trang phát hành.

Cấu hình cập nhật trực tiếp

Thiết kế ô tô cho Compose hỗ trợ các bản cập nhật trực tiếp ở chế độ phát triển, cho phép các thay đổi được thực hiện trong Figma được kết xuất ngay lập tức trong DriverUI. Điều này giúp thử nghiệm nhanh và lặp lại thiết kế nhanh hơn.

Chạy lệnh sau để đặt mã thông báo Figma cho DriverUI:

adb shell am startservice \
  -n "com.android.car.driverui/com.android.designcompose.ApiKeyService" \
  -a setApiKey \
  -e ApiKey $FIGMA_ACCESS_TOKEN \
  --user 0

Đồng bộ hoá tài liệu thiết kế của máy ảo kép

Trong quá trình thiết lập máy ảo kép, các bản cập nhật thiết kế phải lan truyền qua các ranh giới để duy trì tính nhất quán.

  • DriverUI tìm nạp tài liệu thiết kế Figma mới nhất và truyền đến HAR bằng các kênh giao tiếp gRPC được trình bày chi tiết trên trang này.
  • Do đó, toàn bộ cụm đồng hồ sẽ cập nhật các lần lặp lại thiết kế Figma mới nhất, giúp cả hai máy ảo đồng bộ hoá với nguồn thiết kế.

Cập nhật trực tiếp tài liệu thiết kế từ Figma sang DriverUI và HAR.

Hình 6. Cập nhật trực tiếp tài liệu thiết kế từ Figma sang DriverUI và HAR.

Bảo mật kênh gRPC

gRPC có tính năng tích hợp SSL và TLS, đồng thời khuyến khích sử dụng SSL và TLS để xác thực máy chủ và mã hoá tất cả dữ liệu được trao đổi giữa ứng dụng và máy chủ. Các cơ chế không bắt buộc có sẵn để ứng dụng cung cấp chứng chỉ cho quá trình xác thực lẫn nhau. Để biết thêm thông tin về tính năng xác thực gRPC, hãy xem bài viết Xác thực.