कार सेटिंग्स को पुनर्व्यवस्थित करें

अधिकांश भाग के लिए, सेटिंग्स पदानुक्रम को पुनर्व्यवस्थित करना अपेक्षाकृत सरल है और आम तौर पर इसमें प्रासंगिक प्राथमिकता और 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 अद्यतन करता है।

  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() उपयोग करके सीधे onAttach विधि में इरादे की जानकारी प्राप्त करें) getActivity().getIntent() . किसी भी स्थिति में, आप इस विधि के लिए आवश्यक जानकारी दे सकते हैं जैसा कि आपने ऊपर किया था।

  3. पुराने फ़्रैगमेंट और XML फ़ाइलों को साफ़ करने से पहले पुराने फ़्रैगमेंट में किसी भी अन्य निर्भरता या अपेक्षित इरादे की कार्रवाइयों की पहचान करें। इस मामले में, एक ओवरले कॉन्फ़िगरेशन मान पुरानी गतिविधि को इंगित करता है, जिसे सही गतिविधि को इंगित करने के लिए अद्यतन किया जाना चाहिए।

पदानुक्रम में एक प्राथमिकता स्क्रीन जोड़ें

पदानुक्रम में एक नई प्राथमिकता स्क्रीन जोड़ने के लिए, कार सेटिंग्स जोड़ें देखें।

नई प्राथमिकता स्क्रीन बनाने के बाद, वरीयता पदानुक्रम को इच्छानुसार पुनर्व्यवस्थित करने के लिए ऊपर दिए गए उदाहरणों का उपयोग करें।