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.