نظرة عامة

يتم توفير إعدادات السيارة (packages/apps/Car/Settings) خصيصًا نظام التشغيل Android Automotive (AAOS). تختلف "إعدادات السيارة" عن "إعدادات الهاتف" (packages/apps/Settings). بينما تتضمّن "إعدادات السيارة" بعض إعدادات الهاتف المألوفة، توفّر "إعدادات السيارة" واجهة مستخدم مرئية مخصّصة للسيارة وتحسينات على مصادر تشتيت السائق والعديد من نقاط دخول التخصيص للمصنّعين الأصليين للأجهزة.

بالإضافة إلى النظرة العامة على "إعدادات السيارة" الواردة أدناه، يمكنك الاطّلاع على هذه الميزات الموضوعات لمعرفة المزيد من المعلومات حول إعدادات السيارة:

البنية والإرشادات

يتم تنفيذ معظم الصفحات في "إعدادات السيارة" كسلسلة من الأجزاء. التي توسّع SettingsFragment، ولكلٍّ منها نشاطه الخاص CarSettingsServices: يتم توسيع هذه الأنشطة الثابتة من BaseCarSettingsActivity. في حين أن هناك بعض الاستثناءات لهذه القاعدة، مثل بعض الأجزاء الخاصة التي تمتد BaseFragment بدلاً من SettingsFragment وبعض الأنشطة التي تخضع لها خارج CarsettingActivities، يجب اعتبارها جميعها استثناءات (وليس كأنماط يجب اتّباعها).

الإعدادات المفضّلة الثابتة

يتم تحديد إعداد مفضّل ثابت في XML باستخدام الخيار التفضيلات. أو CarUiPreference . تستخدم عملية تنفيذ SettingsFragment السمة getPreferenceScreenResId() لتحديد ملف XML الذي يحتوي على قائمة ثابتة للخيارات المفضّلة للعرض.

الإعدادات المفضّلة الديناميكية

تستخدم الإعدادات المفضّلة الديناميكية PreferenceGroup أو تنفيذ العلامة PreferenceGroup.

تمثل التفضيلات الديناميكية في تطبيق CarSettings مجموعة عادية من والتفضيلات التي توجّه المستخدم إلى صفحات إضافية في CarSettings، لكن التي تمت إضافتها من خلال الإعدادات المفضّلة وحدة التحكّم بدلاً من XML. ومن الأمثلة على ذلك إدارة لوحات المفاتيح ضمن "اللغات و" تفضيل الإدخال الذي يضيف إدخالاً ديناميكيًا إلى صفحة التفضيلات بناءً على ما إذا كانت طرق الإدخال هذه المسموح بها أم لا.

أشرطة الإجراءات

يحتوي الجزء العلوي من كل شاشة إعدادات على شريط إجراءات يمكن أن يحتوي على "رجوع" والتنقل وعنوان الشاشة وأدوات الإجراءات التكميلية (على سبيل المثال، الأزرار والمفاتيح). تشبه أشرطة الإجراءات هذه شريط ActionBar التي يقدمها Android، ولكنها في الواقع طرق عرض مخصصة. في نظام Android 11 والإصدارات الأحدث، تم تضمين شريط الأدوات في تخطيط قاعدة الهيكل، والذي يحتوي على طرق عرض شريط الأدوات وتخطيط الإطار لبقية محتوى التطبيق.

أدوات الإجراءات التكميلية هي فئات MenuItem ويجب إنشاؤها في 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);
    }
}

تأتي أشرطة الإجراءات مع دعم تحسين الإلهاء في إعدادات السيارة: ضبط UXRestrictions في MenuItem.Builder عند الإنشاء.

عناصر التحكّم في الإعدادات المفضّلة

يمكن أن تحتوي كل صفحة إعدادات على عدد من الإعدادات المفضّلة:

اطّلِع على الصورة التالية لمعرفة مدى ارتباط هذه المكوّنات:

مكوِّنات إعدادات السيارة

الشكل 1. مكوّنات إعدادات السيارة

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، لا يمكن لتوفير وسيطات إنشائية إضافية. بدلاً من ذلك، تكون هذه القيم الإضافية التي يتم تقديمها من خلال المستوطنين العموميين على 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()).

التعامل مع الأهداف

كل الأهداف التي يجب معالجتها من خلال تطبيق "إعدادات السيارة" في البيان الملف. يتم تحديد الأهداف والتعامل معها بشكل عام مثل معظم تطبيقات Android العادية، مع جميع الأنشطة وفلاتر الأهداف المحدّدة في البيان.

تغيير الجزء الجذر

يمكن عرض رمز الخروج أو إخفاؤه باستخدام config_show_settings_root_exit_icon إذا رغبت في ذلك.

تخصيص المظهر

تخصيص السمات والموارد الأخرى

يستخدم تطبيق "إعدادات السيارة" CarSettingTheme بشكل أساسي وهو امتداد للدالة Theme.CarUi. يُستخدم هذا الموضوع لتوحيد مظهر ومظهر تطبيقات النظام لضمان الاتساق في النظام.

تخصيص الإعدادات المفضّلة

يشمل تخصيص التفضيلات هذه المواقع الإضافية:

  • يتم تحديد تنسيق بعض فئات الإعدادات المفضّلة الأساسية في car_preference ومتراكبة لتصميمات السيارات. يمكن تسمية أي تخطيطات تخصيص لفئات التفضيلات الأساسية التي تم استبدالها هنا.
  • تستخدم إعدادات السيارة بعض الإعدادات المفضّلة المخصصة المحددة بشكل أساسي في common طرد. يجب وضعها داخل وحدة "إعدادات السيارة" بشكل منفصل عن بفئات التفضيل الأساسية.