La implementación predeterminada de AOSP de la pantalla de bloqueo con posibilidades de desbloqueo (bloqueo de teclado) solo aparece en la pantalla principal. En Android 9 (y versiones anteriores), las pantallas secundarias admitían una sola ventana de bloqueo en una sola 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 la pantalla de bloqueo para las 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 hay una política ni un control integrados sobre el contenido que se debe mostrar o ocultar 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 las ventanas de bloqueo. Las únicas excepciones son las apps que habilitaron de forma explícita que se muestren en la parte superior de la pantalla de bloqueo con los métodos R.attr.showWhenLocked
o Activity.setShowWhenLocked()
.
De lo contrario, existe un gran potencial de filtración de información de pantallas públicas y privadas.
Si bien las pantallas se pueden colocar en diferentes estados (ON
/OFF
), el estado bloqueado es global para todas las pantallas. Al igual que con cualquier implementación de dispositivo, para el usuario debe ser obvio cuándo un dispositivo está bloqueado (o desbloqueado). Por ejemplo, cuando se presiona un botón de encendido, se suele bloquear un dispositivo móvil. Un botón de encendido también debe bloquear todas las pantallas internas y externas.
Como SystemUI es propietario de la ventana de bloqueo, no se colocará en pantallas privadas. Los propietarios de las pantallas privadas son responsables de ocultar las ventanas y proteger el contenido cuando el dispositivo está bloqueado. La implementación predeterminada del sistema solo oculta las 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 un array que contiene todas las ventanas de bloqueo para todas las pantallas secundarias. KeyguardDisplayManager
también tiene un objeto de escucha de cambio de pantalla para responder a los cambios en las pantallas disponibles y proteger todas las pantallas. Es importante bloquear de inmediato 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 (consulta KeyguardDisplayManager#isKeyguardShowable()
). Los propietarios de pantallas privadas son responsables de proteger el contenido cuando un dispositivo está bloqueado.