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

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

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

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

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

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

Выполнение

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

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