מחקרים מראים שאור כחול מהמסכים יכול להשפיע לרעה על השינה. ב-Android 7.1.1 נוספה התכונה 'תאורת לילה', שמפחיתה את כמות האור הכחול הנפלט מהמסך של המכשיר כדי להתאים טוב יותר לאור הטבעי של השעה והמיקום של המשתמש. ב-Android 8.0 נוספה תכונה שמאפשרת למשתמשים לשלוט יותר בעוצמה של אפקט התאורה לילה.
ב-Android 10 נוסף שירות המערכת COLOR_DISPLAY_SERVICE
עם ממשק API של מערכת, כדי לתת למערכת, להגדרות ולממשק המשתמש של המערכת יותר שליטה על כל הטרנספורמציות של הצבעים, כולל התכונה 'תאורת לילה'.
כדי להשתמש בתכונה 'תאורת לילה', צריך להטמיע את 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>
הקוד מחולק בין מסגרת, שירותי מערכת, ממשק המשתמש של המערכת והגדרות. הפונקציונליות של הליבה נשלטת על ידי 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>
תכונות ממשק המשתמש
מכיוון שתאורת הלילה היא תכונה שמוצגת למשתמש, המשתמשים צריכים להיות מסוגלים לשלוט בה. יש הטמעה מלאה של ההגדרות בפרויקט packages/apps/Settings ב-Android Open Source Project (AOSP), שאותו יצרני המכשירים יכולים להיעזר בו כדי להטמיע את ההגדרות. מי שמטמיע את הקוד צריך לטפל בכוונה Settings.ACTION_NIGHT_DISPLAY_SETTINGS
כדי לחשוף את ההגדרה הזו.
הגדרות
ההגדרות של תאורת הלילה נמצאות בקטע הגדרות > תצוגה > תאורת לילה. משם, המשתמשים יכולים לקרוא מידע על תאורת הלילה, להגדיר את לוח הזמנים שלה ולהפעיל או להשבית אותה.
- הפעלה אוטומטית
- לעולם לא: תאורת הלילה אף פעם לא תידלק באופן אוטומטי, וצריך להפעיל אותה באמצעות המתג הידני הפעלה / השבתה.
- לוח זמנים מותאם אישית: תאורת הלילה מופעלת בשעת התחלה מסוימת [ברירת המחדל: 22:30] ומושבתת בשעת סיום מסוימת [ברירת המחדל: 06:30].
- מהשקיעה ועד הזריחה: תאורת הלילה מופעלת בשעת השקיעה ונכבית בשעת הזריחה. השעה של הזריחה והשקיעה תלויה במיקום המכשיר ובעונת השנה.
- הפעלה / השבתה: מתג שמאפשר לשלוט במצב הנוכחי של תאורת הלילה. המצב הזה מתייחס לכללים האוטומטיים הקיימים. לדוגמה, אם מפעילים את תאורת הלילה בשעה 17:30 (לפני שהכלל האוטומטי מפעיל אותה בשעה 22:30), תאורת הלילה עדיין תכבה בשעה 6:30. אם משביתים את תאורת הלילה בשעה 5:30 (לפני שהיא תכבה בשעה 6:30), היא עדיין תידלק בשעה 22:30.
- עוצמה: סרגל חיפוש שמאפשר לשלוט ברמת הטשטוש על ידי החלקה מצבעים חמים לצבעים קרירים. אפשר להשבית את סרגל הסימון כשתאורת הלילה לא מופעלת.
- טקסט אינפורמטיבי: מסביר למשתמש מה עושה התכונה 'תאורת לילה' ולמה.
תנאי להגדרות
מוצג בחלק העליון של ההגדרות כשתאורת הלילה פועלת.
לחצן בהגדרות המהירות
המשבצת של ההגדרות המהירות פועלת בדיוק כמו המתג הפעלה / השבתה בקטע הגדרות > מסך > תאורת לילה.