Bloquear pantalla

La implementación predeterminada de AOSP de la pantalla de bloqueo con posibilidad de desbloquearla (bloqueo de teclado) aparece solo 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 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 hay una política o control incorporado 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 bloquear las ventanas. Las únicas excepciones son las aplicaciones que optaron explícitamente por mostrarse en la parte superior de la pantalla de bloqueo mediante los R.attr.showWhenLocked o Activity.setShowWhenLocked() . De lo contrario, existe un gran potencial para filtrar 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, debe ser obvio para un usuario cuando un dispositivo está bloqueado (o desbloqueado). Por ejemplo, al pulsar un botón de encendido normalmente se bloquea un dispositivo móvil. Un botón de encendido también debe 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 las pantallas privadas son responsables de ocultar las ventanas y proteger el contenido cuando un dispositivo está bloqueado. La implementación del sistema predeterminado solo oculta actividades en pantallas privadas al cambiar la visibilidad.

Implementación

La ventana de bloqueo en las 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 de bloqueo para todas las pantallas secundarias. KeyguardDisplayManager también tiene un detector de cambio de pantalla para responder a los cambios en las pantallas disponibles y asegurar todas las pantallas. Es importante bloquear de inmediato todas las pantallas conectadas en un momento dado para que los atacantes no puedan extraer los 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.