סקירה כללית

הגדרות הרכב (packages/apps/Car/Settings) מסופקות במיוחד עבור Android Automotive OS (AAOS). הגדרות הרכב שונות מהגדרות הטלפון (packages/apps/Settings). בהגדרות הרכב יש כמה הגדרות מוכרות לטלפון, ההגדרות של הרכב מספקות ממשק משתמש חזותי מותאם לרכב, אופטימיזציה של הסחות הדעת של הנהג, ומספר נקודות כניסה רבות ליצרני ציוד מקורי (OEM).

בנוסף לסקירה הכללית של הגדרות הרכב המופיעות בהמשך, ניתן לעיין במאמרים הבאים נושאים למידע נוסף על 'הגדרות רכב':

ארכיטקטורה והנחיות

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

העדפות סטטיות

העדפה סטטית מוגדרת ב-XML באמצעות העדפה או CarUiPreference התיוג. הטמעה של SettingsFragment משתמשת באופרטור getPreferenceScreenResId() כדי להגדיר איזה קובץ XML מכיל את הרשימה הסטטית של ההעדפות להצגה.

העדפות דינמיות

העדפות דינמיות משתמשות ב-PreferenceGroup תג או יישום של PreferenceGroup.

באפליקציה CarSettings, ההעדפות הדינמיות מייצגות קבוצה רגילה של העדפות שמפנות את המשתמש לדפים נוספים בהגדרות CarSettings, אבל שנוספו דרך Preference שלט רחוק, במקום ב-XML. לדוגמה, האפשרות 'ניהול מקלדות' העדפה בקטע 'שפות' העדפת קלט שמוסיפה קלט באופן דינמי לדף ההעדפות, על סמך אם שיטות הקלט האלה מותר או לא מותר.

סרגלי פעולה

בחלק העליון של כל מסך הגדרות יש סרגל פעולות, שיכול להכיל סמל "back" ניווט, כותרת מסך וווידג'טים משלימים של פעולות (לדוגמה, לחצנים ומתגים). סרגלי הפעולות האלה דומים לסרגל הפעולות שסופקו על ידי Android, אלא למעשה תצוגות מותאמות אישית. ב-Android מגרסה 11 ואילך, בסרגל הכלים כלול בפריסה הבסיסית של השלדה, שמכילה את התצוגות של סרגל כלים ופריסת מסגרות לשאר תוכן האפליקציה.

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

// ExampleSettingsFragment.java
public class ExampleSettingsFragment extends SettingsFragment {

    @Override
    protected List<MenuItem> getToolbarMenuItems() {
        return Collections.singletonList(mClearConfirmButton);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mButton = new MenuItem.Builder(getContext())
                .setTitle(R.string.text)
                .setOnClickListener(mOnClickListener)
                .setUxRestrictions(CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP)
                .build();
    }

    private void updateState() {
        button.setVisible(false);
    }
}

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

בקרי בקרה של העדפות

כל דף הגדרות יכול לכלול העדפות.

בתמונה הבאה אפשר לראות את הקשר בין הרכיבים:

רכיבי CarSettings

איור 1. רכיבי CarSettings

ה-PreferenceController הוא רכיב שמודע למחזור החיים שעוזר כוללים את הלוגיקה העסקית לגבי העדפות ספציפיות. אפשר לצרף את PreferenceControllers להעדפה הרלוונטית רק דרך XML.

// example_settings_fragment.xml
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:settings="http://schemas.android.com/apk/res-auto"
    android:title="@string/example_settings_title">
  <Preference
    android:key="@string/pk_example_preference_key"
    android:title="@string/example_preference_title"
    settings:controller="com.android.car.settings.example.ExamplePreferenceController"/>
</PreferenceScreen>

ההגדרות של הרכב מונעות באופן מפורש את היצירה של PreferenceController באמצעות קוד כדי להקל על שינוי היררכיית ההגדרות תוך שימוש מינימלי בקוד Java.

יכול להיות שנדרשים נתונים דינמיים ל-PreferenceController כדי לפעול באופן תקין. לדוגמה, PreferenceController שנכבה שהתראות לאפליקציה צריכות לדעת באיזו אפליקציה לפעול. מכיוון ש-PreferenceControllers תמיד מוגדר ב-XML, אין לספק ארגומנטים נוספים של constructor. במקום זאת, הערכים הנוספים האלה סופקו באמצעות מגדירים ציבוריים ב-PreferenceController ומוגדרים באמצעות use(...) מהשיטה SettingsFragment.

// ExamplePreferenceController.java
public class ExamplePreferenceContorller extends PreferenceController<Preference> {

  private ExampleArg mExampleArg;

  public ExamplePreferenceController(...) {
    ...
  }

  public void setExampleArg(ExampleArg exampleArg) {
    mExampleArg = exampleArg;
  }
}

// ExampleSettingsFragment.java
public class ExampleSettingsFragment extends SettingsFragment {

  @Override
  @XmlRes
  protected int getPreferenceScreenResId() {
    Return R.xml.example_settings_fragment;
  }

  @Override
  public void onAttach(Context context) {
    ExampleArg arg = (ExampleArg) getArguments().getSerializeable(ARG_KEY);
    ExamplePreferenceController controller =
        use(ExamplePreferenceController.class, R.string.pk_example_preference_key);
    controller.setExampleArg(arg);
  }
}

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

  • צמצום השימוש ב-use(...).
  • כדאי לשמור כל קריאה אל use(...) בקטע אחד בקטע (לדוגמה, בשיטה onAttach()).

טיפול בכוונות

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

שינוי מקטע השורש

ניתן להציג או להסתיר את הסמל 'יציאה' באמצעות config_show_settings_root_exit_icon.

התאמה אישית של העיצוב

התאמה אישית של מאפיינים ומשאבים אחרים

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

התאמה אישית של ההעדפות

התאמה אישית של ההעדפות כוללת את המיקומים הנוספים הבאים:

  • הפריסה של חלק מסיווגי ההעדפה הבסיסית מוגדרת ב-car_preference ובשכבת-על לפיתוח מכוניות. כל פריסות להתאמה אישית של סיווגי ההעדפה הבסיסית יכולות להיות הוחלף כאן.
  • בהגדרות הרכב נעשה שימוש בהעדפות מותאמות אישית מסוימות שמוגדרות בעיקר common חבילה. יש להוסיף את הפרטים האלה כשכבת-על במודול 'הגדרות הרכב' בנפרד את סיווגי ההעדפה הבסיסית.