دليل الدمج لمصنعي المعدّات الأصلية

توضّح هذه الصفحة كيفية معالجة إدخالات القرص الدوّار في VHAL، وكيفية ضبط الإصدار ليشمل خدمة القرص الدوّار، وكيفية تخصيص تجربة القرص الدوّار في جميع التطبيقات. بالنسبة إلى تطبيقات المصنّع الأصلي للأجهزة المثبَّتة مسبقًا، مثل مشغّل التطبيقات الذي يوفّره المصنّع الأصلي للأجهزة، يُرجى الاطّلاع على مكتبة واجهة مستخدم السيارة (car-ui-library).

VHAL

يتيح جهاز التحكّم الدوّار تنفيذ الإجراءات التالية:

  • الدفع للأعلى والأسفل واليسار واليمين
  • تدوير في اتجاه عقارب الساعة وعكس اتجاه عقارب الساعة
  • اضغط على الزر الأوسط.
  • اضغط على زر الرجوع.
  • اضغط على زر الشاشة الرئيسية.
  • اضغط على أزرار أخرى، مثل "الهاتف" و"الوسائط".

راجِع hardware/interfaces/automotive/vehicle/2.0/types.hal للاطّلاع على مستندات حول سمات النظام وint32Values المقابلة.

يجب أن يتعامل VHAL مع الإجراءات التالية:

تذكير تلقائي

عندما يحرّك المستخدم وحدة التحكّم الدوّارة إلى اليمين، يجب أن تستخدم VHAL السمة HW_KEY_INPUT مع int32Values التالية لإرسال حدث إلى Android:

  1. ACTION_DOWN
  2. KEYCODE_SYSTEM_NAVIGATION_RIGHT
  3. شاشة العرض المستهدَفة

عندما يحرّر المستخدم أداة التحكّم الدوّارة، يجب أن تستخدم VHAL السمة ورمز المفتاح نفسهما مع ACTION_UP. يجب أن تستخدم الإشعارات في اتجاهات أخرى رموز المفاتيح المناسبة.

لا تتوفّر رموز مفاتيح للأحداث القطرية، ولكن يمكن لطبقة تجريد الأجهزة في السيارة (VHAL) دمج حدث أفقي وحدث عمودي لإنشاء حدث قطري إذا كان الجهاز يتيح ذلك. على سبيل المثال، يجب أن يؤدي التوجيه إلى الأعلى وإلى اليسار إلى ظهور ما يلي:

  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_DOWN
  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_DOWN

يجب أن يؤدي تحرير وحدة التحكّم الدوّارة بأي ترتيب (وبعد ذلك) إلى ما يلي:

  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_UP
  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_UP

يمكن للمستخدم الضغط على وحدة التحكّم الدوّارة في اتجاه عمودي قبل تحريرها. على سبيل المثال، السيناريو التالي:

الاتجاه العمودي
الشكل 1. الاتجاه العمودي

من المفترض أن يؤدي ذلك إلى إنشاء تسلسل الأحداث التالي:

  1. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_DOWN
  2. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_DOWN
  3. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_UP
  4. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_UP

يجب عدم إنشاء أحداث تكرار أثناء الضغط على أداة التحكّم الدوّارة في اتجاه واحد.

تدوير

عندما يدير المستخدم أداة التحكّم الدوّارة في اتجاه عقارب الساعة بمقدار موضع توقّف واحد (نقرة)، يجب أن تستخدم VHAL السمة HW_ROTARY_INPUT مع int32Values التالية لإرسال حدث إلى Android:

  1. ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION
  2. نقطة توقف واحدة
  3. شاشة العرض المستهدَفة

يجب ضبط الطابع الزمني للحدث على الوقت المنقضي بالنانو ثانية.

يجب أن يؤدي تدوير واحد (1) بعكس اتجاه عقارب الساعة إلى إنشاء الحدث نفسه ولكن مع -1 لعدد مواضع التوقف.

