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