折叠锁定行为设置

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 设置的值会以字符串形式保留,对应于用户在设置 > 显示 > 折叠时继续使用应用中的选择:

该设置是从 display_settings.xml 扩充的。设置页面界面在 FoldLockBehaviorSettings fragment 中实现,偏好设置由 FoldLockBehaviorPreferenceController 管理。

后端逻辑

当设备折叠时,LogicalDisplayMapperPowerManager 会按如下方式控制设备行为:

  1. LogicalDisplayMapper 使用 FoldSettingProvider 读取 FOLD_LOCK_BEHAVIOR 设置值。
  2. 根据设置值:
    • 如果值为 stay_awake_on_fold_key,则设备保持唤醒状态。
    • 如果值为 selective_stay_awake_keysleep_on_fold_keyLogicalDisplayMapper 会向 PowerManager 发送 #goToSleep 信号。
      • 对于 selective_stay_awake_key#goToSleep 信号包含标志 PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP。这会导致设备显示锁屏界面,而无需进行身份验证。
      • 对于 sleep_on_fold_key,系统会发送不带此标志的 #goToSleep 信号,导致设备锁定。