Исследования показывают, что синий свет от экранов может негативно влиять на сон. В Android 7.1.1 появилась функция Night Light, которая уменьшает количество синего света, излучаемого дисплеем устройства, чтобы лучше соответствовать естественному освещению в зависимости от времени суток и местоположения пользователя. В Android 8.0 появилась дополнительная функция, которая дает пользователям больший контроль над интенсивностью эффекта Night Light. В Android 10 представлена системная служба COLOR_DISPLAY_SERVICE
с поверхностью системного API, которая дает системе, настройкам и пользовательскому интерфейсу системы больший контроль над всеми преобразованиями цвета, включая Night Light.
Для 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
, чтобы раскрыть этот параметр.
Настройки
Настройки Night Light находятся в меню «Настройки» > «Дисплей» > «Ночной свет» . Оттуда пользователи могут узнать о Night Light, установить его расписание и включить или выключить.
- Включить автоматически
- Никогда: Night Light никогда не включится автоматически и должен быть активирован с помощью ручного переключателя On / Off .
- Пользовательское расписание: Night Light включается в указанное время начала [по умолчанию: 22:30] и выключается в указанное время окончания [по умолчанию: 6:30].
- От заката до рассвета: Night Light включается на закате и выключается на рассвете. Время восхода и захода солнца зависит от местоположения устройства и времени года.
- Вкл. / Выкл.: переключатель, управляющий текущим состоянием Night Light. Это состояние соблюдает существующие автоматические правила. Например, если Night Light включается в 17:30 (до того, как автоматическое правило включит его в 22:30), Night Light все равно выключится в 6:30 утра. И если Night Light выключен в 5:30. :30 утра (до того, как он выключится в 6:30), он все равно включится в 22:30.
- Интенсивность: полоса поиска , которая регулирует уровень оттенка, переходя от теплого к холодному. Панель поиска можно отключить, если Night Light не активирован.
- Информационный текст: обучает пользователя тому, что делает Night Light и почему.
Настройки условные
Отображается в верхней части настроек, когда включен ночной свет.
Плитка быстрых настроек
Плитка «Быстрые настройки» ведет себя так же, как переключатель « Вкл./Выкл .» в меню «Настройки» > «Экран» > «Ночной свет» .