Реализация экрана блокировки AOSP по умолчанию с возможностью его разблокировки (keyguard) отображается только на основном дисплее. В Android 9 (и ниже) вторичные экраны поддерживали одно окно блокировки на одном внешнем дисплее. В Android 10 экран блокировки расширен на все общедоступные вторичные дисплеи. Экран блокировки остается простым и не поддерживает разблокировку с вторичных экранов.
Рисунок 1. Экран блокировки на дополнительном дисплее
Производители устройств могут реализовать свой экран блокировки для дополнительных дисплеев при условии соблюдения основных требований безопасности. Когда устройство заблокировано, информация должна быть надежно скрыта на всех дисплеях. Не существует встроенной политики или контроля над тем, какой контент должен быть показан или скрыт, когда устройство заблокировано. Поэтому единственный безопасный способ реализации ограниченного доступа — скрыть весь контент за экраном блокировки и окнами блокировки. Единственным исключением являются приложения, которые явно согласились на отображение поверх экрана блокировки с помощью методов R.attr.showWhenLocked
или Activity.setShowWhenLocked()
. В противном случае существует большая вероятность утечки информации с публичных и частных дисплеев.
Хотя дисплеи можно переводить в разные состояния ( ON
/ OFF
), заблокированное состояние является глобальным для всех дисплеев. Как и в случае с любой реализацией устройства, пользователю должно быть очевидно, когда устройство заблокировано (или разблокировано). Например, нажатие кнопки питания обычно блокирует мобильное устройство. Кнопка питания также должна блокировать все внутренние и внешние экраны.
Поскольку окно блокировки принадлежит SystemUI, оно не будет размещено на частных дисплеях. Владельцы частных дисплеев несут ответственность за скрытие окон и защиту контента, когда устройство заблокировано. Реализация системы по умолчанию скрывает только действия на частных дисплеях, изменяя видимость.
Выполнение
Блокирующее окно на дополнительных дисплеях реализовано как окно презентации в KeyguardDisplayManager
. Android 10 изменил KeyguardDisplayManager#mPresentations
на массив, который содержит все блокирующие окна для всех дополнительных экранов. KeyguardDisplayManager
также имеет прослушиватель изменений дисплея для реагирования на изменения доступных дисплеев и защиты всех экранов. Важно немедленно блокировать все подключенные дисплеи в любой момент времени, чтобы злоумышленники не могли извлечь пользовательские данные даже при физическом доступе к устройству.
Окно блокировки отображается на всех общедоступных вторичных дисплеях (см. KeyguardDisplayManager#isKeyguardShowable()
). Владельцы частных дисплеев несут ответственность за защиту контента, когда устройство заблокировано.