Reorganizar configurações do carro

Na maior parte, reorganizar a hierarquia de Configurações é relativamente direta e normalmente consiste em mover a preferência relevante e PreferenceController para um arquivo XML diferente. Se o PreferenceController usa use(...). Não se esqueça de remover da SettingsFragment anterior e adicionar à nova SettingsFragment

Esta página fornece exemplos de reordenação das configurações para analisar situações que podem ocorrer.

Mover uma preferência básica

Este exemplo explica como mover uma preferência de uma tela de preferências para outra, em que a preferência tem apenas um controlador de preferências padrão. Neste exemplo, mover a preferência de unidades da tela de preferências da página inicial para a seção de preferências do sistema tela. Para isso, mova o seguinte XML de homepage_fragment.xml para a local apropriado em 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 uma preferência que usa use(...)

Considere o exemplo mais complexo a seguir, que move todas as preferências na seção "Data Warning & Limite o fragmento um nível acima no fragmento de uso de dados, o que atualiza o DataWarningAndLimitFragment.java para incluir o método use; para transmitir informações para os controladores de preferências após a construção.

  1. Mova o XML relevante para o local desejado em 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. No DataWarningAndLimitFragment.java, determine como o use é usado.
    @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);
        }
    }
    

    Nesse caso, o método use define o editor de políticas de rede. e o modelo de rede para os controladores de preferência. Como este exemplo move todos as preferências e todo o código no método onAttach é relevante para ao definir esses parâmetros de preferência, seria apropriado copiar toda a conteúdos do método no novo fragmento. No entanto, isso varia de acordo com uma preferência específica. Você também precisa mover as variáveis de instância relevantes.

    No entanto, há uma complicação. O fragmento original esperado NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE restantes passados como argumento, que devem vir da intent para a atividade (quando fornecido).

    Para acessar as informações necessárias, crie uma newInstance e passar o modelo quando presente (caso contrário, passa o valor nulo) e, em seguida, atualizar a atividade para a DataUsageFragment ou receber a intent diretamente no método onAttach usando getActivity().getIntent(). Em ambos os casos, é possível passar o valor as informações necessárias para esse método, como você fez acima.

  3. Identifique quaisquer outras dependências ou ações de intent esperadas no fragmento antigo antes. limpar os fragmentos antigos e arquivos XML. Nesse caso, uma sobreposição valor de configuração aponta para a atividade antiga, que precisa ser atualizada para apontar para a atividade correta.

Adicionar uma tela de preferências à hierarquia

Para adicionar uma nova tela de preferências à hierarquia, consulte Adicionar configurações do carro.

Depois de criar a nova tela de preferências, use os exemplos acima para reorganizar a a hierarquia de preferências conforme desejado.