بهینه سازی حواس پرتی در تنظیمات خودرو

بهینه سازی حواس پرتی (DO) به عنوان ابزاری برای کاهش تعامل راننده با برنامه تنظیمات در حین حرکت خودرو ارائه شده است. برخی از تنظیمات ممکن است نیاز به تغییر در حین رانندگی داشته باشند، بنابراین برنامه به طور کامل مسدود نشده است. با این حال، به‌طور پیش‌فرض، بیشتر تنظیمات برگزیده غیرفعال می‌شوند و تنها تنظیمات کلیدی و به‌روزرسانی آسان فعال هستند.

برنامه های فعال در حین رانندگی

شکل 1. برنامه های فعال در حین رانندگی

همانطور که در زیر نشان داده شده است، اگر بهینه سازی حواس پرتی انجام نشود، کل فعالیت ها نیز می توانند مسدود شوند. این روش در حال حاضر عمدتاً برای جستجوی تنظیمات استفاده می شود.

همه فعالیت ها مسدود شده است

شکل 2. تمام فعالیت ها مسدود شده است

سفارشی سازی های اساسی برای عملکرد DO را می توان از طریق پوشش های پیکربندی انجام داد. اگر به سفارشی سازی دقیق تری نیاز دارید، می توان تغییرات اضافی را از طریق کد ایجاد کرد.

سفارشی سازی سطح بالا

هنگامی که یک اولویت در حین رانندگی غیرفعال می شود، با ضربه زدن روی آن یک پیام نان تست نشان می دهد که در آن اولویت در هنگام رانندگی در دسترس نیست، مشروط بر اینکه تنظیمات ترجیحی یک کنترل کننده ترجیحی به آن متصل باشد. این پیام از رشته restricted_while_driving استفاده می‌کند که می‌تواند با یک پوشش سفارشی شود (به شرطی که رشته کمتر از محدودیت 60 نویسه باشد).

روکش سفارشی

شکل 3. روکش سفارشی

کل چارچوب DO را می توان با استفاده از config_always_ignore_ux_restrictions غیرفعال کرد. تنظیم این مورد روی true به این معنی است که راننده می تواند با هر جنبه ای از برنامه تنظیمات تعامل داشته باشد.

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

اگر پیکربندی بالا روی نادرست تنظیم شده باشد، برنامه تنظیمات به config_ignore_ux_restrictions برمی گردد تا مشخص کند کدام تنظیمات برگزیده باید در حین رانندگی فعال شوند. رشته های ارائه شده در اینجا باید به رشته های تعریف شده در preference_keys.xml.

مثال

برای نشان دادن نحوه فعال کردن تنظیمات عمیق تو در تو در حین رانندگی، این مثال نحوه فعال کردن تنظیمات خروجی Text-to-Speech (TTS) را نشان می دهد. برای اینکه این کار انجام شود، تمام تنظیمات در سلسله مراتب را به config_ignore_ux_restrictions اضافه کنید. این شامل سیستم، زبان ها و ورودی، و تنظیمات برگزیده TTS برای پیکربندی است، زیرا سلسله مراتب ما عبارت است از System->Languages ​​& Input->Text-to-Speech output. با این حال، تنظیمات برگزیده در قطعه متن به گفتار همچنان غیرفعال است. برای فعال کردن آنها، باید کلیدهایی را برای تنظیمات ترجیحی که می خواهیم در دسترس باشند اضافه کنیم. در این مثال، ما می خواهیم تنظیمات پخش را فعال کنیم، اما ترجیح موتور را نه، بنابراین 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>

سفارشی سازی دقیق

برخی از تنظیمات ترجیحی وجود دارند که ممکن است به رفتار سفارشی‌سازی‌شده‌تری نیاز داشته باشند تا صرفاً فعال/غیرفعال کردن یک اولویت بر اساس وضعیت رانندگی. برای مثال، بلوتوث و Wi-Fi قبلاً برای نمایش دستگاه‌های بلوتوث ذخیره شده یا نقاط دسترسی Wi-Fi در حین رانندگی اصلاح شده‌اند.

در حال حاضر هیچ راه حل مبتنی بر پیکربندی برای انجام این نوع تنظیمات وجود ندارد. درعوض، می‌توانید یک کلاس سفارشی ایجاد کنید که PreferenceController را گسترش داده و onApplyUxRestrictions() برای ایجاد تغییرات مورد نظر لغو کند.

هنگامی که یک کنترل کننده ترجیحی سفارشی ایجاد می شود، می توانید فایل XML مربوطه را پوشش دهید تا کنترل کننده ترجیحی پیش فرض را با پیاده سازی خود جایگزین کنید.

نمونه ها

در CarSettings، برخی از تنظیمات ترجیحی دارای این رفتار سفارشی تر هستند که می تواند به عنوان نمونه ای برای سفارشی سازی اضافی استفاده شود. به عنوان مثال، در لیست نقاط دسترسی Wi-Fi ، رفتار مورد نظر این است که فقط نقاط دسترسی ذخیره شده را در حین رانندگی نشان دهید (و بقیه را پنهان کنید). برای رسیدن به این هدف موارد زیر را انجام دهید:

} else if (shouldApplyUxRestrictions(getUxRestrictions())) {
    wifiEntries = getCarWifiManager().getSavedWifiEntries();
} else {
    wifiEntries = getCarWifiManager().getAllWifiEntries();
}

از آنجا که نقاط دسترسی که در اینجا ظاهر می‌شوند از قبل محدود شده‌اند، نمی‌خواهید UxRestrictions اضافی را برای این تنظیمات برگزیده اعمال کنید. بنابراین، روی onApplyUxRestrictions را نادیده بگیرید و یک No-op عمدی انجام دهید:

@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.
}

نمونه دیگری در دستگاه های متصل به بلوتوث ارائه شده است. برای ادامه فعال کردن اتصال و قطع ارتباط دستگاه‌های بلوتوث، اما می‌خواهد قابلیت دسترسی به تنظیمات اضافی را برای این دستگاه‌ها غیرفعال کند. برای رسیدن به این هدف، ما دوباره روی onApplyUxRestrictions لغو می کنیم، اما این بار، اگر محدودیت NO_SETUP فعال است، اقدام ثانویه را در اولویت پنهان کنید.

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