Triển khai chế độ ánh sáng đêm

Nghiên cứu cho thấy ánh sáng xanh từ màn hình có thể có tác động tiêu cực đến ngủ. Android 7.1.1 giới thiệu một tính năng có tên là Ánh sáng đêm, giúp giảm lượng ánh sáng màu xanh dương do màn hình thiết bị phát ra để phù hợp hơn với môi trường tự nhiên dựa trên thời gian trong ngày và vị trí của người dùng. Android 8.0 đã bổ sung một tính năng giúp người dùng có nhiều quyền kiểm soát hơn đối với cường độ của hiệu ứng Ánh sáng đêm. Android 10 ra mắt Dịch vụ hệ thống COLOR_DISPLAY_SERVICE, với một API hệ thống để mang lại cho hệ thống, Cài đặt và Giao diện người dùng hệ thống nhiều quyền kiểm soát hơn đối với tất cả màu sắc biến đổi, bao gồm cả Ánh sáng đêm.

Chế độ Ánh sáng đêm cần có Phần cứng Triển khai HAL 2.0 (HWC 2) của trình soạn thảo có thể áp dụng ma trận được truyền đến setColorTransform để phủ màu mà không ảnh hưởng đến nguồn điện, hiệu suất và khả năng tương thích của ứng dụng.

Triển khai

Nhà sản xuất thiết bị có thể bật chế độ triển khai mặc định của tính năng này bằng cách bằng cách sử dụng cờ sau được xác định trong frameworks/base/core/res/res/values/config.xml

 <!-- Control whether Night display is available. This should only be enabled
      on devices with HWC 2 color transform support. -->
 <bool name="config_nightDisplayAvailable">false</bool>
 <!-- Default mode to control how Night display is automatically activated.
      One of the following values (see NightDisplayController.java):
          0 - AUTO_MODE_DISABLED
          1 - AUTO_MODE_CUSTOM
          2 - AUTO_MODE_TWILIGHT
 -->
 <integer name="config_defaultNightDisplayAutoMode">0</integer>
 <!-- Default time when Night display is automatically activated.
      Represented as milliseconds from midnight (e.g. 79200000 == 10pm). -->
 <integer name="config_defaultNightDisplayCustomStartTime">79200000</integer>
 <!-- Default time when Night display is automatically deactivated.
      Represented as milliseconds from midnight (e.g. 21600000 == 6am). -->
 <integer name="config_defaultNightDisplayCustomEndTime">21600000</integer>

 <!-- Minimum color temperature, in Kelvin, supported by Night display. -->
 <integer name="config_nightDisplayColorTemperatureMin">2596</integer>
 <!-- Default color temperature, in Kelvin, to tint the screen when Night display is
      activated. -->
 <integer name="config_nightDisplayColorTemperatureDefault">2850</integer>
 <!-- Maximum color temperature, in Kelvin, supported by Night display. -->
 <integer name="config_nightDisplayColorTemperatureMax">4082</integer>

Mã này được chia thành khung, dịch vụ hệ thống, Giao diện người dùng hệ thống và Cài đặt. Chiến lược phát hành đĩa đơn chức năng cốt lõi do ColorDisplayManager kiểm soát (được hỗ trợ bởi ColorDisplayService).