إذا حدثت عدة نقاط توقّف للدوران في الاتجاه نفسه بشكل متسلسل وسريع، يجب أن يجمع VHAL نقاط التوقّف في حدث واحد حتى لا يتم إرهاق النظام بالأحداث. في هذه الحالة، يجب أن يكون الطابع الزمني للحدث هو وقت حدوث أول موضع توقف للدوران. يجب أن يتضمّن int32Values عدد النانو ثانية بين مواضع التوقف المتتالية أثناء الدوران.

على سبيل المثال، تسلسل عمليات التدوير التالية:

  • في الوقت t0، أدار المستخدم أحد مواضع التوقف عكس اتجاه عقارب الساعة.
  • في الوقت t0 + 5 ns، أدار المستخدم أحد مواضع التوقف بمقدار درجة واحدة عكس اتجاه عقارب الساعة.
  • في الوقت t0 + 8 ns، أدار المستخدم موضع توقّف واحدًا عكس اتجاه عقارب الساعة.

يجب أن يؤدي إلى إنشاء الحدث التالي:

  • الموقع: HW_ROTARY_INPUT
  • الطابع الزمني: t0
  • int32Values:
    1. ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION
    2. ‫-3 (ثلاث نقرات عكس اتجاه عقارب الساعة)
    3. شاشة العرض المستهدَفة
    4. ‫5 نانو ثانية بين موضع التوقف الأول والثاني
    5. ‫3 نانو ثانية بين موضعَي التوقف الثاني والثالث

الزر الأوسط

عندما يضغط المستخدم على الزر الأوسط، يجب أن تستخدم VHAL السمة HW_KEY_INPUT مع int32Values التالية لإرسال حدث إلى Android:

  1. ACTION_DOWN
  2. KEYCODE_DPAD_CENTER
  3. شاشة العرض المستهدَفة

عندما يرفع المستخدم يده عن أداة التحكّم الدوّارة، يجب أن تستخدم VHAL السمة ورمز المفتاح نفسهما مع ACTION_UP.

عدم إنشاء أحداث تكرار عند الضغط مع الاستمرار على الزر الأوسط

زر الرجوع

عندما يضغط المستخدم على زر الرجوع، يجب أن تستخدم VHAL السمة HW_KEY_INPUT مع int32Values التالية لإرسال حدث إلى Android:

  1. ACTION_DOWN
  2. KEYCODE_BACK
  3. شاشة العرض المستهدَفة

عندما يرفع المستخدم يده عن أداة التحكّم الدوّارة، يجب أن تستخدم VHAL السمة ورمز المفتاح نفسهما مع ACTION_UP.

يجب عدم إنشاء أي أحداث متكرّرة أثناء الضغط مع الاستمرار على الزر الأوسط.

زر الصفحة الرئيسية

استخدِم زرّ "الشاشة الرئيسية" كما تستخدم زرّ "الرجوع" ولكن مع KEYCODE_HOME بدلاً من KEYCODE_BACK.

الأزرار الأخرى

إذا كانت وحدة التحكّم الدوّارة تتضمّن أي أزرار إضافية، يمكن لطبقة تجريد الأجهزة في السيارة (VHAL) التعامل معها بالطريقة التي يفضّلها مصنّع المعدات الأصلية، لأنّها لا تُعتبر جزءًا من وحدة التحكّم الدوّارة من منظور Android. ويتم التعامل معها عادةً مثل زرَّي "رجوع" و"الشاشة الرئيسية" ولكن باستخدام رموز مفاتيح مختلفة. على سبيل المثال، KEYCODE_CALL أو KEYCODE_MUSIC.

إعدادات التصميم

يتم توفير التنقّل الدوّار من خلال خدمة تسهيل الاستخدام المعروفة باسم RotaryService. لتضمين هذه الخدمة في صورة النظام لجهازك، أضِف السطر التالي إلى ملف makefile:

