Reorganizar la configuración del automóvil

En su mayor parte, reorganizar la jerarquía de Configuración es relativamente sencillo y normalmente consiste en mover la preferencia relevante y PreferenceController a un archivo XML diferente. Si PreferenceController usa use(...) , asegúrese de eliminarlo del SettingsFragment anterior y agregarlo al nuevo SettingsFragment .

Esta página proporciona ejemplos para reordenar la configuración para revisar situaciones que puedan ocurrir.

Mover una preferencia básica

Este ejemplo explica cómo mover una preferencia de una pantalla de preferencias a otra, en la que la preferencia tiene solo un controlador de preferencias predeterminado. En este ejemplo, mueve la preferencia Unidades de la pantalla de preferencias de la Página de inicio a la pantalla de preferencias del Sistema. Para hacerlo, mueva el siguiente XML desde 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>

Mover una preferencia que usa use(...)

Considere el siguiente ejemplo más complejo que mueve todas las preferencias en el fragmento Advertencia y límite de datos hacia arriba un nivel en el fragmento 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. Mueva 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 , determine cómo se utiliza 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 en el método onAttach es relevante para configurar estos parámetros de preferencia, sería apropiado copiar todo el contenido del método en el nuevo fragmento. Sin embargo, esto varía según la preferencia específica. También debe pasar por las variables de instancia relevantes.

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

    Para obtener esta información necesaria, cree un método newInstance y pase la plantilla cuando esté presente (de lo contrario, pásela nula) y luego actualice la actividad para DataUsageFragment u obtenga la información de intención directamente en el método onAttach usando getActivity().getIntent() . En cualquier caso, puede pasar la información necesaria para este método como lo hizo anteriormente.

  3. Identifique otras dependencias o acciones de intención esperadas en el fragmento anterior antes de limpiar los fragmentos y archivos XML antiguos. En este caso, un valor de configuración superpuesto apunta a la actividad anterior, que debe actualizarse para que apunte a la actividad correcta.

Agregar una pantalla de preferencias a la jerarquía

Para agregar una nueva pantalla de preferencias a la jerarquía, consulte Agregar configuración del automóvil .

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