ใช้แสงตอนกลางคืน

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

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

การใช้งาน

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

ผู้ผลิตอุปกรณ์ควรปรับแต่งแถบสีตามลักษณะของแผงแสดงผลของอุปกรณ์ ซึ่งรวมถึงจุดขาว ขอบเขตสี และสีที่ต้องการ คุณเปลี่ยนแถบสีได้โดยไม่ต้องเปลี่ยนการติดตั้งใช้งานพื้นฐานโดยใช้การวางซ้อนการกําหนดค่า การกําหนดค่านี้แสดงเป็นสมการไตรภาคีสําหรับสีแดง เขียว และน้ำเงินแต่ละสี ในรูปแบบ vres = vat2 + vbt + vy-int โดยที่ t คืออินพุตอุณหภูมิในหน่วยเคลวินตามที่ระบุไว้ในช่วงระหว่าง config_nightDisplayColorTemperatureMin ถึง config_nightDisplayColorTemperatureMax (ตามที่อธิบายไว้ในส่วนก่อนหน้า) และ va, vb และ vy-int คือค่าสัมประสิทธิ์ a, ค่าสัมประสิทธิ์ b และค่าคงที่ 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>

ฟีเจอร์ UI

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

การตั้งค่า

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

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

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

แสดงที่ด้านบนของการตั้งค่าเมื่อเปิดแสงตอนกลางคืน

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

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