Réorganiser les paramètres du véhicule

Dans l'ensemble, la réorganisation de la hiérarchie des paramètres simple et consiste généralement à déplacer les préférences et PreferenceController dans un autre fichier XML. Si le PreferenceController utilise use(...), veillez à supprimer à partir du SettingsFragment précédent, puis de l'ajouter au nouveau SettingsFragment

Cette page fournit des exemples de réorganisation des paramètres afin d'examiner les situations dans lesquelles peut survenir.

Déplacer une préférence de base

Cet exemple explique comment déplacer une préférence d'un écran de préférences à un autre, dans laquelle la préférence ne dispose que d'un contrôleur de préférences par défaut. Dans cet exemple, vous Déplacez la préférence "Unités" de l'écran de préférences "Page d'accueil" vers les préférences "Système". l'écran. Pour ce faire, déplacez le code XML suivant de homepage_fragment.xml vers l'emplacement approprié dans 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>

Déplacez une préférence utilisant use(...)

Prenons l'exemple plus complexe suivant, qui déplace toutes les préférences dans le formulaire d'avertissement Limitez le fragment à un niveau supérieur dans le fragment "Utilisation des données", qui Met à jour DataWarningAndLimitFragment.java pour inclure la méthode use pour transmettre des informations aux contrôleurs de préférences après la construction.

  1. Déplacez le fichier XML approprié vers l'emplacement souhaité dans 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. Dans DataWarningAndLimitFragment.java, déterminez comment use est utilisée.
    @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);
        }
    }

    Dans ce cas, la méthode use définit l'éditeur de règle de réseau. et un modèle de réseau pour les contrôleurs de préférences. Comme cet exemple déplace les préférences et tout le code de la méthode onAttach sont pertinents pour définir ces paramètres de préférence, il serait judicieux de copier l'intégralité du code le contenu de la méthode dans le nouveau fragment. Toutefois, cela varie en fonction une préférence spécifique. Vous devez également déplacer les variables d'instance pertinentes.

    Mais il y a une complication. Fragment d'origine attendu NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE pour être transmis en tant qu'argument, qui doit provenir de l'intent envoyé à l'activité (si fournies).

    Pour obtenir les informations nécessaires, créez un newInstance et transmettre le modèle s'il est présent (sinon, transmettre la valeur "null"), puis mettre à jour l'activité pour DataUsageFragment ou obtenir l'intent directement dans la méthode onAttach en utilisant getActivity().getIntent() Dans les deux cas, vous pouvez transmettre les informations nécessaires pour cette méthode, comme vous l'avez fait ci-dessus.

  3. Identifiez toutes les autres dépendances ou actions d'intent attendues dans l'ancien fragment avant nettoyer les anciens fragments et fichiers XML. Dans ce cas, une superposition "config value" pointe vers l'ancienne activité, qui doit être mise à jour pour pointer vers la bonne activité.

Ajouter un écran de préférences à la hiérarchie

Pour ajouter un écran de préférences à la hiérarchie, consultez la section Ajouter des paramètres pour le véhicule.

Après avoir créé l'écran de préférences, utilisez les exemples ci-dessus pour réorganiser les de la hiérarchie des préférences.