Riorganizzare le impostazioni dell'auto

Nella maggior parte dei casi, riorganizzare la gerarchia delle Impostazioni è relativamente semplice e in genere consiste nello spostare la preferenza pertinente e PreferenceController in un file XML diverso. Se PreferenceController utilizza use(...) , assicurati di rimuoverlo dal precedente SettingsFragment e di aggiungerlo al nuovo SettingsFragment .

Questa pagina fornisce esempi per riordinare le Impostazioni per esaminare le situazioni che potrebbero verificarsi.

Sposta una preferenza di base

Questo esempio spiega come spostare una preferenza da una schermata di preferenza a un'altra, in cui la preferenza ha solo un controller di preferenza predefinito. In questo esempio, sposti la preferenza Unità dalla schermata delle preferenze Home page alla schermata delle preferenze Sistema. Per fare ciò, sposta il seguente 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>

Sposta una preferenza che utilizza use(...)

Considera il seguente esempio più complesso che sposta tutte le preferenze nel frammento Data Warning & Limit su di un livello nel frammento Data Usage, che aggiorna DataWarningAndLimitFragment.java per includere il metodo use per passare le informazioni ai controller delle preferenze dopo la costruzione.

  1. Sposta il codice XML pertinente nella posizione desiderata 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 , determinare 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 è rilevante per impostare questi parametri di preferenza, sarebbe appropriato copiare l'intero contenuto del metodo nel nuovo frammento. Tuttavia, questo varia a seconda della preferenza specifica. È necessario spostarsi anche sulle variabili di istanza pertinenti.

    Tuttavia, c’è una complicazione. Il frammento originale prevedeva che NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE venisse passato come argomento, che dovrebbe provenire dall'intento all'attività (se fornito).

    Per ottenere queste informazioni necessarie, crea un metodo newInstance e passa il modello quando presente (altrimenti passa in null) e quindi aggiorna l'attività per DataUsageFragment o ottieni le informazioni sull'intento direttamente nel metodo onAttach utilizzando getActivity().getIntent() . In entrambi i casi, puoi passare le informazioni necessarie per questo metodo come hai fatto sopra.

  3. Identificare eventuali altre dipendenze o azioni di intenti previste nel vecchio frammento prima di ripulire i vecchi frammenti e i file XML. In questo caso, un valore di configurazione sovrapposto punta alla vecchia attività, che deve essere aggiornata per puntare all'attività corretta.

Aggiungi una schermata delle preferenze alla gerarchia

Per aggiungere una nuova schermata delle preferenze alla gerarchia, vedere Aggiungi impostazioni auto .

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