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