ติดตั้งไฟกลางคืน

ผลวิจัยชี้แสงสีฟ้าจากหน้าจอส่งผลเสียต่อการนอนหลับ Android 7.1.1 นำเสนอฟีเจอร์ที่เรียกว่า Night Light ซึ่งช่วยลดปริมาณแสงสีน้ำเงินที่ปล่อยออกมาจากหน้าจอของอุปกรณ์เพื่อให้เข้ากับแสงธรรมชาติในเวลาและสถานที่ของผู้ใช้ได้ดียิ่งขึ้น Android 8.0 เปิดตัวคุณสมบัติเพิ่มเติมที่ช่วยให้ผู้ใช้ควบคุมความเข้มของเอฟเฟกต์แสงกลางคืนได้มากขึ้น Android 10 เปิดตัวบริการระบบ COLOR_DISPLAY_SERVICE พร้อมพื้นผิว API ของระบบเพื่อให้ระบบ การตั้งค่า และ UI ของระบบควบคุมการเปลี่ยนสีทั้งหมดได้มากขึ้น รวมถึงแสงกลางคืน

Night Light ต้องใช้ Hardware Composer HAL 2.0 (HWC 2) ซึ่งสามารถใช้เมทริกซ์ที่ส่งผ่านไปยัง setColorTransform เพื่อทำการย้อมสีโดยไม่กระทบต่อพลังงาน ประสิทธิภาพ และความเข้ากันได้ของแอป

การนำไปปฏิบัติ

ผู้ผลิตอุปกรณ์สามารถเปิดใช้งานการใช้งานคุณลักษณะเริ่มต้นได้โดยใช้แฟล็กต่อไปนี้ที่กำหนดไว้ใน 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>

รหัสจะถูกแบ่งระหว่างเฟรมเวิร์ก บริการของระบบ UI ระบบ และการตั้งค่า ฟังก์ชั่นหลักถูกควบคุมโดย ColorDisplayManager (สนับสนุนโดย ColorDisplayService )

ผู้ผลิตอุปกรณ์ควรปรับแต่งการลาดสีตามลักษณะของแผงแสดงผลของอุปกรณ์ รวมถึงจุดสีขาว ขอบเขตสี และสีที่ต้องการ คุณสามารถเปลี่ยนการลาดสีได้โดยไม่ต้องเปลี่ยนการใช้งานพื้นฐานโดยใช้การซ้อนทับการกำหนดค่า โครงสร้างนี้แสดงเป็นสมการกำลังสองสำหรับสีแดง เขียว และน้ำเงินแต่ละตัว ในรูปแบบ v res = v a t 2 + v b t + v y-int โดยที่ t คืออุณหภูมิที่ป้อนในหน่วยเคลวิน ตามที่ระบุไว้ใน ช่วงระหว่าง config_nightDisplayColorTemperatureMin และ config_nightDisplayColorTemperatureMax (ตามที่อธิบายไว้ในส่วนก่อนหน้า) และ v a , v b และ v y-int เป็นค่าสัมประสิทธิ์ a, b-coefficient และ y-intercept ตามลำดับสำหรับเส้นโค้งของหลักที่กำหนด เช่น ระบุไว้ด้านล่าง

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

คุณสมบัติ UI

เนื่องจาก Night Light เป็นฟีเจอร์ที่ผู้ใช้ต้องเผชิญ ผู้ใช้จึงต้องสามารถควบคุมได้ มีการใช้งานการตั้งค่าอย่างเต็มรูปแบบในโครงการ แพ็คเกจ/แอป/การตั้งค่า Android Open Source Project (AOSP) ที่ผู้ผลิตอุปกรณ์สามารถอ้างอิงสำหรับการใช้งานการตั้งค่าของตนได้ ผู้ดำเนินการจะต้องจัดการกับ Settings.ACTION_NIGHT_DISPLAY_SETTINGS เจตนาที่จะเปิดเผยการตั้งค่านี้

การตั้งค่า

การตั้งค่าสำหรับแสงกลางคืนอยู่ใน การตั้งค่า > จอแสดงผล > แสงกลางคืน จากนั้นผู้ใช้สามารถเรียนรู้เกี่ยวกับแสงกลางคืน กำหนดเวลา และเปิดหรือปิดได้

  • เปิดโดยอัตโนมัติ
    • ไม่เลย: ไฟกลางคืนจะไม่เปิดโดยอัตโนมัติ และจะต้องเปิดใช้งานด้วยการสลับ เปิด / ปิด ด้วยตนเอง
    • กำหนดเวลาแบบกำหนดเอง: แสงกลางคืนจะเปิดตาม เวลาเริ่มต้น ที่ระบุ [ค่าเริ่มต้น: 22:30 น.] และปิดใน เวลาสิ้นสุด ที่ระบุ [ค่าเริ่มต้น: 6:30 น.]
    • พระอาทิตย์ตกถึงพระอาทิตย์ขึ้น: แสงกลางคืนจะเปิดเมื่อพระอาทิตย์ตกและปิดเมื่อพระอาทิตย์ขึ้น เวลาพระอาทิตย์ขึ้นและพระอาทิตย์ตกขึ้นอยู่กับตำแหน่งของอุปกรณ์และช่วงเวลาของปี
  • เปิด / ปิด: สลับเพื่อควบคุมสถานะปัจจุบันของแสงกลางคืน สถานะนี้เคารพกฎอัตโนมัติที่มีอยู่ ตัวอย่างเช่น หากเปิดไฟกลางคืนเวลา 17.30 น. (ก่อนที่กฎอัตโนมัติจะเปิดเวลา 22.30 น.) แสงกลางคืนจะยังคงปิดเวลา 6.30 น. และหากปิดไฟกลางคืนเวลา 5.00 น. :30 น. (ก่อนปิด 6.30 น.) จะยังคงเปิดเวลา 22.30 น.
  • ความเข้ม: Seekbar ที่ควบคุมระดับโทนสีโดยเลื่อนจากอุ่นไปเย็น สามารถปิดใช้งานแถบค้นหาได้เมื่อไม่ได้เปิดใช้งาน Night Light
  • ข้อความที่ให้ข้อมูล: สอนผู้ใช้ว่า Night Light ทำอะไรและเพราะเหตุใด

การตั้งค่าแบบมีเงื่อนไข

มองเห็นได้ที่ด้านบนของการตั้งค่าเมื่อเปิดไฟกลางคืน

ไทล์การตั้งค่าด่วน

ไทล์การตั้งค่าด่วนทำงานเหมือนกันกับการสลับ เปิด/ปิด ใน การตั้งค่า > จอแสดงผล > แสงกลางคืน