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

По большей части изменение иерархии настроек относительно просто и обычно состоит из перемещения соответствующих предпочтений и 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(...)

Рассмотрим следующий более сложный пример, в котором все предпочтения во фрагменте Data Warning & Limit перемещаются на один уровень вверх во фрагмент Data Usage, который обновляет 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-файлы. В этом случае значение конфигурации наложения указывает на старое действие, которое необходимо обновить, чтобы оно указывало на правильное действие.

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

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

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