Изменить настройки автомобиля

По большей части перестановка иерархии настроек относительно проста и обычно состоит из перемещения соответствующего предпочтения и PreferenceController в другой XML-файл. Если PreferenceController использует use(...) , обязательно удалите его из предыдущего SettingsFragment и добавьте в новый SettingsFragment .

На этой странице представлены примеры изменения порядка настроек для рассмотрения ситуаций, которые могут возникнуть.

Переместить базовое предпочтение

В этом примере объясняется, как переместить предпочтение с одного экрана предпочтений на другой, в котором предпочтение имеет только контроллер предпочтений по умолчанию. В этом примере вы перемещаете настройку «Единицы» с экрана настроек «Домашняя страница» на экран настроек «Система». Для этого переместите следующий XML-код из homepage_fragment.xml в соответствующее место в 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>

Переместите настройку, которая использует use(...)

Рассмотрим следующий, более сложный пример, который перемещает все настройки во фрагменте «Предупреждение и ограничение данных» на один уровень вверх во фрагмент «Использование данных», который обновляет DataWarningAndLimitFragment.java , включив в него метод use для передачи информации в контроллеры предпочтений после создания.

  1. Переместите соответствующий XML в нужное место в 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. В DataWarningAndLimitFragment.java определите, как используется метод 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);
       
    }
    }

    В этом случае метод use устанавливает редактор сетевой политики и шаблон сети для контроллеров предпочтений. Поскольку в этом примере перемещаются все настройки, а весь код метода onAttach имеет отношение к установке этих параметров предпочтений, было бы целесообразно скопировать все содержимое метода в новый фрагмент. Однако это зависит от конкретных предпочтений. Вам также необходимо переместить соответствующие переменные экземпляра.

    Однако есть осложнение. Исходный фрагмент ожидал, что NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE будет передан в качестве аргумента, который должен поступать от намерения к действию (если он предоставлен).

    Чтобы получить эту необходимую информацию, либо создайте метод newInstance и передайте шаблон, если он присутствует (в противном случае передайте значение null), а затем обновите действие для DataUsageFragment , либо получите информацию о намерении непосредственно в методе onAttach с помощью getActivity().getIntent() . В любом случае вы можете передать необходимую информацию для этого метода, как вы это сделали выше.

  3. Определите любые другие зависимости или ожидаемые действия намерения в старом фрагменте, прежде чем очищать старые фрагменты и файлы XML. В этом случае значение конфигурации наложения указывает на старое действие, которое необходимо обновить, чтобы оно указывало на правильное действие.

Добавьте экран предпочтений в иерархию

Чтобы добавить новый экран предпочтений в иерархию, см. раздел «Добавление настроек автомобиля» .

После создания нового экрана предпочтений используйте приведенные выше примеры, чтобы изменить иерархию предпочтений по своему усмотрению.