TV 대기

Android 11의 자동 절전 모드는 사용자 비활성 제한 시간을 설정하여 지정된 시간이 지나면 FLAG_KEEP_SCREEN_ON이 있는 창이 표시되어 있거나 FULL_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCK, SCREEN_DIM_WAKE_LOCK 수준의 wake lock이 유지되더라도 화면을 끄는 절전 기능입니다. 레벨 PARTIAL_WAKE_LOCK의 wakelock은 이 기능에 영향을 받지 않습니다. 제한 시간이 만료되기 직전에 기기와 상호작용하지 않을 경우 기기가 절전 모드로 전환된다는 경고 메시지가 사용자에게 표시될 수 있습니다.

이 컨텍스트에서 사용자 활동은 USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS 플래그를 포함하지 않고 PowerManager#userActivity 호출을 트리거하는 모든 것을 의미합니다 (다음을 포함하되 이에 국한되지 않음).

  • 터치스크린과 상호작용
  • 물리적 버튼 누르기
  • 외부 액세서리의 입력 이벤트 (예: 연결된 키보드, 블루투스 리모컨, IR 원격)
  • 음성 상호작용
  • 원터치 플레이와 같은 특정 HDMI CEC 메시지 수신
  • 새 전송 세션 시작

맞춤설정

기능이 사용 설정되면 지정된 사용자 비활성 시간 후 기기 화면에 경고가 표시됩니다. 아무 조치도 취하지 않으면 화면이 꺼집니다. 이러한 구성 옵션을 사용하여 기능을 맞춤설정할 수 있습니다.

제한 시간 구성

제한 시간을 구성하려면 frameworks/base/core/res/res/values/config.xml에서 다음 요소를 업데이트합니다.

  • config_attentiveTimeout
    • 기본 사용자 비활성 시간(밀리초)을 지정합니다. 지정된 시간이 지나면 화면이 꺼지며 이는 화면 wake lock이 설정된 경우에도 마찬가지입니다.
    • 빌드 시간에 설정합니다.
    • 값이 0~config_minimumScreenOffTimeout이면 제한 시간이 config_minimumScreenOffTimeout으로 설정되어 절전 모드가 해제된 직후 기기의 화면이 꺼지지 않도록 합니다.
    • 기본값은 -1이며, 이 기능을 사용 중지합니다.

기본 제한 시간 재정의

기본 제한 시간 설정을 재정의하려면 다음 요소를 업데이트하세요.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • 이 매개변수를 설정하면 config_attentiveTimeout으로 설정된 기본 대기 시간 제한 시간을 재정의합니다.
    • 런타임 시 설정할 수 있습니다.

경고 전 지속 시간 구성

지속 시간을 구성하려면 frameworks/base/core/res/res/values/config.xml에서 다음 요소를 업데이트합니다.

  • config_attentiveWarningDuration
    • 오랜 시간 사용자의 활동이 없을 때 화면이 꺼지기 전에 사용자에게 얼마나 오랫동안 경고 메시지를 표시할지를 나타냅니다.
    • 이 값은 자동 절전 모드의 설정된 제한 시간보다 훨씬 짧아야 합니다. 그러지 않으면 경고 대화상자가 계속 표시되고 이를 닫을 수 없습니다.
    • 기본: 30000 (30s).

TV 설정 제한 시간 설정 표시

제한 시간 환경설정을 표시하려면 packages/apps/TvSettings/Settings/res/values/config.xml에서 다음 요소를 업데이트합니다.

  • config_show_standby_timeout
    • 미디어 재생 중에 화면을 끄도록 허용하는 환경설정 항목을 표시할지 여부입니다.
    • 기본값은 false입니다.

경고 UI를 위한 리소스

  • 경고 대화상자의 레이아웃은 frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml에 정의되어 있습니다.
  • 대화상자의 다음 문자열은 frameworks/base/packages/SystemUI/res/values/strings.xmlframeworks/base/packages/SystemUI/res-product/values/strings.xml에서 정의됩니다.
    • inattentive_sleep_warning_title
    • inattentive_sleep_warning_message

빌드 시간 구성과 리소스는 리소스 오버레이에 의해 변경될 수 있습니다.

구현

다음을 사용하여 기능을 사용 설정합니다.

  1. 기본 config_attentiveTimeout을 재정의합니다.
  2. AOSP TvSettings를 사용하는 경우:
    • config_show_standby_timeout를 재정의하여 설정에서 이 기능을 사용 중지합니다.
    • Settings.Secure.ATTENTIVE_TIMEOUT를 설정하는 자체 설정을 구현합니다.

유효성 검사

이 기능의 CTS 테스트는 cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java에 있습니다.

예시 및 소스

  • frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java에는 기본 경고 UI 구현이 포함되어 있습니다.
  • packages/apps/TvSettings는 설정에서 기능을 노출하는 방법의 예시를 제공합니다.

직접 테스트 사례 예시

  1. 기기의 상태 HAL(하드웨어 추상화 계층)이 기기에 배터리가 있다고(battery_presenttrue임) 보고하는 경우 stay_on_while_plugged_in 개발자 설정이 꺼져 있어야 합니다. 그러지 않으면 이 기능으로 화면이 꺼지지 않을 수 있습니다.
    adb shell settings put global stay_on_while_plugged_in 0

  2. 자동 절전 모드의 제한 시간을 경고 대화상자의 지속 시간보다 몇 초 더 길게 설정합니다.
    adb shell settings put secure attentive_timeout 32000
  3. 동영상 재생을 다시 시작하여 화면 wake lock을 확보합니다.
  4. 절전 모드 경고 대화상자가 몇 초 후에 표시되는지 확인합니다.
  5. 설정된 제한 시간이 지나면 화면이 꺼지는지 확인합니다.