ТВ в режиме ожидания

В Android 11 функция «невнимательного сна» — это энергосберегающая функция, позволяющая установить тайм-аут бездействия пользователя, по истечении которого экран выключается, даже если видны окна с флагом FLAG_KEEP_SCREEN_ON или удерживаются блокировки пробуждения уровня FULL_WAKE_LOCK , SCREEN_BRIGHT_WAKE_LOCK или SCREEN_DIM_WAKE_LOCK . Блокировки пробуждения уровня PARTIAL_WAKE_LOCK не затрагиваются этой функцией. Незадолго до истечения тайм-аута может отображаться сообщение, предупреждающее пользователя о том, что устройство перейдет в спящий режим, если он не будет взаимодействовать с устройством.

В данном контексте под активностью пользователя понимается всё, что инициирует вызов функции PowerManager#userActivity (без флага USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS ), включая, помимо прочего:

  • Взаимодействие с сенсорным экраном
  • Нажатие физической кнопки
  • Ввод данных с внешнего устройства (например, подключенной клавиатуры, Bluetooth-пульта, ИК-пульта)
  • Голосовое взаимодействие
  • Приём определённых сообщений HDMI CEC, таких как One Touch Play.
  • Начало новой сессии кастинга

Настройка

Если эта функция включена, устройство отображает предупреждение на экране после заданного времени бездействия пользователя. Если никаких действий не предпринимается, экран выключается. Вы можете настроить эту функцию с помощью следующих параметров конфигурации.

Настройте время ожидания

Для настройки таймаута обновите следующий элемент в frameworks/base/core/res/res/values/config.xml :

  • config_attentiveTimeout
    • Задает время в миллисекундах, по истечении которого экран выключается (даже если включена блокировка экрана).
    • Устанавливается во время сборки.
    • Если значение находится в диапазоне от 0 до config_minimumScreenOffTimeout , то устанавливается значение таймаута config_minimumScreenOffTimeout , чтобы предотвратить выключение экрана устройства вскоре после пробуждения.
    • По умолчанию: -1 , что отключает эту функцию.

Переопределите значение по умолчанию для таймаута.

Чтобы изменить значение тайм-аута по умолчанию, обновите следующий элемент.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • Если задано, переопределяет таймаут невнимательного сна по умолчанию, установленный параметром config_attentiveTimeout .
    • Можно установить во время выполнения.

Настройте продолжительность времени до появления предупреждения.

Для настройки продолжительности обновите следующий элемент в frameworks/base/core/res/res/values/config.xml :

  • config_attentiveWarningDuration
    • Как долго следует показывать пользователю предупреждающее сообщение, прежде чем экран выключится после длительного бездействия пользователя?
    • Значение должно быть значительно меньше установленного таймаута невнимательного сна, иначе предупреждающее диалоговое окно будет отображаться постоянно и его нельзя будет закрыть.
    • По умолчанию: 30000 (30 с).

Отобразить параметры тайм-аута в настройках телевизора.

Чтобы отобразить настройки тайм-аута, обновите следующий элемент в packages/apps/TvSettings/Settings/res/values/config.xml :

  • config_show_standby_timeout
    • Следует ли отображать пункт настроек, позволяющий отключать экран во время воспроизведения мультимедиа.
    • По умолчанию: false .

Ресурсы для пользовательского интерфейса предупреждения

  • Структура диалогового окна предупреждения определяется в frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml .
  • Следующие строки для диалогового окна определены в frameworks/base/packages/SystemUI/res/values/strings.xml и frameworks/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 содержит реализацию пользовательского интерфейса для предупреждений по умолчанию.
  • packages/apps/TvSettings приведен пример того, как можно отобразить эту функцию в настройках.

Пример ручного тестирования

  1. Убедитесь, что параметр разработчика stay_on_while_plugged_in отключен, если HAL-интерфейс проверки состояния устройства сообщает о наличии батареи ( battery_present имеет значение true ), так как это может помешать функции выключения экрана.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Установите тайм-аут для режима ожидания при невнимательности на несколько секунд больше, чем продолжительность предупреждающего диалога.
    adb shell settings put secure attentive_timeout 32000
  3. Начните воспроизведение видео (для активации экрана).
  4. Убедитесь, что диалоговое окно с предупреждением о спящем режиме появляется через несколько секунд.
  5. Убедитесь, что экран выключается по истечении установленного времени ожидания.