Réorganiser les paramètres de la voiture

Pour l'essentiel, la réorganisation de la hiérarchie des paramètres est relativement simple et consiste généralement à déplacer la préférence appropriée et PreferenceController vers un autre fichier XML. Si le PreferenceController utilise use(...) , assurez-vous de le supprimer du SettingsFragment précédent et de l'ajouter au nouveau SettingsFragment .

Cette page fournit des exemples de réorganisation des paramètres afin d'examiner les situations qui peuvent 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 lequel la préférence n'a qu'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 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éplacer une préférence qui utilise use(...)

Prenons l'exemple plus complexe suivant qui déplace toutes les préférences du fragment Data Warning & Limit vers le haut d'un niveau dans le fragment Data Usage, qui met à jour DataWarningAndLimitFragment.java pour inclure la méthode use pour transmettre les informations aux contrôleurs de préférences après la construction.

  1. Déplacez le XML pertinent 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 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 stratégie réseau et le modèle 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 serait approprié de copier l'intégralité du contenu de la méthode dans le nouveau fragment. Cependant, cela varie en fonction des préférences spécifiques. Vous devez également déplacer les variables d'instance pertinentes.

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

    Pour obtenir ces informations nécessaires, créez une méthode newInstance et transmettez le modèle lorsqu'il est présent (sinon, transmettez-le en null), puis mettez à jour l'activité pour DataUsageFragment ou obtenez les informations d'intention 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 toute autre dépendance ou action d'intention attendue 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é correcte.

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

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

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