Sắp xếp lại chế độ cài đặt của ô tô

Trong hầu hết trường hợp, việc sắp xếp lại hệ thống phân cấp Cài đặt tương đối đơn giản và thường bao gồm việc di chuyển lựa chọn ưu tiên có liên quan và PreferenceController sang một tệp XML khác. Nếu PreferenceController sử dụng use(...), hãy nhớ loại bỏ từ SettingsFragment trước và thêm vào SettingsFragment.

Trang này cung cấp các ví dụ về cách sắp xếp lại phần Cài đặt để xem xét các trường hợp có thể xảy ra.

Di chuyển lựa chọn ưu tiên cơ bản

Ví dụ này giải thích cách di chuyển một lựa chọn ưu tiên từ màn hình lựa chọn này sang màn hình lựa chọn ưu tiên khác, trong đó lựa chọn ưu tiên chỉ có trình điều khiển lựa chọn ưu tiên mặc định. Trong ví dụ này, bạn di chuyển Tùy chọn đơn vị từ màn hình Tùy chọn trang chủ vào Tùy chọn hệ thống màn hình. Để thực hiện việc này, hãy di chuyển XML sau từ homepage_fragment.xml vào phần tử vị trí thích hợp ở 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>

Di chuyển một lựa chọn ưu tiên sử dụng hàm use(...)

Hãy xem xét ví dụ phức tạp hơn sau đây để di chuyển tất cả lựa chọn ưu tiên trong mục Cảnh báo dữ liệu và Giới hạn mảnh lên một cấp trong mảnh Sử dụng dữ liệu. cập nhật DataWarningAndLimitFragment.java để bao gồm phương thức use để truyền thông tin vào bộ điều khiển lựa chọn ưu tiên sau khi tạo.

  1. Di chuyển XML liên quan đến vị trí mong muốn trong 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. Trong DataWarningAndLimitFragment.java, hãy xác định cách use được sử dụng.
    @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);
        }
    }
    

    Trong trường hợp này, phương thức use sẽ đặt trình chỉnh sửa chính sách mạng và mẫu mạng cho các bộ điều khiển lựa chọn ưu tiên. Vì ví dụ này di chuyển tất cả các lựa chọn ưu tiên và tất cả mã trong phương thức onAttach có liên quan đến việc đặt các thông số tuỳ chọn này thì sẽ phù hợp để sao chép toàn bộ nội dung phương thức vào mảnh mới. Tuy nhiên, điều này sẽ thay đổi tuỳ thuộc vào tùy chọn cụ thể. Bạn cũng cần di chuyển các biến thực thể có liên quan.

    Tuy nhiên, có một chức năng. Mảnh ban đầu dự kiến NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE sẽ trở thành được truyền vào dưới dạng đối số, sẽ xuất phát từ ý định đến hoạt động (khi được cung cấp).

    Để lấy thông tin cần thiết này, hãy tạo một newInstance và truyền vào mẫu khi có (nếu không sẽ truyền giá trị rỗng) rồi sau đó cập nhật hoạt động cho DataUsageFragment hoặc lấy ý định trực tiếp vào phương thức onAttach bằng cách sử dụng getActivity().getIntent(). Trong cả hai trường hợp, bạn có thể chuyển cho phương pháp này như đã làm ở trên.

  3. Xác định mọi phần phụ thuộc hoặc thao tác theo ý định dự kiến trong mảnh cũ trước đó dọn dẹp các mảnh và tệp XML cũ. Trong trường hợp này, lớp phủ config trỏ đến hoạt động cũ. Giá trị này phải được cập nhật để trỏ đến hoạt động chính xác.

Thêm màn hình lựa chọn ưu tiên vào hệ phân cấp

Để thêm màn hình lựa chọn ưu tiên mới vào hệ phân cấp, hãy xem phần Thêm chế độ cài đặt cho ô tô.

Sau khi tạo màn hình lựa chọn ưu tiên mới, hãy sử dụng các ví dụ ở trên để sắp xếp lại như mong muốn.