Réorganiser les paramètres du véhicule

Dans la plupart des cas, réorganiser la hiérarchie des paramètres est relativement simple et consiste généralement à déplacer la préférence et la PreferenceController appropriées vers un autre fichier XML. Si PreferenceController utilise use(...), veillez à le supprimer de l'SettingsFragment précédent et à l'ajouter au nouveau SettingsFragment.

Cette page fournit des exemples de réorganisation des paramètres pour examiner les situations pouvant se produire.

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 lequel 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 des préférences de la page d'accueil vers l'écran des préférences système. Pour ce faire, déplacez le code XML suivant de homepage_fragment.xml à 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éplacer une préférence qui utilise use(...)

Prenons l'exemple plus complexe suivant, qui déplace toutes les préférences du fragment "Avertissement et limite de données" d'un niveau dans le fragment "Consommation de données", qui met à jour DataWarningAndLimitFragment.java pour inclure la méthode use afin de transmettre des informations aux contrôleurs de préférences après la création.

  1. Déplacez le fichier XML concerné à 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 la méthode 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ègles réseau et le modèle de réseau pour les contrôleurs de préférences. Étant donné que cet exemple déplace toutes les préférences et que tout le code de la méthode onAttach est pertinent pour définir ces paramètres de préférence, il est approprié de copier l'intégralité du contenu de la méthode dans le nouveau fragment. Toutefois, cela varie en fonction de la préférence spécifique. Vous devez également déplacer les variables d'instance pertinentes.

    Toutefois, il existe une complication. Le fragment d'origine s'attendait à ce que NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE soit transmis en tant qu'argument, qui doit provenir de l'intent vers l'activité (lorsqu'il est fourni).

    Pour obtenir ces informations, créez une méthode newInstance et transmettez le modèle lorsqu'il est présent (sinon transmettez la valeur nulle), puis mettez à jour l'activité pour DataUsageFragment ou obtenez les informations d'intent directement dans la méthode onAttach à l'aide de getActivity().getIntent(). Dans les deux cas, vous pouvez transmettre les informations nécessaires à 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 de nettoyer les anciens fragments et fichiers XML. Dans ce cas, une valeur de configuration de superposition pointe vers l'ancienne activité, qui doit être mise à jour pour pointer vers l'activité appropriée.

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

Pour ajouter un écran de préférences à la hiérarchie, consultez Ajouter des paramètres de voiture.

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