Reorganizar la configuración del vehículo

En su mayor parte, reorganizar la jerarquía de Configuración es relativamente sencillo y, por lo general, consiste en trasladar las preferencias relevantes PreferenceController a un archivo en formato XML diferente. Si el botón PreferenceController usa use(...). Asegúrate de quitarlo. desde la SettingsFragment anterior y agregarla al nuevo SettingsFragment

En esta página, se proporcionan ejemplos para cambiar el orden de las opciones de configuración y revisar situaciones que de que ocurra la evaluación.

Mover una preferencia básica

En este ejemplo, se explica cómo mover una preferencia de una pantalla de preferencias a otra, en el que la preferencia tiene solo un controlador de preferencias predeterminado. En este ejemplo, Mover la preferencia Unidades de la pantalla de preferencias de la página principal a Preferencias del sistema. en la pantalla. 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>

Mueve una preferencia que utilice use(...)

Considera el siguiente ejemplo más complejo que traslada todas las preferencias en la advertencia de datos y Limita el fragmento un nivel más alto 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 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 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. Como en este ejemplo se trasladan las preferencias y todo el código del método onAttach es relevante para estos parámetros de preferencia, sería apropiado copiar los contenidos del método en el nuevo fragmento. Sin embargo, esto varía según el una preferencia específica. También debes mover las variables de instancia relevantes.

    Sin embargo, hay una complicación. El fragmento original esperaba NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE: pasado como un argumento, que debe provenir del intent a la actividad (cuando se proporcionan).

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

  3. Identifica otras dependencias o acciones de intent esperadas en el fragmento anterior antes limpiar los fragmentos y los archivos XML antiguos. En este caso, una superposición config value apunta a la actividad anterior, que debe actualizarse para que apunte a la actividad correcta.

Cómo agregar 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 vehículo.

Después de crear la nueva pantalla de preferencias, utiliza los ejemplos anteriores para reorganizar la de preferencias según lo desees.