אופטימיזציה של הסחת דעת בהגדרות רכב

אופטימיזציה של הסחת דעת (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 . כדי להמשיך ולאפשר למכשירי Bluetooth להיות מחוברים והתנתקו מהם, אך רציתי לבטל את היכולת לגשת להגדרות נוספות עבור מכשירים אלה. כדי להשיג זאת, אנו שוב עוקפים onApplyUxRestrictions אך הפעם, אם ההגבלה NO_SETUP פעילה, הסתר את הפעולה המשנית על ההעדפה.

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