車の設定の並べ替え

ほとんどの場合、設定階層の再配置は比較的簡単で、通常は関連する設定とPreferenceControllerを別の XML ファイルに移動することで構成されます。 PreferenceControlleruse(...)を使用する場合は、必ず以前の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 フラグメント内のすべての設定を 1 レベル上の Data Use フラグメントに移動します。これにより、 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のアクティビティを更新するか、 getActivity().getIntent()を使用してonAttachメソッドでインテント情報を直接取得します。 getActivity().getIntent() 。どちらの場合も、上記と同様に、このメソッドに必要な情報を渡すことができます。

  3. 古いフラグメントと XML ファイルをクリーンアップする前に、古いフラグメント内の他の依存関係または予期されるインテント アクションを特定します。この場合、 オーバーレイ構成値は古いアクティビティを指すため、正しいアクティビティを指すように更新する必要があります。

設定画面を階層に追加する

新しい設定画面を階層に追加するには、 「 車の設定を追加する 」を参照してください。

新しい設定画面を作成した後、上記の例を使用して、必要に応じて設定階層を再配置します。