PRODUCT_PACKAGES += CarRotaryController

يمكنك أيضًا تضمين الحِزم التالية في إصدارات تصحيح الأخطاء:

  • RotaryPlayground تطبيق مرجعي لوحدة التحكّم الدورانية (راجِع RotaryPlayground).
  • RotaryIME محرر أسلوب إدخال دوراني تجريبي (راجِع محررات أساليب الإدخال).
  • CarRotaryImeRRO المحتوى الذي يظهر على سطح الصفحة لـ RotaryIME

يتم تفعيل خدمة القرص الدوّار تلقائيًا عند تشغيل الجهاز وعندما يبدّل المستخدم الحساب. يضمن ذلك إمكانية استخدام أداة التحكّم الدوّارة أثناء عملية الإعداد.

إذا كنت تستخدم الإصدار نفسه للسيارات التي تتضمّن أداة تحكّم دوّارة وتلك التي لا تتضمّنها، أضِف CarRotaryController كما هو موضّح أعلاه حتى يتم تضمين الرمز البرمجي اللازم في الإصدار. لمنع تفعيل خدمة السيارات ذات المحرك الدوّار على السيارات غير الدوّارة، أنشئ RRO ثابتًا لتراكب مورد السلسلة rotaryService في packages/services/Car/service بسلسلة فارغة. ستستخدم الإصدار نفسه، ولكن ستتوفّر إعدادات منفصلة للمنتج للأجهزة التي تتضمّن أزرارًا دوّارة وتلك التي لا تتضمّنها. ويشمل الأخير فقط التراكب.

التخصيص

يمكن لمصنّعي المعدات الأصلية تخصيص منطق العثور على موضع التركيز وتمييز موضع التركيز وبعض العناصر الإضافية من خلال تراكبات الموارد في المواقع التالية:

  • يقع car-ui-library في packages/apps/Car/libs/car-ui-lib
  • يقع "RotaryService" في packages/apps/Car/RotaryController
  • يقع "Core" في frameworks/base/core

سجلّ التذكيرات التلقائية

يمكن لمصنّع المعدات الأصلية ضبط ما إذا كان سيتم تفعيل كل نوع من نوعَي سجلّ الإشعارات التذكيرية أم لا، وفي حال التفعيل، يمكنه ضبط حجم ذاكرة التخزين المؤقت وسياسة انتهاء الصلاحية. ويتم كل ذلك من خلال إلغاء موارد مختلفة في car-ui-library.

ذاكرة التخزين المؤقت لسجلّ التركيز

(الإصدار 3 من حزمة إصلاح الأخطاء في Android 11، وAndroid 11 Car، وAndroid 12)
يخزّن هذا التخزين المؤقت الخاص بكل FocusArea آخر عرض تم التركيز عليه ضمن FocusArea، ليتم التركيز عليه عند الرجوع إلى FocusArea. يمكن ضبط هذه الذاكرة المؤقتة من خلال تراكب موارد car-ui-library التالية:

  • car_ui_focus_history_cache_type:
    1. تم إيقاف ذاكرة التخزين المؤقت.
    2. ستنتهي صلاحية ذاكرة التخزين المؤقت بعد مرور بعض الوقت (راجِع ما يلي).
    3. لن تنتهي صلاحية ذاكرة التخزين المؤقت أبدًا.
  • car_ui_focus_history_expiration_period_ms: عدد الملّي ثانية قبل انتهاء صلاحية ذاكرة التخزين المؤقت إذا تم ضبط نوع ذاكرة التخزين المؤقت على 2 (راجِع ما ورد أعلاه).

ذاكرة التخزين المؤقت لسجلّ FocusArea

