Tela de bloqueio

A implementação padrão do AOSP da tela de bloqueio com recursos para desbloqueá-la (proteção de teclado) aparece apenas na tela principal. No Android 9 (e inferior), as telas secundárias suportavam uma única janela de bloqueio em um único monitor externo. No Android 10, a tela de bloqueio é expandida para todos os monitores secundários públicos. A tela de bloqueio permanece simples e não suporta o desbloqueio de telas secundárias.

Figura 1. Tela de bloqueio na tela secundária

Os fabricantes de dispositivos podem implementar sua tela de bloqueio para monitores secundários, desde que o requisito fundamental de segurança seja atendido. Quando o dispositivo está bloqueado, as informações devem ser ocultadas com segurança em todos os monitores. Não há política integrada ou controle sobre qual conteúdo deve ser mostrado ou ocultado quando o dispositivo está bloqueado. Portanto, a única maneira segura de implementar o acesso restrito é ocultar todo o conteúdo atrás da tela de bloqueio e das janelas de bloqueio. As únicas exceções são os aplicativos que optaram explicitamente por serem exibidos na parte superior da tela de bloqueio usando os R.attr.showWhenLocked ou Activity.setShowWhenLocked() . Caso contrário, há um forte potencial de vazamento de informações de exibições públicas e privadas.

Embora os monitores possam ser colocados em diferentes estados ( ON / OFF ), o estado bloqueado é global para todos os monitores. Como em qualquer implementação de dispositivo, deve ser óbvio para um usuário quando um dispositivo está bloqueado (ou desbloqueado). Por exemplo, pressionar um botão liga/desliga normalmente bloqueia um dispositivo móvel. Um botão liga/desliga também deve bloquear todas as telas internas e externas.

Como a janela de bloqueio é de propriedade do SystemUI, ela não será colocada em exibições privadas. Os proprietários das telas privadas são responsáveis ​​por ocultar as janelas e proteger o conteúdo quando um dispositivo está bloqueado. A implementação padrão do sistema apenas oculta as atividades em exibições privadas alterando a visibilidade.

Implementação

A janela de bloqueio em monitores secundários é implementada como uma janela de apresentação no KeyguardDisplayManager . O Android 10 alterou KeyguardDisplayManager#mPresentations para uma matriz que contém todas as janelas de bloqueio para todas as telas secundárias. O KeyguardDisplayManager também possui um ouvinte de alteração de exibição para responder às alterações nas exibições disponíveis e proteger todas as telas. É importante bloquear imediatamente todos os monitores conectados a qualquer momento para que os invasores não possam extrair dados do usuário, mesmo com acesso físico ao dispositivo.

A janela de bloqueio é exibida em todas as exibições secundárias públicas (consulte KeyguardDisplayManager#isKeyguardShowable() ). Os proprietários de monitores privados são responsáveis ​​por proteger o conteúdo quando um dispositivo está bloqueado.