הגבלת הסחות הדעת בהגדרות הרכב

אופטימיזציה להפחתת הסחות דעת (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>

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

דוגמה

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

דוגמאות

בהגדרות הרכב, להעדפות מסוימות יש התנהגות מותאמת אישית יותר, שאפשר להשתמש בה כדוגמאות להתאמה אישית נוספת. לדוגמה, ברשימת נקודות הגישה ל-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);
    }
}