Производители оригинального оборудования могут настроить на складных устройствах опцию, которая позволит пользователям выбирать, как будет вести себя внешний экран при складывании устройства из разблокированного в развернутое состояние.
Этот параметр находится в разделе «Настройки» > «Дисплей» > «Продолжить использование приложений на сложенном устройстве» . Пользователю доступны следующие три варианта:
- Всегда: когда пользователь складывает устройство, передний дисплей всегда включается и остается разблокированным.
- Проведите пальцем вверх, чтобы продолжить: когда пользователь складывает устройство, блокировка клавиатуры отображается без необходимости аутентификации, если только приложение не блокирует экран. В этом случае устройство не активирует приложение. Это настройка по умолчанию.
- Никогда: Когда пользователь складывает устройство, оно блокируется, а передний дисплей отключается.
Рисунок 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
сохраняется в виде строки, которая соответствует выбору пользователя в разделе «Настройки» > «Дисплей» > «Продолжить использование приложений при закрытии экрана» :
- Всегда:
stay_awake_on_fold_key
- Проведите пальцем вверх, чтобы продолжить:
selective_stay_awake_key
- Никогда:
sleep_on_fold_key
Настройка берётся из display_settings.xml
. Пользовательский интерфейс страницы настроек реализован во фрагменте FoldLockBehaviorSettings
, а управление настройкой осуществляется с помощью FoldLockBehaviorPreferenceController
.
Внутренняя логика
Когда устройство сложено, LogicalDisplayMapper
и PowerManager
управляют поведением устройства следующим образом:
-
LogicalDisplayMapper
считывает значение настройкиFOLD_LOCK_BEHAVIOR
с помощьюFoldSettingProvider
. - На основе значения настройки:
- Если значение равно
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
отправляется без этого флага, что приводит к блокировке устройства.
- Для
- Если значение равно