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

В Android 11 невнимательный сон — это функция энергосбережения, которая позволяет установить тайм-аут бездействия пользователя, по истечении которого экран выключается, даже если видны окна с FLAG_KEEP_SCREEN_ON или удерживаются wakelocks уровня FULL_WAKE_LOCK , SCREEN_BRIGHT_WAKE_LOCK или SCREEN_DIM_WAKE_LOCK . Wakelocks уровня 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 с).

Показать настройки тайм-аута в TvSettings

Чтобы отобразить настройки времени ожидания, обновите следующий элемент в 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. Убедитесь, что экран выключается по истечении установленного времени ожидания.