Việc triển khai Màn hình khóa mặc định của AOSP với khả năng mở khóa (bộ bảo vệ bàn phím) chỉ xuất hiện trên màn hình chính. Trong Android 9 (và phiên bản thấp hơn), màn hình phụ hỗ trợ một cửa sổ khóa duy nhất trên một màn hình bên ngoài. Trong Android 10, Màn hình khóa được mở rộng ra tất cả các màn hình phụ công cộng. Màn hình Khóa vẫn đơn giản và không hỗ trợ mở khóa từ màn hình phụ.
Hình 1. Màn hình khóa trên màn hình phụ
Các nhà sản xuất thiết bị có thể triển khai Màn hình khóa của họ cho màn hình phụ, miễn là đáp ứng được yêu cầu bảo mật cơ bản. Khi thiết bị bị khóa, thông tin phải được ẩn an toàn trên tất cả các màn hình. Không có chính sách tích hợp hoặc quyền kiểm soát nào đối với nội dung nào sẽ được hiển thị hoặc ẩn khi thiết bị bị khóa. Do đó, cách an toàn duy nhất để triển khai quyền truy cập hạn chế là ẩn tất cả nội dung đằng sau Màn hình khóa và các cửa sổ khóa. Ngoại lệ duy nhất là các ứng dụng đã chọn tham gia một cách rõ ràng để hiển thị ở đầu Màn hình khóa bằng phương thức R.attr.showWhenLocked
hoặc Activity.setShowWhenLocked()
. Nếu không, có khả năng rò rỉ thông tin từ các màn hình công cộng và riêng tư.
Mặc dù màn hình có thể được đặt ở các trạng thái khác nhau ( ON
/ OFF
), trạng thái khóa là chung cho tất cả các màn hình. Giống như bất kỳ hoạt động triển khai thiết bị nào, người dùng phải thấy rõ khi thiết bị bị khóa (hoặc mở khóa). Ví dụ: nhấn nút nguồn thường sẽ khóa thiết bị di động. Nút nguồn cũng sẽ khóa tất cả màn hình bên trong và bên ngoài.
Vì cửa sổ khóa thuộc quyền sở hữu của SystemUI nên nó sẽ không được đặt trên màn hình riêng tư. Chủ sở hữu màn hình riêng có trách nhiệm ẩn các cửa sổ và bảo vệ nội dung khi thiết bị bị khóa. Việc triển khai hệ thống mặc định chỉ ẩn các hoạt động trên màn hình riêng tư bằng cách thay đổi mức độ hiển thị.
Thực hiện
Cửa sổ khóa trên màn hình phụ được triển khai dưới dạng cửa sổ Trình bày trong KeyguardDisplayManager
. Android 10 đã thay đổi KeyguardDisplayManager#mPresentations
thành một mảng chứa tất cả các cửa sổ khóa cho tất cả màn hình phụ. KeyguardDisplayManager
cũng có trình xử lý thay đổi hiển thị để phản hồi các thay đổi đối với các màn hình có sẵn và bảo mật tất cả các màn hình. Điều quan trọng là phải khóa ngay tất cả các màn hình được kết nối vào bất kỳ thời điểm nào để kẻ tấn công không thể trích xuất dữ liệu người dùng ngay cả khi có quyền truy cập vật lý vào thiết bị.
Cửa sổ khóa được hiển thị trên tất cả các màn hình phụ công cộng (xem KeyguardDisplayManager#isKeyguardShowable()
). Chủ sở hữu màn hình riêng tư có trách nhiệm bảo mật nội dung khi thiết bị bị khóa.