В 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
Конфигурации и ресурсы времени сборки можно изменить с помощью наложений ресурсов.
Выполнение
Включите эту функцию, используя следующее.
- Переопределить значение
config_attentiveTimeout
по умолчанию. - При использовании 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
представляет собой пример того, как раскрыть эту функцию в настройках.
Пример ручного теста
Убедитесь, что настройка разработчика
stay_on_while_plugged_in
отключена, если HAL о работоспособности устройства сообщает, что в устройстве есть батарея (battery_present
имеет значениеtrue
), так как это может помешать функции выключить экран.
adb shell settings put global stay_on_while_plugged_in 0
- Установите тайм-аут невнимательного сна на несколько секунд больше, чем продолжительность диалогового окна с предупреждением.
adb shell settings put secure attentive_timeout 32000
- Запустите воспроизведение видео (чтобы получить функцию блокировки экрана).
- Убедитесь, что через несколько секунд появится диалоговое окно с предупреждением о спящем режиме.
- Убедитесь, что экран выключается по истечении заданного времени ожидания.