יישם תאורת לילה

מחקרים מראים שאור כחול ממסכים יכול להשפיע לרעה על השינה. אנדרואיד 7.1.1 הציגה תכונה בשם Night Light שמפחיתה את כמות האור הכחול הנפלט מתצוגת המכשיר כדי להתאים טוב יותר לאור הטבעי של השעה והמיקום של המשתמש ביום. אנדרואיד 8.0 הציגה תכונה נוספת המעניקה למשתמשים שליטה רבה יותר על עוצמת אפקט תאורת הלילה. אנדרואיד 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 ).

יצרני המכשיר צריכים להתאים אישית את רמפת הצבעים בהתבסס על המאפיינים של לוח התצוגה של המכשיר, כולל נקודה לבנה, סולם צבעים וצבע רצוי. אתה יכול לשנות את רמפת הצבע מבלי לשנות את יישום הבסיס על ידי שימוש בשכבת-על של תצורה. תצורה זו באה לידי ביטוי כמשוואה ריבועית לכל אחד של אדום, ירוק וכחול, בצורה 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 ו-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 Open Source Project (AOSP) שיצרני מכשירים יכולים להתייחס להטמעת ההגדרות שלהם. המיישמים חייבים לטפל Settings.ACTION_NIGHT_DISPLAY_SETTINGS הכוונה לחשוף הגדרה זו.

הגדרות

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

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

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

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

אריח הגדרות מהירות

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