Riordina le impostazioni dell'auto

Per la maggior parte, il riordinamento della gerarchia delle impostazioni è relativamente in modo diretto e di solito consiste nello spostare la preferenza pertinente PreferenceController in un altro file XML. Se PreferenceController utilizza use(...), assicurati di rimuovere della versione precedente di SettingsFragment e aggiungerla al nuovo SettingsFragment.

Questa pagina fornisce esempi di riordinamento delle Impostazioni al fine di esaminare situazioni in cui che possono verificarsi.

Spostare 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 preferenze predefinito. In questo esempio, sposta la preferenza Unità dalla schermata Preferenza home page alla preferenza di sistema schermo. Per farlo, sposta il seguente XML da homepage_fragment.xml nella località 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(...)

Considera il seguente esempio più complesso che sposta tutte le preferenze nel riquadro Avviso sui dati Limita il frammento a un livello superiore nel frammento Utilizzo dati, che aggiorna DataWarningAndLimitFragment.java per includere il metodo use per passare 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 in che modo 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 di preferenze. Poiché in questo esempio vengono le preferenze e tutto il codice nel metodo onAttach sia pertinente l'impostazione di questi parametri di preferenza, sarebbe opportuno copiare l'intero nel nuovo frammento. Tuttavia, questo varia a seconda preferenza specifica. Devi anche spostare le variabili di istanza pertinenti.

    Tuttavia, c'è una complicazione. Il frammento originale previsto NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE per essere come argomento, che deve derivare dall'intent all'attività (se fornite).

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

  3. Identifica eventuali altre dipendenze o azioni di intent previste nel vecchio frammento prima ripulire i vecchi frammenti e i file XML. In questo caso, un overlay config rimanda all'attività precedente, che deve essere aggiornata in modo che punti a l'attività corretta.

Aggiungi una schermata di preferenza alla gerarchia

Per aggiungere una nuova schermata di preferenza alla gerarchia, consulta la sezione Aggiunta di impostazioni dell'auto.

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