Màn hình khoá

Cách triển khai mặc định của AOSP cho Màn hình khoá với các tính năng để mở khoá (khoá phím) chỉ xuất hiện trên màn hình chính. Trong Android 9 (và 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 sang tất cả cá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 yêu cầu bảo mật cơ bản. Khi thiết bị bị khoá, thông tin phải được che giấu một cách an toàn trên mọi màn hình. Không có chính sách tích hợp hoặc chế độ kiểm soát nào về nội dung sẽ hiển thị hoặc bị ẩ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ác 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ị rõ ràng ở đầu Màn hình khoá bằng cách sử dụng phương thức R.attr.showWhenLocked hoặc Activity.setShowWhenLocked(). Nếu không, có khả năng cao thông tin sẽ bị rò rỉ từ màn hình công khai và màn hình riêng tư.

Mặc dù màn hình có thể được đặt ở 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 thấy rõ khi thiết bị đang khoá (hoặc đã mở khoá). Ví dụ: thao tác nhấn vào 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á. 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 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ổ Bản 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ổ khoá cho tất cả màn hình phụ. KeyguardDisplayManager cũng có 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. Điều quan trọng là bạn phải khoá ngay tất cả màn hình đã kết nối tại 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 khi có quyền truy cập thực tế vào thiết bị.

Cửa sổ khoá sẽ hiển thị 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á.