نظرة عامة

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

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

العمارة والمبادئ التوجيهية

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

التفضيلات الثابتة

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

التفضيلات الديناميكية

تستخدم التفضيلات الديناميكية علامة PreferenceGroup أو تطبيق PreferenceGroup.

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

أشرطة العمل

يحتوي الجزء العلوي من كل شاشة إعدادات على شريط إجراءات، والذي يمكن أن يحتوي على التنقل "الخلفي"، وعنوان الشاشة، وعناصر واجهة المستخدم الإضافية (على سبيل المثال، الأزرار والمفاتيح). تشبه أشرطة الإجراءات هذه شريط الإجراءات الذي يوفره 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);
    }
}

تأتي أشرطة الإجراءات مع دعم لتحسين التشتيت في إعدادات السيارة . قم بتعيين قيود UX في 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 . يجب أن يتم تراكبها داخل وحدة إعدادات السيارة بشكل منفصل عن فئات التفضيلات الأساسية.