งานวิจัยชี้ว่าแสงสีฟ้าจากหน้าจออาจส่งผลเสียต่อการนอนหลับ 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 น.
- ความเข้ม: แถบเลื่อน ที่ควบคุมระดับสีโดยเลื่อนจากโทนอุ่นเป็นโทนเย็น คุณปิดใช้แถบเลื่อนได้เมื่อไม่ได้เปิดใช้งานแสงตอนกลางคืน
- ข้อความที่ให้ข้อมูล: อธิบายให้ผู้ใช้ทราบว่าฟีเจอร์ปรับแสงเป็นสีเหลืองนวลทําอะไรได้บ้างและทําไปเพื่ออะไร
การตั้งค่าแบบมีเงื่อนไข
แสดงที่ด้านบนของการตั้งค่าเมื่อเปิดแสงตอนกลางคืน
การ์ดการตั้งค่าด่วน
ไทล์การตั้งค่าด่วนจะทํางานเหมือนกับปุ่มสลับเปิด / ปิดในการตั้งค่า > จอแสดงผล > ไฟกลางคืน