Riorganizzare le impostazioni dell'auto

Per la maggior parte, riorganizzare la gerarchia delle impostazioni è relativamente semplice e in genere consiste nel spostare la preferenza e PreferenceController pertinenti in un altro file XML. Se PreferenceController utilizza use(...), assicurati di rimuoverlo dal SettingsFragment precedente e di aggiungerlo al nuovo SettingsFragment.

Questa pagina fornisce esempi per riordinare le impostazioni in modo da esaminare le situazioni che possono verificarsi.

Spostare una preferenza di base

Questo esempio spiega come spostare una preferenza da una schermata delle preferenze all'altra, in cui la preferenza ha solo un controller delle preferenze predefinito. In questo esempio, muovi la preferenza Unità dalla schermata delle preferenze della home page alla schermata delle preferenze di sistema. A tale scopo, sposta il seguente codice XML da homepage_fragment.xml nella posizione appropriata in 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>

Spostare una preferenza che utilizza use(...)

Prendi in considerazione il seguente esempio più complesso che sposta tutte le preferenze nel frammento Avviso e limite relativi ai dati di un livello più in alto nel frammento Utilizzo dei dati, che aggiorna DataWarningAndLimitFragment.java in modo da includere il metodo use per trasmettere le informazioni ai controller delle preferenze dopo la costruzione.

  1. Sposta il file XML pertinente nella posizione che preferisci in 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. In DataWarningAndLimitFragment.java, determina come viene utilizzato il metodo 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);
        }
    }

    In questo caso, il metodo use imposta l'editor dei criteri di rete e il modello di rete per i controller delle preferenze. Poiché questo esempio sposta tutte le preferenze e tutto il codice nel metodo onAttach è pertinente all'impostazione di questi parametri di preferenza, sarebbe opportuno copiare l'intero contenuto del metodo nel nuovo frammento. Tuttavia, la situazione varia a seconda della preferenza specifica. Devi anche spostare le variabili di istanza pertinenti.

    Tuttavia, c'è un problema. Il frammento originale prevedeva che NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE fosse passato come argomento, che deve provenire dall'intent all'attività (se fornito).

    Per ottenere queste informazioni necessarie, crea un metodo newInstance e passa il modello se presente (in caso contrario, passa null) e poi aggiorna l'attività per DataUsageFragment o ottieni le informazioni sull'intent direttamente nel metodo onAttach utilizzando getActivity().getIntent(). In entrambi i casi, puoi passare le informazioni necessarie per questo metodo come indicato sopra.

  3. Identifica eventuali altre dipendenze o azioni di intent previste nel vecchio frammento prima di eliminare i vecchi frammenti e i file XML. In questo caso, un valore di configurazione della sovrapposizione fa riferimento alla vecchia attività, che deve essere aggiornata in modo da puntare all'attività corretta.

Aggiungere una schermata delle preferenze alla gerarchia

Per aggiungere una nuova schermata delle preferenze alla gerarchia, vedi Aggiungere le impostazioni dell'auto.

Dopo aver creato la nuova schermata delle preferenze, utilizza gli esempi precedenti per riorganizzare la gerarchia delle preferenze come preferisci.