Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

자동차 설정의 Distraction Optimization

Distraction Optimization(DO)은 자동차가 이동하는 동안 설정 앱과의 드라이버 상호작용을 줄이기 위한 도구로 제공됩니다. 운전 중에 일부 설정을 변경해야 할 수도 있으므로 앱이 완전히 차단되지는 않습니다. 하지만, 기본적으로 대부분의 환경설정은 키만 사용 중지되고 사용 설정된 환경설정은 쉽게 업데이트됩니다.

운전 중 사용 설정된 앱

그림 1. 운전 중 사용 설정된 앱

아래와 같이 전체 활동이 주의 분산 행동 최적화되지 않는다면 차단될 수도 있습니다. 이 메서드는 현재 주로 설정 검색에 사용됩니다.

모든 활동이 차단됨

그림 2. 모든 활동이 차단됨

DO 성능에 관한 기본 맞춤설정은 구성 오버레이를 통해 가능합니다. 더 세부적인 맞춤설정이 필요한 경우 코드를 통해 추가로 변경할 수 있습니다.

상위 수준 맞춤설정

운전 중 환경설정이 사용 중지될 때 환경설정에 연결된 환경설정 컨트롤러가 있는 경우 환경설정을 탭하면 운전 중 환경설정을 사용할 수 없다는 내용의 토스트 메시지를 표시합니다. 메시지는 오버레이로 맞춤설정할 수 있는 restricted_while_driving 문자열을 사용합니다(문자열이 영문 60자보다 짧은 경우).

맞춤설정된 오버레이

그림 3. 맞춤설정된 오버레이

전체 DO 프레임워크는 config_always_ignore_ux_restrictions를 사용하여 사용 중지됩니다. 이 값을 참으로 설정하면 드라이버가 설정 앱의 모든 관점에서 상호작용할 수 있습니다.

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

위 구성을 거짓으로 설정하면 설정 앱이 config_ignore_ux_restrictions로 돌아가 운전 중 어떤 환경설정을 활성화해야 하는지 결정합니다. 여기에 제공된 문자열은 preference_keys.xml.에 정의된 문자열을 가리켜야 합니다.

이 예에서는 운전 중에 복잡하게 중첩된 설정을 사용 설정하는 방법을 보여주기 위해 TTS(텍스트 음성 변환) 출력 설정 사용 방법을 보여줍니다. TTS 출력 설정이 작동하려면 계층 구조의 모든 설정을 config_ignore_ux_restrictions에 추가합니다. Google의 계층 구조는 시스템->언어 및 입력->텍스트 음성 변환 출력이므로, 여기에는 구성의 시스템, 언어 및 입력, TTS 환경설정이 포함됩니다. 그러나, 텍스트 음성 변환 프래그먼트의 환경설정은 계속 사용 중지됩니다. 환경설정을 사용 설정하려면 액세스하려는 환경설정 키를 추가해야 합니다. 이 예에서는 엔진 환경설정이 아닌 재생 환경설정을 사용 설정하므로 구성에 pk_tts_playback_group을 추가합니다.

<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>

세부 맞춤설정

단순히 운전 상태에 따라 환경설정을 사용 설정/사용 중지하는 것보다 더 많은 맞춤설정 동작이 필요한 환경설정이 있습니다. 예를 들어, 운전 중에 저장된 블루투스 기기 또는 Wi-Fi 액세스 포인트를 표시하기 위해 블루투스 및 Wi-Fi가 이미 수정되었습니다.

현재는 구성 기반 솔루션이 없으므로 이러한 조정을 실행할 수 없습니다. 대신, PreferenceController를 확장하고 onApplyUxRestrictions()를 재정의하여 원하는 변경사항을 적용하는 맞춤 클래스를 만들 수 있습니다.

맞춤 환경설정 컨트롤러가 생성된 후에는 관련 XML 파일을 오버레이하여 기본 환경설정 컨트롤러를 자체 구현으로 대체할 수 있습니다.

CarSettings에서 일부 환경설정에는 이러한 맞춤설정 동작이 포함되며, 이는 추가 맞춤설정을 위한 예로 사용할 수 있습니다. 예를 들어, Wi-Fi 액세스 포인트 목록에서 원하는 동작은 운전 중 저장된 액세스 포인트만 표시하는 것입니다(나머지는 숨김 처리). 이를 위해 다음을 실행합니다.

mAccessPoints = CarUxRestrictionsHelper.isNoSetup(getUxRestrictions())
               ? getCarWifiManager().getSavedAccessPoints()
               : getCarWifiManager().getAllAccessPoints();

여기에 표시되는 액세스 포인트는 이미 제한되었으므로 환경설정에 UxRestrictions를 추가로 적용하지는 않을 것입니다. 따라서, onApplyUxRestrictions를 재정의하고 의도적인 노옵스(no-ops)를 실행합니다.

@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.
}

또 다른 예는 블루투스 연결 기기에 있습니다. 블루투스 기기를 연결하거나 연결 해제하지만 이러한 기기의 추가 설정에 액세스하는 기능은 사용 중지하도록 블루투스 기기 사용 설정을 계속하려고 합니다. 이를 위해 onApplyUxRestrictions는 다시 재정의하지만, 이번에는 NO_SETUP 제한이 활성화되면 환경설정에서 보조 작업을 숨깁니다.

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