OEM 可以在可折叠设备上配置一个选项,让用户选择在将设备从解锁且展开状态折叠起来时,外屏的运行方式。
该设置位于设置 > 显示 > 折叠时继续使用应用中。 用户有以下三种选择:
- 始终:当用户折叠设备时,外屏始终会开启并保持解锁状态。
- 向上滑动以继续:当用户折叠设备时,设备会显示锁屏界面,而无需进行身份验证,除非某个应用持有唤醒锁,在这种情况下,设备会保持唤醒状态并停留在该应用中。这是默认设置。
- 永不:当用户折叠设备时,设备会锁定,外屏会关闭。
图 1. 折叠锁定行为设置。
配置折叠锁定行为设置
如需在设置中显示折叠锁定行为设置,请在设备的叠加层 config.xml 文件中填充 config_fold_lock_behavior 布尔值:
<!-- 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 fragment 中实现,偏好设置由 FoldLockBehaviorPreferenceController 管理。
后端逻辑
当设备折叠时,LogicalDisplayMapper 和 PowerManager 会按如下方式控制设备行为:
LogicalDisplayMapper使用FoldSettingProvider读取FOLD_LOCK_BEHAVIOR设置值。- 根据设置值:
- 如果值为
stay_awake_on_fold_key,则设备保持唤醒状态。 - 如果值为
selective_stay_awake_key或sleep_on_fold_key,LogicalDisplayMapper会向PowerManager发送#goToSleep信号。- 对于
selective_stay_awake_key,#goToSleep信号包含标志PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP。这会导致设备显示锁屏界面,而无需进行身份验证。 - 对于
sleep_on_fold_key,系统会发送不带此标志的#goToSleep信号,导致设备锁定。
- 对于
- 如果值为