Domyślna implementacja ekranu blokady w AOSP z możliwością odblokowania (klawiatura) jest wyświetlana tylko na ekranie głównym. W Androidzie 9 (i starszych) ekrany dodatkowe obsługiwały okno blokady na jednym zewnętrznym wyświetlaczu. 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 ekranie dodatkowym
Producenci urządzeń mogą stosować ekran blokady na dodatkowych wyświetlaczach, o ile jest to zgodne z podstawowymi wymaganiami dotyczącymi bezpieczeństwa. Gdy urządzenie jest zablokowane, informacje powinny być bezpiecznie ukryte na wszystkich wyświetlaczach. Nie ma żadnych wbudowanych zasad ani opcji kontroli, które treści powinny być wyświetlane lub ukryte, gdy urządzenie jest zablokowane. Dlatego jedynym bezpiecznym sposobem wdrożenia dostępu ograniczonego jest ukrycie wszystkich treści za ekranem blokady i oknami blokady. Jedynymi wyjątkami są aplikacje, które zostały wyraźnie skonfigurowane do wyświetlania na ekranie blokady za pomocą metod R.attr.showWhenLocked
lub Activity.setShowWhenLocked()
.
W przeciwnym razie istnieje duże prawdopodobieństwo wycieku informacji z publicznych i prywatnych wyświetlaczy.
Wyświetlacze mogą być ustawiane w różnych stanach (ON
/OFF
), ale stan zablokowany jest wspólny dla wszystkich wyświetlaczy. Podobnie jak w przypadku innych implementacji, użytkownik powinien wyraźnie widzieć, czy urządzenie jest zablokowane (czy odblokowane). Na przykład naciśnięcie przycisku zasilania zazwyczaj powoduje zablokowanie urządzenia mobilnego. Przycisk zasilania powinien też blokować wszystkie ekrany wewnętrzne i zewnętrzne.
Okno blokady jest własnością SystemUI, więc nie będzie wyświetlane na ekranach prywatnych. Właściciele prywatnych wyświetlaczy są odpowiedzialni za ukrywanie okien i ochranianie treści, gdy urządzenie jest zablokowane. Domyślna implementacja systemu tylko ukrywa aktywności na wyświetlaczach prywatnych, zmieniając ich widoczność.
Implementacja
Okno blokady na dodatkowych ekranach jest implementowane jako okno Prezentacja w KeyguardDisplayManager
. W Androidzie 10 zmieniono KeyguardDisplayManager#mPresentations
na tablicę zawierającą wszystkie okna blokady dla wszystkich ekranów dodatkowych. KeyguardDisplayManager
zawiera też listenera zmiany wyświetlacza, który reaguje na zmiany dostępnych wyświetlaczy i chroni wszystkie ekrany. Ważne jest, aby w każdej chwili od razu blokować wszystkie połączone wyświetlacze, aby atakujący nie mogli pobrać danych użytkownika, nawet jeśli mają dostęp fizyczny do urządzenia.
Okno blokowania wyświetla się na wszystkich publicznych wyświetlaczach dodatkowych (patrz: KeyguardDisplayManager#isKeyguardShowable()
). Właściciele wyświetlaczy prywatnych są odpowiedzialni za zabezpieczenie treści, gdy urządzenie jest zablokowane.