В 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
Конфигурации времени сборки и ресурсы можно изменять с помощью наложений ресурсов.
Выполнение
Включите функцию, выполнив следующие действия.
- Переопределить значение по умолчанию
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
- Начните воспроизведение видео (чтобы активировать блокировку экрана).
- Убедитесь, что через несколько секунд появится диалоговое окно с предупреждением о переходе в спящий режим.
- Убедитесь, что экран выключается по истечении установленного времени ожидания.