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 versões anteriores), 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 desbloqueio em telas secundárias.
Figura 1. Tela de bloqueio no monitor secundário
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 de forma segura em todos os monitores. Não há política ou controle integrado 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 métodos R.attr.showWhenLocked
ou Activity.setShowWhenLocked()
. Caso contrário, existe um forte potencial de fuga 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 acontece com qualquer implementação de dispositivo, deve ser óbvio para o 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 pertence ao SystemUI, ela não será colocada em exibições privadas. Os proprietários dos monitores privados 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 oculta apenas 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 de todas as telas secundárias. 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 todos os monitores secundários públicos (consulte KeyguardDisplayManager#isKeyguardShowable()
). Os proprietários de monitores privados são responsáveis por proteger o conteúdo quando um dispositivo está bloqueado.