Pantalla bloqueada

La implementación predeterminada del AOSP de la pantalla de bloqueo con opciones para desbloquearla (keyguard) 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 su bloqueo de pantalla 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 hay una política o un control integrados sobre qué contenido se debe mostrar u 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 explícitamente la opción para mostrarse sobre 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 de bloqueo es global para todas las pantallas. Al igual que con cualquier implementación de dispositivo, debe ser obvio para el usuario cuando un dispositivo está bloqueado (o desbloqueado). Por ejemplo, presionar un botón de encendido suele bloquear un dispositivo móvil. El botón de encendido también debe bloquear todas las pantallas internas y externas.

Como la ventana de bloqueo es propiedad de SystemUI, no se colocará en pantallas privadas. Los propietarios de las pantallas privadas son responsables de ocultar las ventanas y proteger el contenido cuando se bloquea un dispositivo. 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 cambios 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 si tienen 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 se bloquea un dispositivo.