(الإصدار الثالث من Android 11 QPR، وAndroid 11 Car، وAndroid 12)
يخزِّن هذا التخزين المؤقت سجلّاً بالإشعارات الخفيفة حتى يتمكّن الإشعار الخفيف في الاتجاه المعاكس من إعادة التركيز إلى FocusArea نفسه. يمكن ضبط هذه الذاكرة المؤقتة من خلال إضافة موارد car-ui-library التالية:

  • car_ui_focus_area_history_cache_type:
    1. تم إيقاف ذاكرة التخزين المؤقت.
    2. تنتهي صلاحية ذاكرة التخزين المؤقت بعد مرور بعض الوقت (راجِع القسم أدناه).
    3. لا تنتهي صلاحية ذاكرة التخزين المؤقت أبدًا.
  • car_ui_focus_area_history_expiration_period_ms: عدد الملّي ثانية قبل انتهاء صلاحية ذاكرة التخزين المؤقت إذا تم ضبط نوع ذاكرة التخزين المؤقت على 2 (راجِع ما ورد أعلاه).
  • car_ui_clear_focus_area_history_when_rotating: لتحديد ما إذا كان سيتم إبطال ذاكرة التخزين المؤقت عندما يدير المستخدم وحدة التحكّم.

تدوير

(الإصدار الثالث من حزمة QPR لنظام Android 11 وAndroid 11 Car وAndroid 12)
يمكن لمصنّع المعدات الأصلية تجاهل موردَين من موارد الأعداد الصحيحة في RotaryService لتحديد ما إذا كان هناك تسارع، مثل تسارع الماوس، عند التدوير:

  • rotation_acceleration_3x_ms: الفاصل الزمني (بالمللي ثانية) المستخدَم لتحديد ما إذا كان على Google تسريع تدوير وحدة التحكّم عند نقطة توقّف التدوير. إذا كانت الفترة الفاصلة بين موضع التوقف هذا وموضع التوقف السابق للدوران أقل من هذه القيمة، سيتم التعامل معها على أنّها ثلاثة مواضع توقف للدوران. اضبط القيمة على 2147483647 لإيقاف التسريع بمقدار 3 مرات.
  • rotation_acceleration_2x_ms: مشابهة لـ rotation_acceleration_3x_ms يُستخدَم للتسريع بمقدار مرّتين. اضبط القيمة على 2147483647 لإيقاف التسريع بمقدار مرتين.

تعمل ميزة التسارع بشكل أفضل عند توفّر طوابع زمنية فردية لكل موضع توقّف في الدوران، كما هو مطلوب من خلال VHAL. في حال عدم توفّرها، يفترض RotaryService أنّ مواضع التوقف عند الدوران موزّعة بالتساوي.

/**
     * Property to feed H/W rotary events to android
     *
     * int32Values[0] : RotaryInputType identifying which rotary knob rotated
     * int32Values[1] : number of detents (clicks), positive for clockwise,
     *                  negative for counterclockwise
     * int32Values[2] : target display defined in VehicleDisplay. Events not
     *                  tied to specific display must be sent to
     *                  VehicleDisplay#MAIN.
     * int32values[3 .. 3 + abs(number of detents) - 2]:
     *                  nanosecond deltas between pairs of consecutive detents,
     *                  if the number of detents is > 1 or < -1
     *
     * VehiclePropValue.timestamp: when the rotation occurred. If the number of
     *                             detents is > 1 or < -1, this is when the
     *                             first detent of rotation occurred.
     *
     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
     * @data_enum RotaryInputType
     * @access VehiclePropertyAccess:READ
     */
    HW_ROTARY_INPUT = (
        0x0A20
        | VehiclePropertyGroup:SYSTEM
        | VehiclePropertyType:INT32_VEC
        | VehicleArea:GLOBAL),

تمييز التركيز

يمكن للمصنّع الأصلي للجهاز إلغاء تمييز التركيز التلقائي في إطار عمل Android والعديد من موارد تمييز التركيز في car-ui-library.

تمييز التركيز التلقائي

