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

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