Экран блокировки

В стандартной реализации AOSP экран блокировки с возможностями его разблокировки (клавишная блокировка) отображается только на основном дисплее. В Android 9 (и более ранних версиях) дополнительные экраны поддерживали одно окно блокировки на одном внешнем дисплее. В Android 10 экран блокировки расширен на все общедоступные дополнительные дисплеи. Экран блокировки остается простым и не поддерживает разблокировку с дополнительных экранов.

Рисунок 1. Экран блокировки на дополнительном дисплее.

Производители устройств могут реализовать свой экран блокировки для дополнительных дисплеев при условии выполнения основных требований безопасности. Когда устройство заблокировано, информация должна быть надежно скрыта на всех дисплеях. Встроенной политики или механизма управления тем, какой контент должен отображаться или скрываться при блокировке устройства, нет. Поэтому единственный безопасный способ реализации ограниченного доступа — это скрыть весь контент за экраном блокировки и окнами блокировки. Исключение составляют только приложения, которые явно дали согласие на отображение поверх экрана блокировки с помощью методов R.attr.showWhenLocked или Activity.setShowWhenLocked() . В противном случае существует высокая вероятность утечки информации с общедоступных и частных дисплеев.

Хотя дисплеи могут находиться в разных состояниях ( ON / OFF ), заблокированное состояние является глобальным для всех дисплеев. Как и в случае с любым устройством, пользователю должно быть очевидно, когда устройство заблокировано (или разблокировано). Например, нажатие кнопки питания обычно блокирует мобильное устройство. Кнопка питания также должна блокировать все внутренние и внешние экраны.

Поскольку окно блокировки принадлежит SystemUI, оно не будет отображаться на частных экранах. Владельцы частных экранов несут ответственность за скрытие окон и защиту контента при блокировке устройства. В стандартной реализации системы скрытие действий на частных экранах осуществляется только путем изменения видимости.

Выполнение

Блокировка окна на дополнительных дисплеях реализована в виде окна презентации в KeyguardDisplayManager . В Android 10 KeyguardDisplayManager#mPresentations был изменен на массив, содержащий все окна блокировки для всех дополнительных экранов. KeyguardDisplayManager также имеет обработчик событий изменения дисплея для реагирования на изменения доступных дисплеев и обеспечения безопасности всех экранов. Важно немедленно блокировать все подключенные дисплеи в любой момент времени, чтобы злоумышленники не могли получить доступ к пользовательским данным даже при физическом доступе к устройству.

Окно блокировки отображается на всех общедоступных дополнительных дисплеях (см. KeyguardDisplayManager#isKeyguardShowable() ). Владельцы частных дисплеев несут ответственность за безопасность контента при блокировке устройства.