הטמעת תאורת לילה

מחקרים מראים שאור כחול ממסכים יכול להשפיע לרעה לישון. ב-Android 7.1.1 נוספה תכונה בשם 'תאורת לילה' שמפחיתה כמות האור הכחול שנפלטת ממסך המכשיר כדי להתאים טוב יותר לתאורה הטבעית בהתאם לשעה ביום ולמיקום של המשתמש. ב-Android 8.0 נוספה תכונה שמעניקה למשתמשים שליטה רבה יותר על העוצמה של אפקט תאורת הלילה. Android 10 מציג את שירות מערכת של COLOR_DISPLAY_SERVICE, עם ממשק API של המערכת כדי לאפשר למערכת, להגדרות ולממשק המשתמש של המערכת יותר שליטה על כל הצבעים שיבוצעו שינויים, כולל תאורת לילה.

לתאורת לילה נדרשת חומרה הטמעת 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>

הקוד מחולק בין framework, שירותי מערכת, ממשק משתמש של מערכת והגדרות. הפונקציונליות העיקרית נשלטת על ידי ColorDisplayManager (מגובה על ידי ColorDisplayService).

יצרני המכשירים צריכים להתאים אישית את רמפת הצבעים בהתאם למאפיינים של בלוח התצוגה של המכשיר, כולל נקודה לבנה, סולם וצבע רצוי. אפשר לשנות את קבוצת צבעים מבלי לשנות את ההטמעה הבסיסית באמצעות שימוש בשכבת-על של הגדרה. ההגדרה הזו מבוטאת כמשוואה ממעלה שנייה של כל אחד מהצבעים אדום, ירוק וכחול, בפורמט vres = vat2 + vbt + vy-int כאשר t הוא קלט הטמפרטורה בקלווין, כפי שצוין בטווח config_nightDisplayColorTemperatureMin והקבוצה config_nightDisplayColorTemperatureMax (כפי שמתואר בקטע הקודם), ו-a, 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>

תכונות בממשק המשתמש

תאורת לילה היא תכונה גלויה למשתמשים, ולכן למשתמשים צריכה להיות אפשרות לשלוט את זה. יש הטמעה מלאה של ההגדרות בקוד הפתוח של Android פרויקט (AOSP) packages/apps/Settings (חבילות/אפליקציות/הגדרות) פרויקט שיצרני המכשירים יכולים לעיין בו בהגדרות שלהם יישום בפועל. מיישמים צריכים לטפל Settings.ACTION_NIGHT_DISPLAY_SETTINGS כוונה לחשוף את ההגדרה הזו.

הגדרות

ההגדרות של תאורת לילה נמצאות בהגדרות > רשת המדיה > לילה קלים. משם המשתמשים יכולים ללמוד על תאורת הלילה, להגדיר את לוח הזמנים, ולהפעיל או לכבות אותה.

  • הפעלה אוטומטית
    • אף פעם: תאורת הלילה אף פעם לא תידלק באופן אוטומטי צריך להיות מופעל באמצעות המתג הפעלה / כיבוי הידני.
    • לוח זמנים מותאם אישית: תאורת לילה מופעלת בשעה מסוימת שעת ההתחלה [ברירת מחדל: 22:30] וכיבוי בשעה מסוימת שעת סיום [ברירת המחדל: 6:30 בבוקר].
    • מהשקיעה ועד הזריחה: תאורת הלילה מופעלת בשקיעה ובכיבוי בזריחה. זמן הזריחה והשקיעה תלוי במיקום המכשיר ובתקופה בשנה.
  • הפעלה / כיבוי: מתג לשינוי המצב הנוכחי של הלילה אור. המצב הזה מכבד כללים אוטומטיים קיימים. לדוגמה, אם הוא 'לילה' התאורה מופעלת בשעה 17:30. (לפני שהכלל האוטומטי יפעיל אותו בשעה 22:30), תאורת הלילה עדיין תכבה בשעה 6:30. התאורה תכבה בשעה 5:30 (לפני שהיא תכבה ב-6:30) להפעיל את הסרטון בשעה 22:30.
  • עוצמה: סרגל דילוג ששולט ברמת הגוון על ידי החלקה מחימום חם לקירור. סרגל הדילוג יכול להיות מושבת כשתאורת הלילה לא מופעלת.
  • טקסט מידע: מלמד את המשתמשים איך תאורת לילה עושה ולמה.

הגדרות מותנות

גלוי בחלק העליון של ההגדרות כשתאורת הלילה פועלת.

לחצן בהגדרות המהירות

הפעולה של לחצן ההגדרות המהירות זהה לזו של הלחצן הפעלה / כיבוי החלפת המצב בהגדרות > רשת המדיה > תאורת לילה.