Настройка поведения блокировки сгиба

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

Этот параметр находится в разделе «Настройки» > «Дисплей» > «Продолжить использование приложений на сложенном устройстве» . Пользователю доступны следующие три варианта:

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

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

Рисунок 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 отправляется без этого флага, что приводит к блокировке устройства.