Настройка блокировки при складывании

Производители оригинального оборудования могут настроить на складных устройствах параметр, позволяющий пользователям выбирать, как будет работать внешний экран, когда они складывают устройство из разблокированного и развернутого состояния.

Для этого выберите Настройки > Экран > Использовать приложения при складывании. У пользователя есть три варианта:

  • Всегда. Когда пользователь складывает устройство, передний экран всегда включается и остается разблокированным.
  • Если провести по экрану вверх. Когда пользователь складывает устройство, на нем показывается экран блокировки без необходимости аутентификации, если только приложение не удерживает блокировку пробуждения. В этом случае устройство остается включенным в приложении. Это настройка по умолчанию.
  • Никогда. При складывании устройства оно блокируется, а передний экран отключается.

Страница настроек блокировки при складывании

Рисунок 1. Настройка блокировки в сложенном виде.

Как настроить блокировку при складывании

Чтобы в настройках отображался параметр блокировки при складывании, добавьте логическое значение config_fold_lock_behavior в файл наложения устройства config.xml:

  <!-- Whether to show Fold lock behavior setting feature in Settings app -->
  <bool name="config_fold_lock_behavior">true</bool>

Подробная информация о реализации

Поведение блокировки при складывании контролируется настройкой и несколькими классами серверной части.

Настройки и интерфейс

Значение параметра FOLD_LOCK_BEHAVIOR сохраняется в виде строки, которая соответствует выбору пользователя в разделе Настройки > Экран > Использовать приложения при складывании:

Значение параметра завышено с display_settings.xml. Интерфейс страницы настроек реализован во фрагменте FoldLockBehaviorSettings, а настройками управляет FoldLockBehaviorPreferenceController.

Внутренняя логика

Когда устройство сложено, LogicalDisplayMapper и PowerManager управляют его поведением следующим образом:

  1. LogicalDisplayMapper считывает значение настройки FOLD_LOCK_BEHAVIOR с помощью FoldSettingProvider.
  2. В зависимости от значения параметра:
    • Если задано значение stay_awake_on_fold_key, устройство не переходит в спящий режим.
    • Если значение равно selective_stay_awake_key или sleep_on_fold_key, LogicalDisplayMapper отправляет сигнал #goToSleep в PowerManager.
      • Для selective_stay_awake_key сигнал #goToSleep включает флаг PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP. В результате на устройстве будет показываться экран блокировки без необходимости аутентификации.
      • Для sleep_on_fold_key сигнал #goToSleep отправляется без этого флага, из-за чего устройство блокируется.