Các nhà sản xuất thiết bị nên tuỳ chỉnh dải màu dựa trên các đặc điểm của bảng điều khiển hiển thị của thiết bị, bao gồm điểm trắng, gam màu và màu mong muốn. Bạn có thể thay đổi đoạn đường màu sắc mà không cần thay đổi cách triển khai cơ sở bằng cách sử dụng lớp phủ cấu hình. Cấu hình này được biểu thị dưới dạng phương trình bậc hai cho mỗi màu đỏ, xanh lục và xanh dương, có dạng vres = vat2 + vbt + vy-int trong đó t là nhiệt độ đầu vào, tính bằng độ K, như được chỉ định trong khoảng giữa config_nightDisplayColorTemperatureMinconfig_nightDisplayColorTemperatureMax (như được mô tả trong phần trước) và va, vb và vy-int là hệ số a, hệ số b và giao điểm y tương ứng với đường cong sơ cấp, như trình bày dưới đây.

    <string-array name="config_nightDisplayColorTemperatureCoefficientsNative">
        <!-- R a-coefficient --> <item>0.0</item>
        <!-- R b-coefficient --> <item>0.0</item>
        <!-- R y-intercept --> <item>1.0</item>
        <!-- G a-coefficient --> <item>-0.00000000962353339</item>
        <!-- G b-coefficient --> <item>0.000153045476</item>
        <!-- G y-intercept --> <item>0.390782778</item>
        <!-- B a-coefficient --> <item>-0.0000000189359041</item>
        <!-- B b-coefficient --> <item>0.000302412211</item>
        <!-- B y-intercept --> <item>-0.198650895</item>
    </string-array>

    <string-array name="config_nightDisplayColorTemperatureCoefficients">
        <!-- R a-coefficient --> <item>0.0</item>
        <!-- R b-coefficient --> <item>0.0</item>
        <!-- R y-intercept --> <item>1.0</item>
        <!-- G a-coefficient --> <item>-0.00000000962353339</item>
        <!-- G b-coefficient --> <item>0.000153045476</item>
        <!-- G y-intercept --> <item>0.390782778</item>
        <!-- B a-coefficient --> <item>-0.0000000189359041</item>
        <!-- B b-coefficient --> <item>0.000302412211</item>
        <!-- B y-intercept --> <item>-0.198650895</item>
    </string-array>

Các tính năng giao diện người dùng

Vì Ánh sáng đêm là một tính năng dành cho người dùng nên người dùng cần phải điều khiển được nó. Có triển khai đầy đủ các cài đặt trong Nguồn mở Android Dự án (AOSP) gói/ứng dụng/Cài đặt dự án mà nhà sản xuất thiết bị có thể tham khảo cho Cài đặt của họ trong quá trình triển khai. Trình triển khai phải xử lý Settings.ACTION_NIGHT_DISPLAY_SETTINGS ý định hiển thị chế độ cài đặt này.

Cài đặt

Các cài đặt cho Ánh sáng đêm nằm trong Cài đặt > Hiển thị > Buổi đêm Nhẹ. Từ đó, người dùng có thể tìm hiểu về chế độ Ánh sáng đêm, đặt lịch cho chế độ này, rồi bật hoặc tắt tính năng này.

  • Tự động bật
    • Không bao giờ: Chế độ Ánh sáng đêm sẽ không bao giờ tự động bật và phải được kích hoạt bằng nút bật/tắt Bật/Tắt thủ công.
    • Lịch biểu tùy chỉnh: Chế độ Ánh sáng đêm bật vào một khoảng thời gian nhất định Thời gian bắt đầu [mặc định: 10:30 tối] và tắt vào một thời điểm được chỉ định Thời gian kết thúc [mặc định: 6:30 sáng].
    • Tối đến sáng: Chế độ ánh sáng đêm bật lúc hoàng hôn và tắt lúc mặt trời mọc. Thời gian mặt trời mọc và mặt trời lặn phụ thuộc vào vị trí thiết bị và thời gian trong năm.
  • Bật/Tắt: Nút bật/tắt kiểm soát trạng thái hiện tại của Chế độ ban đêm Sáng. Trạng thái này tuân theo các quy tắc tự động hiện có. Ví dụ: nếu Ban đêm Đèn được bật lúc 5:30 chiều. (trước khi quy tắc tự động bật lúc 22:30), Chế độ Ánh sáng đêm vẫn sẽ tắt lúc 6:30 sáng Nếu là chế độ Ban đêm Đèn được tắt lúc 5:30 sáng (trước khi tắt lúc 6:30 sáng), nó sẽ vẫn bật lúc 10:30 tối.
  • Cường độ: Thanh tìm kiếm kiểm soát mức độ phủ màu bằng cách trượt từ ấm sang làm mát. Thanh tua có thể sẽ tắt khi chế độ Ánh sáng đêm không được kích hoạt.
  • Văn bản cung cấp thông tin: Hướng dẫn người dùng chức năng của chế độ Ánh sáng đêm và lý do.

Chế độ cài đặt có điều kiện

Hiển thị ở đầu Cài đặt khi chế độ Ánh sáng đêm bật.

Ô Cài đặt nhanh

Ô Cài đặt nhanh hoạt động giống hệt như ô Bật / Tắt bật/tắt trong phần Cài đặt > Hiển thị > Ánh sáng đêm.