يوفّر إطار عمل Android تمييزًا تلقائيًا للتركيز من خلال السمة selectableItemBackground. في Theme.DeviceDefault، تشير هذه السمة إلى item_background.xml في Core. يمكن للمصنّع الأصلي للجهاز إضافة طبقة فوق item_background.xml لتغيير العنصر القابل للرسم التلقائي الخاص بتحديد موضع التركيز.

يجب أن يكون هذا العنصر الرسومي عادةً StateListDrawable، والذي يضبط الخلفية استنادًا إلى مجموعات مختلفة من الحالات، بما في ذلك android:state_focused وandroid:state_pressed. عندما يستخدم المستخدم أداة التحكّم الدوّارة لضبط تركيز العرض، ستكون قيمة android:state_focused هي true، بينما ستكون قيمة android:state_pressed هي false. إذا ضغط المستخدم بعد ذلك على الزر الأوسط في وحدة التحكّم الدوّارة، سيتم تفعيل كل من android:state_focused وandroid:state_pressed أثناء الضغط على الزر.true عندما يرفع المستخدم إصبعه عن الزر، لن يظهر سوى android:state_focused true.

تستخدِم car-ui-library مظهرًا مشتقًا من Theme.DeviceDefault. نتيجةً لذلك، تؤثّر هذه الطبقة المتراكبة في التطبيقات التي تستخدم هذه المكتبة والتطبيقات التي تستخدم أي مظهر مشتق من Theme.DeviceDefault. لن يؤثّر ذلك في التطبيقات التي تستخدم مظهرًا غير ذي صلة، مثل Theme.Material.

التركيز على موارد التمييز في car-ui-library

يمكن للمصنّع الأصلي للجهاز تجاهل العديد من موارد car-ui-library للتحكّم في شكل تمييز التركيز على طرق العرض التي لا تكون مستطيلة (مثل الشكل الدائري أو البيضاوي) وفي التطبيقات التي تستخدم مظهرًا لا يستند إلى Theme.DeviceDefault. يجب أن يتم تراكب هذه الموارد ليكون تمييز التركيز متوافقًا مع عنصر الرسم تمييز التركيز التلقائي.

(الإصدار 3 من حزمة إصلاح الأخطاء في نظام التشغيل Android 11، وAndroid 11 Car، وAndroid 12)
يتم استخدام الموارد التالية للإشارة إلى وقت تركيز العرض ولكن بدون الضغط عليه:

  • car_ui_rotary_focus_fill_color: لون التعبئة
  • car_ui_rotary_focus_stroke_color: لون الخط المحيطي
  • car_ui_rotary_focus_stroke_width: تشير إلى سمك المخطط التفصيلي.

(الإصدار 3 من حزمة QPR لنظام التشغيل Android 11، وAndroid 11 Car، وAndroid 12)
يتم استخدام الموارد التالية للإشارة إلى وقت تركيز العرض والضغط عليه:

  • car_ui_rotary_focus_pressed_fill_color: لون التعبئة
  • car_ui_rotary_focus_pressed_stroke_color: لون الخط المحيطي
  • car_ui_rotary_focus_pressed_stroke_width: تشير إلى سمك المخطط التفصيلي.

في بعض الأحيان، يتم منح الزر لون خلفية ثابتًا لجذب انتباه المستخدم، كما هو موضّح في المثال. وقد يؤدي ذلك إلى صعوبة رؤية التمييز في التركيز.

زر بخلفية مصمتة
الشكل 2. زر بخلفية مصمتة

في هذه الحالة، يمكن للمطوّر تحديد تمييز مخصّص للتركيز باستخدام ألوان ثانوية:
  • (الإصدار 3 من حزمة إصلاح الأخطاء في نظام Android 11، وAndroid 11 Car، وAndroid 12)
    car_ui_rotary_focus_fill_secondary_color
    car_ui_rotary_focus_stroke_secondary_color
  • (Android 12)
    car_ui_rotary_focus_pressed_fill_secondary_color
    car_ui_rotary_focus_pressed_stroke_secondary_color

