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ể ảnh hưởng tiêu cực đến giấc ngủ. Android 7.1.1 đã ra mắt một tính năng có tên là Ánh sáng đêm. Tính năng này giúp giảm lượng ánh sáng xanh do màn hình thiết bị phát ra để phù hợp hơn với ánh sáng tự nhiên theo thời gian và vị trí của người dùng. Android 8.0 đã ra mắt một tính năng bổ sung giúp người dùng kiểm soát tốt hơn cường độ của hiệu ứng Ánh sáng ban đêm. Android 10 ra mắt dịch vụ hệ thống COLOR_DISPLAY_SERVICE, với một giao diện API hệ thống để cung cấp cho hệ thống, phần 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ả các phép biến đổi màu, bao gồm cả Ánh sáng ban đêm.

Đèn ngủ yêu cầu triển khai Hardware Composer HAL 2.0 (HWC 2) có thể áp dụng ma trận được truyền đến setColorTransform để thực hiện việc 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 tính năng triển khai mặc định bằng cách sử dụng các cờ sau đây đượ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ã được chia giữa khung, dịch vụ hệ thống, Giao diện người dùng hệ thống và phần Cài đặt. Chức năng cốt lõi do ColorDisplayManager kiểm soát (do ColorDisplayService hỗ trợ).

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 màn hình 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 dải màu 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, dưới dạng vres = vat2 + vbt + vy-int trong đó t là giá trị đầu vào nhiệt độ tính theo Kelvin, được chỉ định trong phạm vi giữa config_nightDisplayColorTemperatureMinconfig_nightDisplayColorTemperatureMax (như mô tả trong phần trước) và va, vb và vy-int lần lượt là hệ số a, hệ số b và giá trị chặn y cho đường cong chính đã cho, như được chỉ ra bên dưới.

    <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>

Tính năng giao diện người dùng

Vì Ánh sáng ban đêm là một tính năng dành cho người dùng, nên người dùng cần có thể kiểm soát tính năng này. Có một cách triển khai đầy đủ các chế độ cài đặt trong dự án packages/apps/Settings (gói/ứng dụng/Cài đặt) của Dự án nguồn mở Android (AOSP) mà nhà sản xuất thiết bị có thể tham khảo để triển khai Cài đặt. Người triển khai phải xử lý ý định Settings.ACTION_NIGHT_DISPLAY_SETTINGS để hiển thị chế độ cài đặt này.

Cài đặt

Bạn có thể tìm thấy chế độ cài đặt Ánh sáng đêm trong phần Cài đặt > Màn hình > Ánh sáng đêm. Tại đó, người dùng có thể tìm hiểu về tính năng Ánh sáng ban đêm, đặt lịch biểu và bật hoặc tắt tính năng này.

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

Điều kiện cài đặt

Xuất hiện ở đầu phần Cài đặt khi Chế độ ánh sáng ban đêm đang bật.

Thẻ Cài đặt nhanh

Thẻ thông tin Cài đặt nhanh hoạt động giống như nút bật/tắt Bật/Tắt trong phần Cài đặt > Màn hình > Đèn ban đêm.