Внедрить ночник

Исследования показывают, что синий свет экранов может оказывать негативное влияние на сон. В 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 Open Source Project (AOSP), на который производители устройств могут ссылаться при реализации своих настроек. Разработчики должны обработать намерение Settings.ACTION_NIGHT_DISPLAY_SETTINGS , чтобы предоставить этот параметр.

Настройки

Настройки «Ночного света» находятся в «Настройки» > «Дисплей» > «Ночной свет» . Отсюда пользователи могут узнать о Night Light, установить его расписание, а также включить или выключить его.

  • Включить автоматически
    • Никогда: ночной свет никогда не включается автоматически, его необходимо активировать с помощью ручного переключателя Вкл./Выкл .
    • Пользовательское расписание: Night Light включается в указанное время начала [по умолчанию: 22:30] и выключается в указанное время окончания [по умолчанию: 6:30 утра].
    • От заката до восхода солнца: ночной свет включается на закате и выключается на восходе солнца. Время восхода и захода солнца зависит от местоположения устройства и времени года.
  • Вкл./Выкл.: переключатель, управляющий текущим состоянием Night Light. Это состояние уважает существующие автоматические правила. Например, если «Ночной свет» включается в 17:30 (до того, как автоматическое правило включало его в 22:30), «Ночной свет» все равно выключается в 6:30 утра. А если «Ночной свет» выключается в 5 :30 утра (до того, как он выключится в 6:30 утра), он все равно включится в 22:30.
  • Интенсивность: панель поиска , которая контролирует уровень оттенка, плавно меняя его от теплого к прохладному. Панель поиска можно отключить, если Night Light не активирован.
  • Информационный текст: Сообщает пользователю, что делает Night Light и почему.

Настройки условные

Отображается в верхней части настроек, когда включен «Ночной свет».

Плитка быстрых настроек

Плитка «Быстрые настройки» ведет себя идентично переключателю «Вкл./Выкл.» в меню «Настройки» > «Дисплей» > «Ночной свет» .