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

אופטימיזציה של בעיות בטיחות (DO) מסופק ככלי לצמצום האינטראקציה של הנהג עם אפליקציית ההגדרות בזמן שהמכונית זזה. ייתכן שיהיה צורך לשנות הגדרות מסוימות בזמן הנהיגה, ולכן האפליקציה לא משתנה חסום לחלוטין. עם זאת, כברירת מחדל, רוב ההעדפות מושבתות באמצעות מקש העדפות שמתעדכנות בקלות.

הפעלת אפליקציות בזמן נהיגה

איור 1. הפעלת האפליקציות בזמן הנהיגה

ניתן גם לחסום פעילויות שלמות אם לא עברו אופטימיזציה של הסחות דעת, כפי שמוצג בהמשך. השיטה הזו משמשת כרגע בעיקר לחיפוש הגדרות.

כל הפעילויות חסומות

איור 2. כל הפעילויות חסומות

אפשר לבצע התאמות אישיות בסיסיות של ביצועי המשימות לביצוע באמצעות ההגדרה שכבות-על. אם דרושה לך התאמה אישית פרטנית יותר, ייתכן ששינויים נוספים באמצעות קוד.

התאמה אישית ברמה גבוהה

אם העדפה מסוימת מושבתת בזמן הנהיגה, הקשה עליה תציג הודעה כזאת. הודעה שמציינת שההעדפה לא זמינה בזמן הנהיגה, בכפוף להעדפה שמחובר אליו בקר העדפות. ההודעה משתמשת בייחוס מחרוזת restricted_while_driving, שניתן להתאים אישית עם שכבת-על (בתנאי שהמחרוזת קטנה מהמגבלה של 60 תווים).

שכבת-על מותאמת אישית

איור 3. שכבת-על מותאמת אישית

ניתן להשבית את כל מסגרת ה-DO באמצעות config_always_ignore_ux_restrictions. אם המדיניות הזו מוגדרת כ-True, הנהג יכול לבצע פעולות בכל היבט אפליקציית ההגדרות.

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

אם ההגדרה שלמעלה מוגדרת כ-False, אפליקציית ההגדרות תחזור אל config_ignore_ux_restrictions כדי לקבוע אילו העדפות להפעיל במהלך הנהיגה. המחרוזות שמוצגות כאן צריכה להפנות למחרוזות שמוגדרות ב-preference_keys.xml.

דוגמה

כדי להראות איך להפעיל הגדרה של הצבת גבולות עמוקים בזמן נהיגה, מדגים איך להפעיל את הגדרות הפלט של המרת טקסט לדיבור (TTS). כדי שזה יעבוד, הוספת כל ההגדרות בהיררכיה ל-config_ignore_ux_restrictions. זה כולל את המערכת, השפות, הקלט והעדפות ה-TTS בהגדרה, מכיוון שההיררכיה שלנו מערכת->שפות ו קלט->פלט של המרת טקסט לדיבור (TTS). אבל ההעדפות בתוך המקטע של המרת טקסט לדיבור (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, ההתנהגות הרצויה היא להציג רק נקודות גישה שמורות בזמן נהיגה (ולהסתיר את כל השאר). כדי לעשות זאת:

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

אפשר לראות דוגמה נוספת בקטע מכשירים עם חיבור Bluetooth. כדי להמשיך לאפשר חיבור למכשירי Bluetooth או ניתוק מהם, אבל אני רוצה להשבית את הגישה להגדרות נוספות במכשירים האלה. כדי לעשות את זה, שוב לעקוף את onApplyUxRestrictions, אבל הפעם, אם NO_SETUP ההגבלה פעילה. הסתרת הפעולה המשנית בהעדפה.

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