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

بالنسبة للجزء الأكبر، تعد إعادة ترتيب التسلسل الهرمي للإعدادات أمرًا بسيطًا نسبيًا وتتكون عادةً من نقل التفضيل ذي الصلة ووحدة PreferenceController إلى ملف XML مختلف. إذا كان PreferenceController يستخدم 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 وتمرير القالب عندما يكون موجودًا (وإلا قم بتمريره بقيمة فارغة) ثم قم بتحديث النشاط لـ DataUsageFragment أو احصل على معلومات الهدف مباشرة في طريقة onAttach باستخدام getActivity().getIntent() . في كلتا الحالتين، يمكنك تمرير المعلومات المطلوبة لهذه الطريقة كما فعلت أعلاه.

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

أضف شاشة التفضيلات إلى التسلسل الهرمي

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

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