يمكن أن يكون أي من الألوان شفافًا ويمكن أن يكون أي من البُعدَين صفرًا إذا كنت تريد، على سبيل المثال، تعبئة فقط أو مخططًا تفصيليًا فقط.

FocusArea highlight

(Android 11 QPR3 وAndroid 11 Car وAndroid 12)
FocusArea يمكنه عرض نوعَين من التمييز عندما يكون أحد العناصر التابعة له في وضع التركيز. ويمكن استخدام كلتيهما معًا إذا أردت ذلك. تكون هذه الميزة غير مفعّلة تلقائيًا في مشروع Android مفتوح المصدر (AOSP)، ولكن يمكن تفعيلها من خلال إلغاء موارد car-ui-library:

  • car_ui_enable_focus_area_foreground_highlight: رسم تمييز فوق FocusArea والعناصر التابعة له في AOSP، يكون هذا العنصر القابل للرسم عبارة عن مخطط تفصيلي حول FocusArea. يمكن للمصنّعين الأصليين للجهاز إلغاء الرسم car_ui_focus_area_foreground_highlight.
  • car_ui_enable_focus_area_background_highlight: لرسم تمييز فوق FocusArea ولكن خلف العناصر التابعة له. في AOSP، يكون هذا العنصر القابل للرسم عبارة عن تعبئة بلون ثابت. يمكن للمصنّعين الأصليين للجهاز إلغاء الرسم القابل للرسم car_ui_focus_area_background_highlight.

محرّرات أساليب الإدخال

محرّرات أساليب الإدخال (IME) هي أساليب إدخال. على سبيل المثال، لوحة مفاتيح على الشاشة.

(Android 11 QPR3 وAndroid 11 Car وAndroid 12)
على المصنّع الأصلي للجهاز أن يضع مورد السلسلة default_touch_input_method في RotaryService لتحديد ComponentName لبرنامج IME المستند إلى اللمس. على سبيل المثال، إذا كان المصنّع الأصلي للمعدّات يستخدم طريقة الإدخال التي يوفّرها Android Automotive، عليه تحديد com.google.android.apps.automotive.inputmethod/.InputMethodService.

(الإصدار 3 من حزمة إصلاح الأخطاء في نظام التشغيل Android 11، وAndroid 11 للسيارات، وAndroid 12)
إذا أنشأ المصنّع الأصلي للجهاز أداة IME مخصّصة للوحة التحكّم الدوّارة، عليه تحديد ComponentName في مورد rotary_input_method. في حال تم تراكب هذا المورد، يتم استخدام طريقة الإدخال المحدّدة هذه كلما تفاعل المستخدم مع وحدة الرأس من خلال النقر والتدوير والضغط على الزر الأوسط في وحدة التحكّم الدوّارة. عندما يلمس المستخدم الشاشة، سيتم استخدام محرر طريقة الإدخال السابق. لا يؤثر زر الرجوع (والأزرار الأخرى على وحدة التحكّم الدوّارة) في اختيار طريقة الإدخال. إذا لم يتم تراكب هذا المورد، لن يتم التبديل إلى أداة IME. لا تتوافق Carboard مع وحدة التحكّم الدورانية، لذا لا يمكن للمستخدم إدخال نص من خلال وحدة التحكّم الدورانية إذا لم يوفّر المصنّع الأصلي للجهاز أداة IME متوافقة مع وحدة التحكّم الدورانية.

RotaryIME هي نسخة تجريبية من طريقة إدخال البيانات عبر وحدة تحكّم دورانية. على الرغم من أنّها أساسية، إلا أنّها كافية لتجربة ميزة التبديل التلقائي لطريقة الإدخال الموضّحة أعلاه. يمكنك العثور على رمز المصدر الخاص بـ "RotaryIME" في packages/apps/Car/tests/RotaryIME/.

