Gösterge grubu kullanıcı arayüzü, geleneksel olarak direksiyonun arkasında ayrı bir ekranda yer alır. OEM'ler, gösterge panelini ve IVI'yı kademeli olarak tek bir ekranda birleştiriyor. Bu birleşik kullanıcı arayüzü, DriverUI'dır.
Şekil 1. DriverUI.
DriverUI, yüksek kullanılabilirlik oluşturucu (HAR) tarafından oluşturulan güvenlikle ilgili veya yasal düzenlemelere tabi öğeler hariç olmak üzere tüm gösterge paneli ekranını oluşturan bir Android sistem uygulamasıdır. DriverUI; medya oynatma, telefon aramaları, haritalar, navigasyon ve daha fazlasıyla ilgili bilgileri gösterir ve Automotive Design for Compose'u uygular.
Varsayılan küme etkinliği olarak DriverUI
DriverUI, Android'de ayrıcalıklı bir küme uygulaması olarak çalışır ve AAOS tarafından otomatik olarak başlatılır.
AAOS, gösterge panelleri oluşturmak için ClusterHomeManager sınıfını (Cluster2 olarak da bilinir) kullanır. Bu sınıf, bir gösterge paneli uygulamasını tanımlamak için gereken yapılandırmayı ve AAOS'un bu uygulamayla nasıl etkileşimde bulunduğunu belirtir. Google, Cluster2 API'lerinin referans uygulamalarını sağlar.
Platformlar
SDV'de Display Safety'yi derleyip çalıştırabilirsiniz. Yazılım tanımlı araç (SDV) platformu:
- İki konuk sanal makine gerekir.
- HAR'ı, SDV Media'da (hızlı başlatma sanal makinesi olarak da bilinir) bir konuk sanal makinede çalıştırır.
- DriverUI'yi başka bir konuk SDV IVI sanal makinesinde çalıştırır.
- SDV Media sanal makinesinde Güvenlik Monitörü'nü çalıştırır.

Şekil 2. SDV platform mimarisi.
HAR ve DriverUI çıkışını birleştirme
HAR ve DriverUI, kullanıcı arayüzlerini oluşturmak için ayrı ekranlar kullanır. İki çıkış birleştirilir ve DriverUI'da tek bir görüntü olarak görünür.
Bunu sağlamak için HAR, DriverUI'dan gelen sinyal mesajlarına göre Android çıkışının göründüğü alanların şeffaflığını kontrol eder. DriverUI kullanılamadığında HAR, kalp atışlarının olmadığını algılar ve DriverUI alanlarını opak hale getirerek yer tutucuları gösterir. Sinyaller alındığında yer tutucular kaldırılır ve DriverUI alanları şeffaf olacak şekilde ayarlanır.

