Thực hiện ánh sáng ban đêm

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

Night Light yêu cầu triển khai Hardware Composer HAL 2.0 (HWC 2) có thể áp dụng ma trận được chuyển đến setColorTransform để thực hiện pha 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 ứng dụng.

Thực hiện

Nhà sản xuất thiết bị có thể kích hoạt tính năng triển khai mặc định của tính năng này bằng cách sử dụng các 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ã được phân chia giữa khung, dịch vụ hệ thống, Giao diện người dùng hệ thống và Cài đặt. Chức năng cốt lõi được điều khiển bởi ColorDisplayManager (được hỗ trợ bởi ColorDisplayService ).

Nhà sản xuất thiết bị nên tùy chỉnh dải màu dựa trên đặc điểm của bảng hiển thị của thiết bị, bao gồm điểm trắng, gam màu và màu sắc mong muốn. Bạn có thể thay đổi dải màu mà không 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 diễn dưới dạng phương trình bậc hai cho từng màu đỏ, lục và lam, ở dạng v res = v a t 2 + v b t + v y-int trong đó t là nhiệt độ đầu vào tính bằng Kelvin, như được chỉ định trong phạm vi giữa config_nightDisplayColorTemperatureMinconfig_nightDisplayColorTemperatureMax (như được mô tả trong phần trước) và v a , v b và v y-int lần lượt là hệ số a, hệ số b và hệ số chặn y cho đường cong của đường cong chính đã cho, như chỉ ra 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>

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

Vì Night Light là một tính năng hướng tới người dùng nên người dùng cần có khả năng kiểm soát nó. Có triển khai đầy đủ các cài đặt trong dự án 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 của họ. Người triển khai phải xử lý mục đích Settings.ACTION_NIGHT_DISPLAY_SETTINGS để hiển thị cài đặt này.

Cài đặt

Cài đặt cho Đèn ngủ nằm trong Cài đặt > Hiển thị > Đèn ngủ . Từ đó, người dùng có thể tìm hiểu về Night Light, đặt lịch và bật hoặc tắt nó.

  • Tự động bật
    • Không bao giờ: Đèn ngủ 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 thủ công.
    • Lịch tùy chỉnh: Đèn đêm bật vào Thời gian bắt đầu được chỉ định [mặc định: 10:30 tối] và tắt vào Thời gian kết thúc được chỉ định [mặc định: 6:30 sáng].
    • Hoàng hôn đến bình minh: Đèn ngủ bật lúc hoàng hôn và tắt lúc bình minh. 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: Bật tắt điều khiển trạng thái hiện tại của Night Light. Trạng thái này tôn trọng các quy tắc tự động hiện có. Ví dụ: nếu Đèn ngủ được bật lúc 5:30 chiều (trước khi quy tắc tự động bật vào lúc 10:30 tối), Đèn ngủ sẽ vẫn tắt lúc 6:30 sáng. Và nếu Đèn ngủ tắt lúc 5:30 sáng :30 am (trước khi nó tắt lúc 6h30 sáng), nó vẫn sẽ bật vào lúc 10h30 tối
  • Cường độ: Thanh tìm kiếm kiểm soát mức độ màu bằng cách trượt từ ấm sang mát. Thanh tìm kiếm có thể bị tắt khi Đèn ngủ không được kích hoạt.
  • Văn bản thông tin: Hướng dẫn người dùng biết Night Light làm gì và tại sao.

Cài đặt có điều kiện

Hiển thị ở đầu Cài đặt khi Đèn ngủ bật.

Ô Cài đặt nhanh

Ô Cài đặt nhanh hoạt động giống hệt với nút bật/tắt trong Cài đặt > Hiển thị > Đèn ngủ .