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