إعادة ترتيب إعدادات السيارة

في معظم الأحيان، يكون إعادة ترتيب التسلسل الهرمي للإعدادات نسبيًا سهلًا ويتكون عادةً من نقل الإعدادات المفضّلة ذات الصلة وملف PreferenceController إلى ملف XML مختلف. إذا كان PreferenceController يستخدم use(...)، احرص على إزالة use(...) من SettingsFragment السابق وإضافته إلى SettingsFragment الجديد.

تقدّم هذه الصفحة أمثلة على إعادة ترتيب الإعدادات لمراجعة الحالات التي قد تحدث.

نقل إعداد مفضّل أساسي

يوضّح هذا المثال كيفية نقل إعداد مفضّل من شاشة إعدادات مفضّلة إلى أخرى، حيث يتضمّن الإعداد المفضّل وحدة تحكّم تلقائية للإعدادات المفضّلة فقط. في هذا المثال، يتم نقل الإعداد المفضّل للوحدات من شاشة الإعدادات المفضّلة للصفحة الرئيسية إلى شاشة الإعدادات المفضّلة للنظام. لإجراء ذلك، عليك نقل ملف XML التالي من homepage_fragment.xml إلى الموقع المناسب في system_settings_fragment.xml:

<Preference
        android:icon="@drawable/ic_settings_units"
        android:key="@string/pk_units_settings_entry"
        android:title="@string/units_settings"
        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
        <intent android:targetPackage="com.android.car.settings"
            android:targetClass="com.android.car.settings.common.CarSettingActivities$UnitsSettingsActivity"/>
    </Preference>

نقل إعداد مفضّل يستخدم use(...)

راجِع المثال التالي الأكثر تعقيدًا الذي ينقل كل الإعدادات المفضّلة في المقتطف "تحذير بشأن البيانات وحدّها" إلى مستوى أعلى في المقتطف "استخدام البيانات"، ما يؤدي إلى تعديل DataWarningAndLimitFragment.java لتضمين use لتمرير المعلومات إلى أدوات التحكّم في الإعدادات المفضّلة بعد إنشائها.

  1. انقل ملف XML ذي الصلة إلى الموقع المطلوب في data_usage_fragment.xml:
    <Preference
            android:key="@string/pk_data_usage_cycle"
            android:title="@string/app_usage_cycle"
            settings:controller="com.android.car.settings.datausage.CycleResetDayOfMonthPickerPreferenceController"/>
        <com.android.car.settings.common.LogicalPreferenceGroup
            android:key="@string/pk_data_warning_group"
            settings:controller="com.android.car.settings.datausage.DataWarningPreferenceController">
            <SwitchPreference
                android:key="@string/pk_data_set_warning"
                android:title="@string/set_data_warning"/>
            <Preference
                android:key="@string/pk_data_warning"
                android:title="@string/data_warning"/>
        </com.android.car.settings.common.LogicalPreferenceGroup>
        <com.android.car.settings.common.LogicalPreferenceGroup
            android:key="@string/pk_data_limit_group"
            settings:controller="com.android.car.settings.datausage.DataLimitPreferenceController">
            <SwitchPreference
                android:key="@string/pk_data_set_limit"
                android:title="@string/set_data_limit"/>
            <Preference
                android:key="@string/pk_data_limit"
                android:title="@string/data_limit"/>
        </com.android.car.settings.common.LogicalPreferenceGroup>
  2. في DataWarningAndLimitFragment.java، حدِّد كيفية استخدام use الطريقة.
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    
        mPolicyEditor = new NetworkPolicyEditor(NetworkPolicyManager.from(context));
        mNetworkTemplate = getArguments().getParcelable(
                NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE);
        if (mNetworkTemplate == null) {
            mTelephonyManager = context.getSystemService(TelephonyManager.class);
            mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
            mNetworkTemplate = DataUsageUtils.getMobileNetworkTemplate(mTelephonyManager,
                    DataUsageUtils.getDefaultSubscriptionId(mSubscriptionManager));
        }
    
        // Loads the current policies to the policy editor cache.
        mPolicyEditor.read();
    
        List<DataWarningAndLimitBasePreferenceController> preferenceControllers =
                Arrays.asList(
                       use(CycleResetDayOfMonthPickerPreferenceController.class,
                                R.string.pk_data_usage_cycle),
                       use(DataWarningPreferenceController.class, R.string.pk_data_warning_group),
                       use(DataLimitPreferenceController.class, R.string.pk_data_limit_group));
    
        for (DataWarningAndLimitBasePreferenceController preferenceController :
                preferenceControllers) {
            preferenceController.setNetworkPolicyEditor(mPolicyEditor);
            preferenceController.setNetworkTemplate(mNetworkTemplate);
        }
    }

    في هذه الحالة، تضبط طريقة use محرِّر سياسة الشبكة ونموذج الشبكة لعناصر التحكّم في الإعدادات المفضّلة. بما أنّ هذا المثال ينقل كل الإعدادات المفضّلة وكل الرمز البرمجي في طريقة onAttach ذي صلة بتحديد مَعلمات الإعدادات المفضّلة هذه، سيكون من المناسب نسخ محتوى الأسلوب بالكامل إلى المقتطف الجديد. ومع ذلك، يختلف ذلك حسب الإعداد المفضّل تحديدًا. عليك أيضًا نقل متغيّرات المثيل ذات الصلة.

    ومع ذلك، هناك مشكلة. المقتطف الأصلي الذي يُتوقّع NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE أن يتم تمريره كوسيطة، والتي من المفترض أن تأتي من النيّة إلى النشاط (عند توفّرها).

    للحصول على هذه المعلومات المطلوبة، يمكنك إنشاء طريقة newInstance ومرّر النموذج عند توفّره (وإلا مرّر القيمة null) ثم عدِّل النشاط لـ DataUsageFragment أو احصل على معلومات القصد مباشرةً في طريقة onAttach باستخدام getActivity().getIntent(). في كلتا الحالتَين، يمكنك ضبط المعلومات المطلوبة لهذه الطريقة كما فعلت أعلاه.

  3. حدِّد أيّ تبعيات أخرى أو إجراءات متوقعة للنوايا في المقتطف القديم قبل تنظيف المقتطفات القديمة وملفات XML. في هذه الحالة، تشير قيمة ملف الضبط للتراكب إلى النشاط القديم، والذي يجب تعديله للإشارة إلى النشاط الصحيح.

إضافة شاشة إعدادات مفضّلة إلى التسلسل الهرمي

لإضافة شاشة إعدادات مفضّلة جديدة إلى التسلسل الهرمي، يُرجى الاطّلاع على إضافة إعدادات السيارة.

بعد إنشاء شاشة الإعدادات المفضّلة الجديدة، استخدِم الأمثلة أعلاه لإعادة ترتيب التسلسل الهرمي للإعدادات المفضّلة على النحو المطلوب.