تحسين التشتيت في إعدادات السيارة

يتم توفير تحسين التشتيت (DO) كأداة لتقليل تفاعل السائق مع تطبيق الإعدادات أثناء تحرك السيارة. قد يلزم تغيير بعض الإعدادات أثناء القيادة، حتى لا يتم حظر التطبيق بالكامل. ومع ذلك، بشكل افتراضي، يتم تعطيل معظم التفضيلات مع تمكين التفضيلات الرئيسية والسهلة التحديث فقط.

تمكين التطبيقات أثناء القيادة

الشكل 1. التطبيقات الممكّنة أثناء القيادة

يمكن أيضًا حظر الأنشطة بأكملها إذا لم يتم تحسينها لتشتيت الانتباه، كما هو موضح أدناه. تُستخدم هذه الطريقة حاليًا بشكل أساسي للبحث عن الإعدادات.

تم حظر جميع الأنشطة

الشكل 2. تم حظر كافة الأنشطة

يمكن إجراء التخصيصات الأساسية لأداء DO من خلال تراكبات التكوين. إذا كنت بحاجة إلى مزيد من التخصيص الدقيق، فيمكن إجراء تغييرات إضافية من خلال التعليمات البرمجية.

تخصيص عالي المستوى

عندما يتم تعطيل التفضيل أثناء القيادة، يؤدي النقر عليه إلى عرض رسالة نخب تفيد بأن التفضيل غير متاح أثناء القيادة، بشرط أن يكون التفضيل مزودًا بوحدة تحكم في التفضيلات مرفقة به. تستخدم الرسالة السلسلة restricted_while_driving ، والتي يمكن تخصيصها باستخدام تراكب (شريطة أن تكون السلسلة أقل من الحد الأقصى المكون من 60 حرفًا).

تراكب مخصص

الشكل 3. تراكب مخصص

يمكن تعطيل إطار عمل DO بأكمله باستخدام config_always_ignore_ux_restrictions . تعيين هذا على "صحيح" يعني أنه يمكن للسائق التفاعل مع كل جانب من جوانب تطبيق الإعدادات.

<bool name="config_always_ignore_ux_restrictions">true</bool>

إذا تم تعيين التكوين أعلاه على false، فسيعود تطبيق الإعدادات إلى config_ignore_ux_restrictions لتحديد التفضيلات التي يجب تمكينها أثناء القيادة. يجب أن تشير السلاسل المتوفرة هنا إلى السلاسل المحددة في preference_keys.xml.

مثال

لإظهار كيفية تمكين إعداد متداخل للغاية أثناء القيادة، يوضح هذا المثال كيفية تمكين إعدادات إخراج تحويل النص إلى كلام (TTS). لكي ينجح هذا، قم بإضافة جميع الإعدادات في التسلسل الهرمي إلى config_ignore_ux_restrictions . يتضمن ذلك النظام واللغات والإدخال وتفضيلات تحويل النص إلى كلام (TTS) للتكوين، نظرًا لأن التسلسل الهرمي لدينا هو النظام->اللغات والإدخال->إخراج تحويل النص إلى كلام. ومع ذلك، لا تزال التفضيلات الموجودة في جزء تحويل النص إلى كلام معطلة. لتمكينها، نحتاج إلى إضافة مفاتيح التفضيلات التي نريد الوصول إليها. في هذا المثال، نريد تمكين تفضيلات التشغيل ولكن ليس تفضيلات المحرك، لذلك نضيف pk_tts_playback_group إلى ملف التهيئة الخاص بنا.

<string-array name="config_ignore_ux_restrictions">
    [...]
    <item>@string/pk_system_settings_entry</item>
    <item>@string/pk_languages_and_input_settings</item>
    <item>@string/pk_tts_settings_entry</item>
    <item>@string/pk_tts_playback_group</item>
</string-array>

التخصيص التفصيلي

هناك بعض التفضيلات التي قد تتطلب سلوكًا مخصصًا أكثر من مجرد تمكين/تعطيل التفضيل بناءً على حالة القيادة. على سبيل المثال، تم بالفعل تعديل تقنية Bluetooth وWi-Fi لإظهار أجهزة Bluetooth المحفوظة أو نقاط وصول Wi-Fi أثناء القيادة.

لا يوجد حاليًا حل قائم على التكوين لإجراء هذه الأنواع من التعديلات. بدلاً من ذلك، يمكنك إنشاء فئة مخصصة تعمل على توسيع PreferenceController وتجاوز onApplyUxRestrictions() لإجراء التغييرات المطلوبة.

عند إنشاء وحدة تحكم التفضيلات المخصصة، يمكنك تراكب ملف XML ذي الصلة لاستبدال وحدة تحكم التفضيلات الافتراضية بالتنفيذ الخاص بك.

أمثلة

في CarSettings، تتمتع بعض التفضيلات بهذا السلوك الأكثر تخصيصًا، والذي يمكن استخدامه كأمثلة للتخصيص الإضافي. على سبيل المثال، في قائمة نقاط وصول Wi-Fi ، يكون السلوك المطلوب هو إظهار نقاط الوصول المحفوظة فقط أثناء القيادة (وإخفاء الباقي). لتحقيق ذلك، قم بما يلي:

mAccessPoints = CarUxRestrictionsHelper.isNoSetup(getUxRestrictions())
               ? getCarWifiManager().getSavedAccessPoints()
               : getCarWifiManager().getAllAccessPoints();

نظرًا لأن نقاط الوصول التي تظهر هنا مقيدة بالفعل، فإنك لا تريد تطبيق UxRestrictions إضافية على هذه التفضيلات. لذلك، قم بتجاوز onApplyUxRestrictions وقم بتنفيذ حظر متعمد:

@Override
protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
    // Since the list dynamically changes based on the UX restrictions, we
    // enable this fragment regardless of the restriction. Intentional no-op.
}

يتم تقديم مثال آخر في الأجهزة المرتبطة بالبلوتوث . لمواصلة تمكين أجهزة Bluetooth من الاتصال وفصلها ولكن أردت تعطيل القدرة على الوصول إلى الإعدادات الإضافية لهذه الأجهزة. لتحقيق ذلك، قمنا مرة أخرى بتجاوز onApplyUxRestrictions ولكن هذه المرة، إذا كان تقييد NO_SETUP نشطًا، فقم بإخفاء الإجراء الثانوي على التفضيل.

@Override
protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
    super.onApplyUxRestrictions(uxRestrictions);
    if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) {
        updateActionVisibility(getPreference(), /* isActionVisible= */ false);
    }
}