Ekran blokady

Domyślna implementacja ekranu blokady przez AOSP z funkcjami odblokowania ekranu jest widoczna 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 jest prosty i nie umożliwia odblokowania ekranu z ekranów dodatkowych.

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 przez zmianę widoczności.

Implementacja

Okno blokady na dodatkowych ekranach jest implementowane jako okno PrezentacjaKeyguardDisplayManager. W Androidzie 10 zmieniono KeyguardDisplayManager#mPresentations na tablicę zawierającą wszystkie okna blokady na wszystkich ekranach dodatkowych. KeyguardDisplayManager ma również detektor zmian wyświetlania, który reaguje na zmiany na dostępnych wyświetlaczach i zabezpiecza wszystkie ekrany. Ważne jest, aby w każdej chwili wszystkie połączone wyświetlacze były natychmiast blokowane, 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.