La implementación predeterminada de AOSP de la pantalla de bloqueo con posibilidades para desbloquearla (protección del teclado) aparece solo en la pantalla principal. En Android 9 (y versiones anteriores), las pantallas secundarias admitían una única ventana de bloqueo en una única pantalla externa. En Android 10, la pantalla de bloqueo se expande a todas las pantallas secundarias públicas. La pantalla de bloqueo sigue siendo simple y no admite el desbloqueo desde pantallas secundarias.
Figura 1. Pantalla de bloqueo en la pantalla secundaria
Los fabricantes de dispositivos pueden implementar su pantalla de bloqueo para pantallas secundarias, siempre que se cumpla el requisito de seguridad fundamental. Cuando el dispositivo está bloqueado, la información debe ocultarse de forma segura en todas las pantallas. No existe una política integrada ni control sobre qué contenido debe mostrarse u ocultarse cuando el dispositivo está bloqueado. Por lo tanto, la única forma segura de implementar el acceso restringido es ocultar todo el contenido detrás de la pantalla de bloqueo y bloquear las ventanas. Las únicas excepciones son las aplicaciones que han optado explícitamente por aparecer en la parte superior de la pantalla de bloqueo utilizando los métodos R.attr.showWhenLocked
o Activity.setShowWhenLocked()
. De lo contrario, existe una gran posibilidad de que se filtre información de pantallas públicas y privadas.
Si bien las pantallas se pueden colocar en diferentes estados ( ON
/ OFF
), el estado de bloqueo es global para todas las pantallas. Al igual que con cualquier implementación de dispositivo, el usuario debería tener claro cuándo un dispositivo está bloqueado (o desbloqueado). Por ejemplo, presionar un botón de encendido normalmente bloquea un dispositivo móvil. Un botón de encendido también debería bloquear todas las pantallas internas y externas.
Debido a que la ventana de bloqueo es propiedad de SystemUI, no se colocará en pantallas privadas. Los propietarios de pantallas privadas son responsables de ocultar las ventanas y proteger el contenido cuando un dispositivo está bloqueado. La implementación predeterminada del sistema solo oculta actividades en pantallas privadas cambiando la visibilidad.
Implementación
La ventana de bloqueo en pantallas secundarias se implementa como una ventana de presentación en KeyguardDisplayManager
. Android 10 cambió KeyguardDisplayManager#mPresentations
a una matriz que contiene todas las ventanas bloqueadas para todas las pantallas secundarias. KeyguardDisplayManager
también tiene un detector de cambios de pantalla para responder a los cambios en las pantallas disponibles y proteger todas las pantallas. Es importante bloquear inmediatamente todas las pantallas conectadas en cualquier momento para que los atacantes no puedan extraer datos del usuario incluso con acceso físico al dispositivo.
La ventana de bloqueo se muestra en todas las pantallas secundarias públicas (consulte KeyguardDisplayManager#isKeyguardShowable()
). Los propietarios de pantallas privadas son responsables de proteger el contenido cuando un dispositivo está bloqueado.