Configuração de comportamento de bloqueio de dobra

Os OEMs podem configurar uma opção em dispositivos dobráveis que permite aos usuários escolher como a tela externa se comporta quando eles dobram o dispositivo de um estado desbloqueado e aberto.

A configuração está em Configurações > Tela > Continuar usando apps na tela dobrada. O usuário tem as seguintes três opções:

  • Sempre:quando o usuário dobra o dispositivo, o display frontal sempre é ativado e permanece desbloqueado.
  • Deslize para cima para continuar:quando o usuário dobra o dispositivo, ele mostra o bloqueio de tela sem exigir autenticação, a menos que um app esteja mantendo um wakelock, nesse caso, o dispositivo permanece ativo no app. Essa é a configuração padrão.
  • Nunca:quando o usuário dobra o dispositivo, ele é bloqueado e o display frontal é desativado.

Página de configuração de comportamento de bloqueio de dobra

Figura 1. Configuração de comportamento de bloqueio de dobra.

Configurar a opção de comportamento de bloqueio de dobra

Para mostrar a configuração de comportamento de bloqueio de dobra em Configurações, preencha o booleano config_fold_lock_behavior no arquivo de sobreposição config.xml do dispositivo:

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

Detalhes da implementação

O comportamento de bloqueio de dobra é controlado por uma configuração e várias classes de back-end.

Configuração e interface

O valor da configuração FOLD_LOCK_BEHAVIOR é mantido como uma string, que corresponde à seleção do usuário em Configurações > Tela > Continuar usando apps com a tela dobrada:

A configuração é extraída de display_settings.xml. A interface da página de configurações é implementada no fragmento FoldLockBehaviorSettings, e a preferência é gerenciada por FoldLockBehaviorPreferenceController.

Lógica de back-end

Quando o dispositivo está dobrado, LogicalDisplayMapper e PowerManager controlam o comportamento do dispositivo da seguinte maneira:

  1. LogicalDisplayMapper lê o valor da configuração FOLD_LOCK_BEHAVIOR usando FoldSettingProvider.
  2. Com base no valor da configuração:
    • Se o valor for stay_awake_on_fold_key, o dispositivo vai permanecer ativo.
    • Se o valor for selective_stay_awake_key ou sleep_on_fold_key, LogicalDisplayMapper enviará um sinal #goToSleep para PowerManager.
      • Para selective_stay_awake_key, o indicador #goToSleep inclui a flag PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP. Isso faz com que o dispositivo mostre a tela de bloqueio sem exigir autenticação.
      • Para sleep_on_fold_key, o sinal #goToSleep é enviado sem essa flag, fazendo com que o dispositivo seja bloqueado.