Tối ưu hoá để chống phân tâm trong phần Cài đặt trên ô tô

Tối ưu hoá để chống phân tâm (DO) được cung cấp dưới dạng một công cụ giúp giảm mức độ tương tác của người lái xe với ứng dụng Cài đặt trong khi ô tô đang di chuyển. Bạn có thể cần thay đổi một số chế độ cài đặt trong khi lái xe để ứng dụng bị chặn hoàn toàn. Tuy nhiên, theo mặc định, hầu hết các lựa chọn ưu tiên đều bị tắt chỉ bằng khoá và dễ dàng cập nhật các lựa chọn ưu tiên.

Ứng dụng được bật khi đang lái xe

Hình 1. Các ứng dụng được bật khi đang lái xe

Toàn bộ hoạt động cũng có thể bị chặn nếu không được tối ưu hoá để chống phân tâm, như minh hoạ dưới đây. Phương thức này hiện được dùng chủ yếu để tìm kiếm chế độ cài đặt.

Đã chặn mọi hoạt động

Hình 2. Đã chặn mọi hoạt động

Bạn có thể tuỳ chỉnh cơ bản đối với hiệu suất của DO thông qua cấu hình lớp phủ. Nếu bạn yêu cầu tuỳ chỉnh chi tiết hơn, các thay đổi bổ sung có thể thực hiện thông qua mã.

Tuỳ chỉnh cấp cao

Khi một lựa chọn ưu tiên bị tắt trong khi đang lái xe, việc nhấn vào lựa chọn đó sẽ hiển thị một thông báo ngắn thông báo cho biết tùy chọn không khả dụng trong khi lái xe, miễn là tùy chọn có đính kèm bộ điều khiển lựa chọn ưu tiên. Thông báo sử dụng Chuỗi restricted_while_driving có thể tuỳ chỉnh bằng lớp phủ (miễn là chuỗi nhỏ hơn giới hạn 60 ký tự).

Lớp phủ tuỳ chỉnh

Hình 3. Lớp phủ tuỳ chỉnh

Bạn có thể tắt toàn bộ khung DO bằng config_always_ignore_ux_restrictions. Khi đặt giá trị này thành true, người lái xe có thể tương tác với mọi khía cạnh của Ứng dụng Cài đặt.

<bool name="config_always_ignore_ux_restrictions">true</bool>

Nếu cấu hình ở trên được đặt thành false, ứng dụng Cài đặt sẽ quay lại sử dụng config_ignore_ux_restrictions để xác định xem nên bật tuỳ chọn nào trong khi lái xe. Các chuỗi được cung cấp ở đây phải trỏ đến các chuỗi được xác định trong preference_keys.xml.

Ví dụ

Ví dụ sau để biết cách bật chế độ cài đặt được lồng sâu trong khi lái xe minh hoạ cách bật chế độ đầu ra cho tính năng Chuyển văn bản sang lời nói (TTS). Để làm được điều này, thêm tất cả chế độ cài đặt trong hệ phân cấp vào config_ignore_ux_restrictions. Điều này bao gồm các lựa chọn ưu tiên về hệ thống, ngôn ngữ và phương thức nhập cũng như TTS cho cấu hình, vì hệ thống phân cấp của chúng ta là Hệ thống->Ngôn ngữ & Đầu vào->Đầu ra của chuyển văn bản sang lời nói. Tuy nhiên, lựa chọn ưu tiên trong mảnh chuyển văn bản sang lời nói vẫn bị tắt. Để cho phép các quảng cáo này, chúng tôi chúng ta cần thêm khoá cho những lựa chọn ưu tiên mà chúng ta muốn truy cập được. Trong phần này ví dụ: chúng tôi muốn bật tuỳ chọn phát lại nhưng không bật công cụ để chúng ta thêm pk_tts_playback_group vào cấu hình.

<string-array name="config_ignore_ux_restrictions">
    [...]
    <item>@string/pk_system_settings_entry</item>
    <item>@string/pk_languages_and_input_settings</item>
    <item>@string/pk_tts_settings_entry</item>
    <item>@string/pk_tts_playback_group</item>
</string-array>

Chế độ tuỳ chỉnh chi tiết

Có một số lựa chọn ưu tiên có thể yêu cầu hành vi tuỳ chỉnh nhiều hơn so với chỉ cần bật/tắt tuỳ chọn dựa trên trạng thái lái xe. Ví dụ: Bluetooth và Wi-Fi đã được sửa đổi để hiển thị các thiết bị Bluetooth đã lưu hoặc Điểm truy cập Wi-Fi trong khi lái xe.

Hiện tại, không có giải pháp dựa trên cấu hình để tạo những loại điều chỉnh. Thay vào đó, bạn có thể tạo một lớp tuỳ chỉnh mở rộng PreferenceController và ghi đè onApplyUxRestrictions() để làm cho thay đổi.

Khi trình điều khiển lựa chọn ưu tiên tuỳ chỉnh được tạo, bạn có thể phủ tệp XML có liên quan để thay thế trình điều khiển lựa chọn ưu tiên mặc định bằng cách triển khai của riêng bạn.

Ví dụ

Trong CarSettings, một số lựa chọn ưu tiên có hành vi được tuỳ chỉnh nhiều hơn, có thể là được dùng làm ví dụ để tuỳ chỉnh thêm. Ví dụ: trong danh sách điểm truy cập Wi-Fi, hành vi mong muốn là chỉ hiển thị các điểm truy cập đã lưu trong khi lái xe (và ẩn phần còn lại). Để đạt được điều này, hãy làm như sau:

} else if (shouldApplyUxRestrictions(getUxRestrictions())) {
    wifiEntries = getCarWifiManager().getSavedWifiEntries();
} else {
    wifiEntries = getCarWifiManager().getAllWifiEntries();
}

Vì các điểm truy cập xuất hiện tại đây đã bị hạn chế, bạn không muốn áp dụng thêm UxRestrictions cho các lựa chọn ưu tiên này. Do đó, hãy ghi đè onApplyUxRestrictions và thực hiện một thao tác có chủ đích không hoạt động:

@Override
protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
    // Since the list dynamically changes based on the UX restrictions, we
    // enable this fragment regardless of the restriction. Intentional no-op.
}

Một ví dụ khác được cung cấp trên thiết bị có kết nối Bluetooth. Để tiếp tục bật để kết nối và ngắt kết nối với thiết bị Bluetooth nhưng muốn vô hiệu hoá khả năng truy cập vào các chế độ cài đặt bổ sung đối với các thiết bị này. Để đạt được điều này, chúng tôi ghi đè onApplyUxRestrictions một lần nữa nhưng lần này, nếu NO_SETUP quy tắc hạn chế đang có hiệu lực, hãy ẩn thao tác phụ trên lựa chọn ưu tiên.

@Override
protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
    super.onApplyUxRestrictions(uxRestrictions);
    if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) {
        updateActionVisibility(getPreference(), /* isActionVisible= */ false);
    }
}