DriverUI

يتم عادةً وضع واجهة مستخدم مجموعة العدادات خلف عجلة القيادة في شاشة منفصلة. يدمج المصنّعون الأصليون للأجهزة تدريجيًا لوحة القيادة ونظام المعلومات والترفيه داخل المركبة (IVI) في شاشة واحدة. واجهة المستخدم المجمّعة هذه هي DriverUI.

DriverUI

الشكل 1: DriverUI.

‫DriverUI هو تطبيق نظام Android يعرض لوحة قياس كاملة، باستثناء العناصر التنظيمية أو ذات الصلة بالسلامة التي يعرضها محرّك العرض العالي التوفّر (HAR). تعرض واجهة DriverUI معلومات متعلقة بتشغيل الوسائط والمكالمات الهاتفية والخرائط والتنقّل والمزيد، وتنفّذ تصميم Automotive لـ Compose.

‫DriverUI كنشاط المجموعة التلقائي

يتم تشغيل DriverUI كتطبيق مجموعة متميّز في Android ويبدأ نظام التشغيل AAOS تشغيله تلقائيًا.

يستخدم نظام AAOS الفئة ClusterHomeManager، والتي يُشار إليها أيضًا باسم Cluster2، لإنشاء لوحات قياس. تحدّد هذه الفئة الإعدادات اللازمة لتحديد طريقة تنفيذ لوحة العدادات وكيفية تفاعل نظام AAOS معها. توفّر Google عمليات تنفيذ مرجعية لواجهات برمجة تطبيقات Cluster2.

المنصات

يمكنك إنشاء ميزة "أمان الشاشة" وتشغيلها على SDV. منصة المركبات المعرَّفة بالبرامج (SDV):

  • يتطلّب ذلك جهازَين افتراضيَّين للضيوف.
  • يتم تشغيل HAR في SDV Media (المعروف أيضًا باسم الجهاز الافتراضي للتشغيل السريع) في جهاز افتراضي ضيف.
  • يتم تشغيل DriverUI في جهاز افتراضي آخر لنظام المعلومات والترفيه داخل المركبة (IVI) في مركبة معرَّفة بالبرامج (SDV) للضيف.
  • يتم تشغيل ميزة "مراقبة السلامة" على الجهاز الافتراضي SDV Media.

بنية منصة SDV

الشكل 2: بنية منصة SDV

دمج مخرجات HAR وDriverUI

يستخدم HAR وDriverUI شاشات منفصلة لعرض واجهة المستخدم الخاصة بهما. ويتم دمج المخرجات من المصدرين لتظهر كصورة واحدة في DriverUI.

لتحقيق ذلك، يتحكّم HAR في شفافية المناطق التي يظهر فيها ناتج Android استنادًا إلى رسائل الإشعار من DriverUI. عندما لا تكون واجهة DriverUI متاحة، ترصد HAR عدم توفّر إشارات النشاط وتعرض مناطق DriverUI معتمة وتُظهر عناصر نائبة. عند تلقّي إشارات الاتصال، تتم إزالة العناصر النائبة ويتم ضبط مناطق DriverUI لتكون شفافة.

مكوّنات HAR وDriverUI

الشكل 3: تركيب HAR وDriverUI

تحديد مشاكل تركيب ألفا والشفافية وحلّها

بما أنّ تطبيق HAR مهم جدًا للسلامة، يتم وضع مستوى عرض أجهزته فوق مستوى عرض Android IVI. عند إنشاء طرق عرض مخصّصة أو تصحيح أخطائها أو أسطح OpenGL ES الخارجية في HAR، تحقّق من كيفية ضبط قيم ألفا:

  • عدم توفُّر مخرجات DriverUI ضمن مستوى HAR: بينما يتلقّى HAR رسائل HeartbeatRequest صالحة من DriverUI، يجب أن يمحو HAR منطقة إطار العرض في DriverUI لتصبح شفافة (alpha = 0.0) حتى تظهر واجهة مستخدم مجموعة Android الأساسية. إذا كانت طبقة HAR مخصّصة أو خلفية ترسم وحدات بكسل معتمة (alpha = 1.0) فوق منطقة DriverUI، فإنّها تحجب مخرجات Android تحتها.
  • ثقوب شفافة غير مقصودة في أسطح OpenGL أو الأسطح الثلاثية الأبعاد المخصّصة: عند عرض سطح OpenGL ES خارجي أو سطح ثلاثي الأبعاد في عقدة HAR (مثل مقياس ثلاثي الأبعاد مخصّص أو مشهد يكتب وحدات بكسل RGB مع ترك بايت ألفا غير مستخدَم عند 0x00)، اضبط قناة ألفا لوحدات البكسل غير الشفافة بشكل صريح على 0xFF (alpha = 1.0). يؤدي ترك بايت ألفا عند 0x00 إلى أن يتعامل المُركِّب مع وحدات البكسل هذه على أنّها شفافة (alpha = 0.0) ويُحدث ثقبًا مباشرةً من خلال طبقة HAR إلى مستوى Android IVI الأساسي.
  • بيانات تشخيص العرض على مستوى الأجهزة الافتراضية: بما أنّ HAR (sdv_media_har_cf) وAndroid IVI (sdv_ivi_cf_ds) يعملان في أجهزة افتراضية ضيفة منفصلة، فإنّ تشغيل adb shell dumpsys SurfaceFlinger على جهاز Android IVI الافتراضي يفحص فقط طبقات Android ولا يمكنه الاطّلاع على مستوى HAR العلوي.

DriverUI and HAR communication