Şekil 3. HAR ve DriverUI oluşturma.
Alfa kompozisyonu ve delme ile ilgili sorunları giderme
HAR, güvenlik açısından kritik olduğundan donanım ekran düzlemi, Android IVI ekran düzleminin üzerinde yer alır. HAR'da özel görünümler veya harici OpenGL ES yüzeyleri oluştururken ya da bunlarda hata ayıklarken alfa değerlerinin nasıl ayarlandığını doğrulayın:
- HAR düzleminde eksik DriverUI çıkışı: HAR, DriverUI'dan geçerli
HeartbeatRequestmesajları alırken DriverUI görüntü alanı bölgesini şeffaf (alpha = 0.0) olarak temizlemelidir. Böylece, alttaki Android küme kullanıcı arayüzü görünür. Özel bir HAR katmanı veya arka plan, DriverUI alanının üzerine opak pikseller (alpha = 1.0) çiziyorsa altındaki Android çıkışını engeller. - Özel 3D veya OpenGL yüzeylerinde istenmeyen şeffaf delikler: Harici bir OpenGL ES veya 3D yüzeyi bir HAR düğümüne (ör.
0x00değerinde kullanılmayan bir alfa baytı bırakılmışRGBpiksel yazan özel bir 3D gösterge veya sahne) oluşturduğunuzda opak piksellerin alfa kanalını açıkça0xFF(alpha = 1.0) olarak ayarlayın. Alfa baytının0x00değerinde bırakılması, birleştiricinin bu pikselleri şeffaf (alpha = 0.0) olarak değerlendirmesine ve HAR katmanından alttaki Android IVI düzlemine doğrudan bir delik açmasına neden olur. - Sanal makineler arası ekran teşhisi: HAR (
sdv_media_har_cf) ve Android IVI (sdv_ivi_cf_ds) ayrı konuk sanal makinelerde çalıştığından, Android IVI sanal makinesindeadb shell dumpsys SurfaceFlingerkomutunu çalıştırmak yalnızca Android katmanlarını inceler ve üstteki HAR düzlemini göremez.
DriverUI ve HAR iletişimi
DriverUI ve HAR, uzak prosedür çağrılarını (RPC'ler) kullanarak birbirleriyle iletişim kurar. Sinyal mesajı, RPC kanalı üzerinden gönderilen verilere bir örnektir ve alanlarından biri zaman damgasıdır.
RPC'ler için gRPC kullanılır. SDV'de SDV iletişimi, DriverUI'dan HAR'a bir kanal keşfetmek ve oluşturmak için SDV Ağ Geçidi İstemcisi'ni sağlar. gRPC hizmeti, bir protokol arabelleği dosyası tanımlar:
// 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) {}
İstek ve yanıt ayrıntıları, ub-automotive kaynak kodu deposundaki packages/apps/Car/DriverUI/proto/driverui.proto adresinde bulunan Display Safety kaynağında yer alır.
SDV platformunda SDV comms, DriverUI'dan HAR'a gRPC kanalı bulup oluşturmak için SDV Gateway Client'ı sağlar.
Bu komutlar IVI terminali kullanılarak yürütüldüğünde SDV Media'ya iletişim gönderilir ve tüm kümede tema güncellemeleri tetiklenir.
adb shell cmd car_service inject-key -d 1 9 # Purple Theme
adb shell cmd car_service inject-key -d 1 8 # Blue Theme

Şekil 4. Hem DriverUI hem de HAR temasını değiştirmek için RPC iletişimi.
Gösterge panelinde medya, harita ve telefon bilgilerini görüntüleme
DriverUI, IVI ile iletişim kurarak referans kümesinde medya, haritalar ve telefonla ilgili bilgileri gösterebilir. Referans uygulamada varsayılan durum olarak Medya kullanılsa da ekran, etkin hizmetlere göre aşağıdaki öncelik sırasına göre güncellenir:
- Haritalar
- Telefon
- Medya
Sistem, varsayılan medya durumu yerine Haritalar navigasyonunu veya etkin telefon hizmetlerini göstermeye otomatik olarak öncelik verir.
Çeşitli DriverUI görüntüleme durumları aşağıdaki şekilde gösterilmiştir:

Şekil 5. Tam gösterge panelinde Medya ve Telefon bölümünü gösteren DriverUI.
Otomotiv için Tasarım'ı Compose ile entegre etme
DriverUI, tasarımların (Figma) doğrudan Android uygulamasında gösterilmesine ve yinelenmesine olanak tanımak için Automotive Design for Compose'u uygular. Bu entegrasyon, tasarım dokümanlarının çalışma zamanı ortamında oluşturulmasını sağlayarak tasarım ile geliştirme arasındaki boşluğu doldurur.
Tasarım öğelerine erişme
DriverUI için örnek Figma belgeleri, kod tabanının bir parçasıdır. Bu tasarımlara erişmek ve bunları değiştirmek için:
packages/apps/Car/DriverUI/src/main/assets/figma/*.dcfkonumundaki yerel Automotive Design for Compose DCF tasarım dosyasıyla DriverUI'ı başlatın.packages/apps/Car/DriverUI/src/main/assets/DriverUI.figöğe dosyasını bulun.- Kaynak tasarımları görüntülemek veya değişiklik yapmak için bu dosyayı Figma'ya aktarın.
Compose için Otomotiv Tasarımı sürümü
- Gradle,
packages/apps/Car/libs/aaos-apps-gradle-project/gradle/libs.versions.tomliçindedesigncomposeiçin belirtilen Automotive Design for Compose sürümünü kullanır. - Automotive Design for Compose sürümlerini sürümler sayfasında bulabilirsiniz.
Canlı haberler yapılandırması
Automotive Design for Compose, geliştirme modunda Anlık Bilgilendirmeleri destekler. Bu sayede, Figma'da yapılan değişiklikler DriverUI'da anında uygulanır. Bu sayede hızlı test ve daha hızlı tasarım iterasyonu döngüleri kolaylaşır.
DriverUI için Figma jetonunu ayarlamak üzere aşağıdaki komutu çalıştırın:
adb shell am startservice \
-n "com.android.car.driverui/com.android.designcompose.ApiKeyService" \
-a setApiKey \
-e ApiKey $FIGMA_ACCESS_TOKEN \
--user 0
İkili sanal makine tasarım dokümanı senkronizasyonu
İkili sanal makine kurulumunda, tutarlılığı korumak için tasarım güncellemelerinin sınırlar arasında yayılması gerekir.
- DriverUI, en son Figma tasarım dokümanını getirir ve bu sayfada ayrıntılı olarak açıklanan gRPC iletişim kanallarını kullanarak HAR'a iletir.
- Böylece, kümenin tamamı en son Figma tasarım iterasyonlarıyla güncellenir ve her iki sanal makine de tasarım kaynağıyla senkronize edilir.

Şekil 6. Tasarım dokümanının Figma'dan DriverUI ve HAR'a canlı güncellemesi.
gRPC kanalının güvenliğini sağlama
gRPC, SSL ve TLS entegrasyonuna sahiptir. Sunucunun kimliğini doğrulamak ve istemci ile sunucu arasında paylaşılan tüm verileri şifrelemek için SSL ve TLS kullanımını teşvik eder. İstemcilerin karşılıklı kimlik doğrulama için sertifika sağlamasına yönelik isteğe bağlı mekanizmalar mevcuttur. gRPC kimlik doğrulaması hakkında daha fazla bilgi için Kimlik Doğrulama başlıklı makaleyi inceleyin.