تحقیقات نشان می دهد که نور آبی صفحه نمایش می تواند تاثیر منفی بر خواب داشته باشد. اندروید 7.1.1 قابلیتی به نام Night Light را معرفی کرد که میزان نور آبی ساطع شده از نمایشگر دستگاه را کاهش می دهد تا با نور طبیعی زمان و مکان کاربر مطابقت بیشتری داشته باشد. اندروید 8.0 یک ویژگی اضافی را معرفی کرد که به کاربران کنترل بیشتری بر شدت افکت نور شب می دهد. Android 10 سرویس سیستم COLOR_DISPLAY_SERVICE
را با سطح API سیستم معرفی میکند تا به سیستم، تنظیمات و رابط کاربری سیستم کنترل بیشتری بر روی همه تغییر رنگها، از جمله نور شب، بدهد.
Night Light به یک پیادهسازی 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>
ویژگی های رابط کاربری
از آنجایی که Night Light یک ویژگی برای کاربر است، کاربران باید بتوانند آن را کنترل کنند. اجرای کامل تنظیمات در بستهها/برنامهها/پروژه تنظیمات پروژه منبع باز Android (AOSP) وجود دارد که سازندگان دستگاه میتوانند برای اجرای تنظیمات خود به آن مراجعه کنند. پیادهکنندهها باید Settings.ACTION_NIGHT_DISPLAY_SETTINGS
انجام دهند.ACTION_NIGHT_DISPLAY_SETTINGS برای افشای این تنظیم.
تنظیمات
تنظیمات Night Light در Settings > Display > Night Light هستند. از آنجا، کاربران می توانند درباره نور شب بیاموزند، برنامه آن را تنظیم کنند و آن را روشن یا خاموش کنند.
- به صورت خودکار روشن شود
- هرگز: نور شب هرگز به طور خودکار روشن نمی شود و باید با کلید روشن/خاموش دستی فعال شود.
- برنامه زمانی سفارشی: چراغ شب در زمان شروع مشخص شده [پیشفرض: 10:30 شب] روشن میشود و در زمان پایان مشخص شده خاموش میشود [پیشفرض: 6:30 صبح].
- غروب تا طلوع آفتاب: نور شب هنگام غروب روشن و با طلوع خورشید خاموش می شود. زمان طلوع و غروب خورشید به مکان دستگاه و زمان سال بستگی دارد.
- روشن/خاموش: کلیدی که وضعیت فعلی نور شب را کنترل می کند. این حالت به قوانین خودکار موجود احترام می گذارد. برای مثال، اگر نور شب در ساعت 5:30 بعد از ظهر روشن شود (قبل از اینکه قانون خودکار آن را در ساعت 10:30 شب روشن کند)، نور شب همچنان در ساعت 6:30 صبح خاموش می شود و اگر نور شب در ساعت 5 خاموش شود. :30 صبح (قبل از اینکه ساعت 6:30 صبح خاموش شود)، همچنان در ساعت 10:30 شب روشن می شود
- شدت: Seekbar که سطح رنگ را با لغزش از گرم به سرد کنترل می کند. هنگامی که Night Light فعال نیست، می توان نوار جستجو را غیرفعال کرد.
- متن اطلاع رسانی: به کاربر آموزش می دهد که نور شب چه کاری انجام می دهد و چرا.
تنظیمات مشروط
وقتی نور شب روشن است در بالای تنظیمات قابل مشاهده است.
کاشی تنظیمات سریع
کاشی تنظیمات سریع مانند کلید روشن / خاموش در تنظیمات > نمایشگر > نور شب رفتار می کند.