Ekran blokady

Domyślna implementacja ekranu blokady w AOSP z możliwością odblokowania (keyguard) pojawia się tylko na wyświetlaczu głównym. W Androidzie 9 (i starszych wersjach) ekrany dodatkowe obsługiwały jedno okno blokowania na jednym wyświetlaczu zewnętrznym. W Androidzie 10 ekran blokady jest rozszerzony na wszystkie publiczne wyświetlacze dodatkowe. Ekran blokady pozostaje prosty i nie obsługuje odblokowywania z dodatkowych ekranów.

Rysunek 1. Ekran blokady na wyświetlaczu dodatkowym

Producenci urządzeń mogą wdrażać blokadę ekranu na wyświetlaczach dodatkowych, o ile spełnione są podstawowe wymagania dotyczące bezpieczeństwa. Gdy urządzenie jest zablokowane, informacje powinny być bezpiecznie ukryte na wszystkich wyświetlaczach. Nie ma wbudowanej zasady ani kontroli nad tym, jakie treści mają być wyświetlane lub ukrywane, gdy urządzenie jest zablokowane. Dlatego jedynym bezpiecznym sposobem wdrożenia ograniczonego dostępu jest ukrycie całej zawartości za ekranem blokady i oknami blokady. Wyjątkiem są tylko aplikacje, które wyraźnie zgodziły się na wyświetlanie na ekranie blokady za pomocą metod R.attr.showWhenLocked lub Activity.setShowWhenLocked(). W przeciwnym razie istnieje duże ryzyko wycieku informacji z wyświetlaczy publicznych i prywatnych.

Wyświetlacze mogą być w różnych stanach (ON/OFF), ale stan zablokowania jest globalny dla wszystkich wyświetlaczy. Podobnie jak w przypadku każdego wdrożenia na urządzeniu, dla użytkownika powinno być oczywiste, kiedy urządzenie jest zablokowane (lub odblokowane). Na przykład naciśnięcie przycisku zasilania zwykle blokuje urządzenie mobilne. Przycisk zasilania powinien też blokować wszystkie ekrany wewnętrzne i zewnętrzne.

Okno blokady jest własnością SystemUI, więc nie będzie umieszczane na wyświetlaczach prywatnych. Właściciele wyświetlaczy prywatnych odpowiadają za ukrywanie okien i ochronę treści, gdy urządzenie jest zablokowane. Domyślna implementacja systemowa tylko ukrywa aktywności na wyświetlaczach prywatnych, zmieniając ich widoczność.

Implementacja

Okno blokady na dodatkowych ekranach jest zaimplementowane jako okno PresentationKeyguardDisplayManager. Android 10 zmienił KeyguardDisplayManager#mPresentations na tablicę, która zawiera wszystkie okna blokujące na wszystkich ekranach dodatkowych. KeyguardDisplayManager ma też odbiornik zmian wyświetlacza, który reaguje na zmiany dostępnych wyświetlaczy i zabezpiecza wszystkie ekrany. Ważne jest, aby w każdej chwili natychmiast blokować wszystkie podłączone wyświetlacze, aby atakujący nie mogli wyodrębnić danych użytkownika, nawet jeśli mają fizyczny dostęp do urządzenia.

Okno blokowania jest wyświetlane na wszystkich publicznych wyświetlaczach dodatkowych (patrz KeyguardDisplayManager#isKeyguardShowable()). Właściciele prywatnych wyświetlaczy ponoszą odpowiedzialność za zabezpieczenie treści, gdy urządzenie jest zablokowane.