Khóa màn hình

Việc triển khai mặc định của AOSP đối với Màn hình khoá với các thành phần hỗ trợ mở khoá (keyguard) chỉ xuất hiện trên màn hình chính. Trong Android 9 (và các phiên bản thấp hơn), màn hình phụ hỗ trợ một cửa sổ khoá trên một màn hình ngoài. Trong Android 10, Màn hình khoá được mở rộng cho tất cả màn hình phụ công khai. Màn hình khoá vẫn đơn giản và không hỗ trợ mở khoá từ màn hình phụ.

Hình 1. Màn hình khoá trên màn hình phụ

Nhà sản xuất thiết bị có thể triển khai Màn hình khoá 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ị khoá, thông tin phải được ẩn một cách an toàn trên tất cả màn hình. Không có chính sách hoặc chế độ kiểm soát tích hợp nào về nội dung cần hiển thị hoặc ẩn khi thiết bị bị khoá. Do đó, cách duy nhất để triển khai quyền truy cập bị hạn chế một cách an toàn là ẩn tất cả nội dung sau Màn hình khoá và cửa sổ khoá. Các trường hợp ngoại lệ duy nhất là những ứng dụng đã chọn hiển thị trên Màn hình khoá bằng các phương thức R.attr.showWhenLocked hoặc Activity.setShowWhenLocked(). Nếu không, có khả năng cao là thông tin sẽ bị rò rỉ từ màn hình công khai và riêng tư.

Mặc dù màn hình có thể ở nhiều trạng thái (ON/OFF), nhưng trạng thái khoá là trạng thái chung cho tất cả màn hình. Giống như mọi cách triển khai thiết bị, người dùng phải biết rõ khi nào thiết bị bị khoá (hoặc mở khoá). Ví dụ: việc nhấn nút nguồn thường sẽ khoá thiết bị di động. Nút nguồn cũng phải khoá tất cả màn hình bên trong và bên ngoài.

Vì cửa sổ khoá thuộc sở hữu của SystemUI, nên cửa sổ này sẽ không được đặt trên màn hình riêng tư. Chủ sở hữu màn hình riêng tư có trách nhiệm ẩn cửa sổ và bảo vệ nội dung khi thiết bị bị khoá. Cách 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 chế độ hiển thị.

Triển khai

Cửa sổ khoá 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ửa sổ khoá cho tất cả màn hình phụ. KeyguardDisplayManager cũng có một trình nghe thay đổi màn hình để phản hồi các thay đổi đối với màn hình hiện có và bảo mật tất cả màn hình. Bạn cần khoá ngay tất cả màn hình được kết nối vào bất kỳ lúc 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ổ khoá xuất hiện trên tất cả màn hình phụ công khai (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ị khoá.