تذكيرات تلقائية خارج الشاشة

بشكلٍ تلقائي، عندما يحاول المستخدم تحريك الشاشة إلى خارج حافتها، لا يحدث أي شيء. يمكن للمصنّع الأصلي للجهاز ضبط الإجراءات التي يجب تنفيذها في كل اتجاه من الاتجاهات الأربعة من خلال تحديد أي مجموعة من:

  1. إجراء عام محدّد بواسطة AccessibilityService على سبيل المثال: GLOBAL_ACTION_BACK.
  2. رمز مفتاح، مثل KEYCODE_BACK
  3. عنصر Intent لبدء نشاط يتم تمثيله كعنوان URL

(Android 11 QPR3 وAndroid 11 Car وAndroid 12)
يتم تحديد هذه الموارد من خلال تراكب موارد المصفوفة التالية في RotaryService:

  • off_screen_nudge_global_actions: مصفوفة الإجراءات العامة التي سيتم تنفيذها عندما ينتقِل المستخدم للأعلى أو للأسفل أو لليمين أو لليسار خارج حافة الشاشة. لا يتم تنفيذ أي إجراء عام إذا كان العنصر ذو الصلة في هذه المصفوفة هو -1.
  • off_screen_nudge_key_codes: مصفوفة من رموز المفاتيح لأحداث النقر التي سيتم إدخالها عندما ينقر المستخدم للأعلى أو للأسفل أو لليمين أو لليسار خارج حافة الشاشة. لا يتم إدخال أي أحداث إذا كان العنصر ذو الصلة في هذه المصفوفة هو 0 (KEYCODE_UNKNOWN).
  • off_screen_nudge_intents: مصفوفة من الأهداف لبدء نشاط معيّن عندما ينتقِل المستخدم للأعلى أو للأسفل أو لليسار أو لليمين خارج حافة الشاشة. لا يتم تشغيل أي نشاط إذا كان العنصر ذو الصلة في هذه المصفوفة فارغًا.

إعدادات أخرى

يجب أن تضع فوق بعضها المراجع التالية RotaryService:

  • (Android 11 QPR3 وAndroid 11 Car وAndroid 12)
    config_showHeadsUpNotificationOnBottom: قيمة منطقية لتحديد ما إذا كان يجب عرض الإشعارات المنبثقة في أسفل الشاشة بدلاً من أعلاها. يجب أن تكون قيمة هذا السمة مماثلة لقيمة المورد المنطقي config_showHeadsUpNotificationOnBottom في frameworks/base/packages/CarSystemUI/res/values/config.xml.
  • (‫Android 11 QPR3 وAndroid 11 Car وAndroid 12)
    notification_headsup_card_margin_horizontal: الهامش الأيمن والأيسر لنافذة الإشعارات المنبثقة. يجب أن تكون قيمة هذا الحقل هي نفسها قيمة مورد السمة notification_headsup_card_margin_horizontal في packages/apps/Car/Notification/res/values/dimens.xml.
  • (نظام التشغيل Android 12)
    excluded_application_overlay_window_titles: مصفوفة تتضمّن عناوين النوافذ التي يجب عدم اعتبارها نوافذ متراكبة. يجب أن يشمل ذلك عناوين نوافذ التطبيقات التي تمثّل TaskViews أو TaskDisplayAreas. تحتوي هذه القائمة تلقائيًا على "خرائط Google" فقط.

يمكنك عرض مورد RotaryService التالي فوق الخريطة:

  • (Android 11 QPR3 وAndroid 11 Car وAndroid 12)
    long_press_ms: قيمة عددية تمثّل عدد الملّي ثانية التي يجب الضغط فيها باستمرار على الزر "الوسط" لتفعيل الضغط مع الاستمرار. يشير الرقم صفر إلى أنّه يجب استخدام المهلة التلقائية للنظام عند الضغط مع الاستمرار. هذه هي القيمة الافتراضية.