تنظیم مجدد تنظیمات خودرو

در بیشتر موارد، تنظیم مجدد سلسله مراتب تنظیمات نسبتاً ساده است و معمولاً شامل انتقال اولویت و 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(...) استفاده می کند

مثال پیچیده‌تر زیر را در نظر بگیرید که تمام تنظیمات برگزیده در قطعه Data Warning & Limit را یک سطح به سمت بالا به قطعه Data Usage منتقل می‌کند، که 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 به روز کنید یا با استفاده از getActivity().getIntent() اطلاعات intent را مستقیماً در متد onAttach دریافت کنید. getActivity().getIntent() . در هر صورت، می‌توانید اطلاعات مورد نیاز برای این روش را همانطور که در بالا انجام دادید، وارد کنید.

  3. قبل از پاکسازی قطعات قدیمی و فایل‌های XML، وابستگی‌های دیگر یا اقدامات هدف مورد انتظار در قطعه قدیمی را شناسایی کنید. در این مورد، یک مقدار پیکربندی همپوشانی به اکتیویتی قدیمی اشاره می‌کند، که باید به‌روزرسانی شود تا به فعالیت صحیح اشاره کند.

یک صفحه ترجیحی به سلسله مراتب اضافه کنید

برای افزودن یک صفحه ترجیحی جدید به سلسله مراتب، به افزودن تنظیمات خودرو مراجعه کنید.

پس از ایجاد صفحه اولویت جدید، از مثال های بالا استفاده کنید تا سلسله مراتب اولویت ها را به دلخواه مرتب کنید.