تتواصل واجهة DriverUI وHAR مع بعضهما البعض باستخدام استدعاءات الإجراءات عن بُعد (RPC). رسالة الإشعار هي مثال على البيانات التي يتم إرسالها عبر قناة RPC وتتألف من طابع زمني كأحد حقولها.

يتم استخدام gRPC لإجراء طلبات RPC. في المركبات المعرَّفة بالبرامج، توفّر ميزة SDV comms عميل SDV Gateway للعثور على قناة من DriverUI إلى HAR وإنشائها. تحدّد خدمة gRPC ملف Protocol Buffers:


// 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) {}

تتوفّر تفاصيل الطلب والاستجابة في مصدر Display Safety على الرابط packages/apps/Car/DriverUI/proto/driverui.proto في مستودع الرموز البرمجية لمصدر ub-automotive.

على منصة SDV، توفّر ميزة SDV comms عميل SDV Gateway للعثور على قناة gRPC وإنشائها من DriverUI إلى HAR.

يؤدي تنفيذ هذه الأوامر باستخدام وحدة المعلومات والترفيه داخل المركبة (IVI) إلى إرسال رسالة إلى SDV Media، ما يؤدي إلى تعديل المظهر في المجموعة بأكملها.

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

RPC communication to change both DriverUI and HAR
theme.

الشكل 4. RPC communication to change both DriverUI and HAR theme.

عرض معلومات الوسائط والخرائط والهاتف على لوحة القيادة

من خلال التواصل مع نظام المعلومات والترفيه داخل المركبة (IVI)، يمكن لواجهة DriverUI عرض معلومات عن الوسائط و"خرائط Google" والاتصالات الهاتفية ضمن لوحة القيادة المرجعية. على الرغم من أنّ الوسائط تمثّل الحالة التلقائية في التنفيذ المرجعي، يتم تعديل الشاشة استنادًا إلى الخدمات النشطة وفقًا للأولوية التالية:

  1. خرائط
  2. الاتصالات الهاتفية
  3. الوسائط

يمنح النظام الأولوية تلقائيًا لعرض التنقّل في "خرائط Google" أو خدمات الاتصال الهاتفي النشطة على حالة "الوسائط" التلقائية.

توضّح الصورة التالية حالات العرض المختلفة في DriverUI:

‫DriverUI يعرض قسمَي "الوسائط" و"الاتصال الهاتفي" في مجموعة كاملة

الشكل 5: واجهة DriverUI تعرض قسمَي "الوسائط" و"الاتصال الهاتفي" في مجموعة كاملة

دليل دمج Automotive Design for Compose

تنفّذ DriverUI تصميم Automotive لـ Compose للسماح بعرض التصاميم (Figma) وتكرارها مباشرةً داخل تطبيق Android. يساهم هذا الدمج في سد الفجوة بين التصميم والتطوير من خلال إتاحة عرض مستندات التصميم في بيئة التشغيل.

الوصول إلى مواد عرض التصميم

تُعدّ نماذج مستندات Figma الخاصة بـ DriverUI جزءًا من قاعدة الرموز البرمجية. للوصول إلى هذه التصاميم وتعديلها:

  1. شغِّل DriverUI باستخدام ملف تصميم DCF المحلي لـ Automotive Design for Compose من packages/apps/Car/DriverUI/src/main/assets/figma/*.dcf.
  2. ابحث عن ملف مادة العرض packages/apps/Car/DriverUI/src/main/assets/DriverUI.fig.
  3. يمكنك استيراد هذا الملف إلى Figma للاطّلاع على التصاميم المصدر أو إجراء تغييرات.

إصدار Automotive Design for Compose

  • يستخدم Gradle إصدار Automotive Design for Compose المحدّد لـ designcompose في packages/apps/Car/libs/aaos-apps-gradle-project/gradle/libs.versions.toml.
  • تتوفّر إصدارات Automotive Design for Compose على صفحة الإصدارات.

إعدادات التغطية المباشرة للأخبار

تتيح أداة Automotive Design for Compose التحديثات المباشرة في وضع مطوّر البرامج، ما يسمح بعرض التغييرات التي تم إجراؤها في Figma على الفور في DriverUI. ويسهّل ذلك الاختبار السريع ودورات تكرار التصميم الأسرع.

نفِّذ الأمر التالي لضبط رمز Figma المميّز لـ DriverUI:

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

مزامنة مستندات تصميم الأجهزة الافتراضية المزدوجة

في إعدادات الجهاز الافتراضي المزدوج، يجب أن تنتشر تحديثات التصميم عبر الحدود للحفاظ على الاتساق.

  • يجلب DriverUI أحدث مستند تصميم Figma وينقله إلى HAR باستخدام قنوات اتصال gRPC المفصّلة في هذه الصفحة.
  • نتيجةً لذلك، يتم تحديث المجموعة الكاملة بأحدث تكرارات تصميم Figma، مما يحافظ على مزامنة كلا الجهازين الظاهريين مع مصدر التصميم.

تحديث مباشر لمستند التصميم من Figma إلى DriverUI و
HAR.

الشكل 6: تحديث مباشر لمستند التصميم من Figma إلى DriverUI وHAR.

تأمين قناة gRPC

يتكامل gRPC مع بروتوكولَي SSL وTLS ويشجّع على استخدامهما لمصادقة الخادم وتشفير جميع البيانات المتبادلة بين العميل والخادم. تتوفّر آليات اختيارية للعملاء لتقديم شهادات للمصادقة المتبادلة. لمزيد من المعلومات عن مصادقة gRPC، يُرجى الاطّلاع على المصادقة.