Reorganiza la configuración del vehículo

En general, reorganizar la jerarquía de Configuración es relativamente simple y, por lo general, consiste en mover la preferencia y el PreferenceController relevantes a un archivo XML diferente. Si el PreferenceController usa use(...), asegúrate de quitarlo de la SettingsFragment anterior y agregarlo a la SettingsFragment nueva.

En esta página, se proporcionan ejemplos para reordenar la configuración y revisar las situaciones que pueden ocurrir.

Cómo mover una preferencia básica

En este ejemplo, se explica cómo mover una preferencia de una pantalla a otra, en la que la preferencia solo tiene un controlador de preferencias predeterminado. En este ejemplo, se mueve la preferencia Unidades de la pantalla de preferencias de la página principal a la pantalla de preferencias del sistema. Para ello, mueve el siguiente XML de homepage_fragment.xml a la ubicación adecuada en 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>

Cómo mover una preferencia que usa use(...)

Considera el siguiente ejemplo más complejo que mueve todas las preferencias del fragmento de advertencia y límite de datos un nivel hacia arriba en el fragmento de uso de datos, que actualiza DataWarningAndLimitFragment.java para incluir el método use para pasar información a los controladores de preferencias después de la construcción.

  1. Mueve el archivo en formato XML relevante a la ubicación deseada en 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. En DataWarningAndLimitFragment.java, determina cómo se usa el método 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);
        }
    }

    En este caso, el método use establece el editor de políticas de red y la plantilla de red para los controladores de preferencias. Debido a que este ejemplo mueve todas las preferencias y todo el código del método onAttach es relevante para configurar estos parámetros de preferencia, sería apropiado copiar todo el contenido del método en el fragmento nuevo. Sin embargo, esto varía según la preferencia específica. También debes mover las variables de instancia relevantes.

    Sin embargo, hay una complicación. El fragmento original esperaba que se pasara NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE como argumento, que debería provenir del intent a la actividad (cuando se proporciona).

    Para obtener esta información necesaria, crea un método newInstance y pasa la plantilla cuando esté presente (de lo contrario, pasa un valor nulo) y, luego, actualiza la actividad para DataUsageFragment o obtén la información del intent directamente en el método onAttach con getActivity().getIntent(). En cualquier caso, puedes pasar la información necesaria para este método como lo hiciste antes.

  3. Identifica cualquier otra dependencia o acción de intent esperada en el fragmento anterior antes de limpiar los fragmentos y los archivos en formato XML anteriores. En este caso, un valor de configuración de superposición apunta a la actividad anterior, que se debe actualizar para apuntar a la actividad correcta.

Agrega una pantalla de preferencias a la jerarquía

Para agregar una nueva pantalla de preferencias a la jerarquía, consulta Cómo agregar la configuración del automóvil.

Después de crear la nueva pantalla de preferencias, usa los ejemplos anteriores para reorganizar la jerarquía de preferencias como desees.