Implementando Luz Nocturna

La investigación sugiere que la luz azul de las pantallas puede tener un impacto negativo en el sueño. Android 7.1.1 introdujo una función llamada Night Light que reduce la cantidad de luz azul emitida por la pantalla del dispositivo para que coincida mejor con la luz natural de la hora del día y la ubicación del usuario. Android 8.0 introdujo una función adicional que brinda a los usuarios más control sobre la intensidad del efecto Night Light. Android 10 presenta el servicio del sistema COLOR_DISPLAY_SERVICE , con una superficie API del sistema para brindar al sistema, la configuración y la IU del sistema más control sobre todas las transformaciones de color, incluida la luz nocturna.

Night Light requiere una implementación de Hardware Composer HAL 2.0 (HWC 2) que puede aplicar la matriz pasada a setColorTransform para realizar tintes sin afectar la potencia, el rendimiento y la compatibilidad de la aplicación.

Implementación

Los fabricantes de dispositivos pueden habilitar la implementación predeterminada de la función utilizando los siguientes indicadores definidos en 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>

El código se divide entre marco, servicios del sistema, interfaz de usuario del sistema y configuración. La funcionalidad principal está controlada por ColorDisplayManager (respaldado por ColorDisplayService ).

Los fabricantes de dispositivos deben personalizar la rampa de color según las características del panel de visualización del dispositivo, incluido el punto blanco, la gama y el color deseado. Puede cambiar la rampa de color sin cambiar la implementación base mediante una superposición de configuración. Esta configuración se expresa como una ecuación cuadrática para cada rojo, verde y azul, en la forma v res = v a t 2 + v b t + v y-int donde t es la entrada de temperatura en Kelvin, como se especifica en el rango entre config_nightDisplayColorTemperatureMin y config_nightDisplayColorTemperatureMax (como se describe en la sección anterior), y v a , v b y v y-int son el coeficiente a, el coeficiente b y la intersección y, respectivamente, para la curva primaria dada, como indicada a continuación.

    <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>

características de la interfaz de usuario

Debido a que Night Light es una función orientada al usuario, los usuarios deben poder controlarla. Hay una implementación completa de la configuración en el proyecto de paquetes/aplicaciones/configuración del Proyecto de código abierto de Android (AOSP) que los fabricantes de dispositivos pueden consultar para su implementación de configuración. Los implementadores deben manejar la intención de Settings.ACTION_NIGHT_DISPLAY_SETTINGS para exponer esta configuración.

Ajustes

La configuración de Luz nocturna se encuentra en Configuración > Pantalla > Luz nocturna . Desde allí, los usuarios pueden obtener información sobre Night Light, establecer su horario y encenderlo o apagarlo.

  • Encender automáticamente
    • Nunca: la luz nocturna nunca se encenderá automáticamente y debe activarse con el interruptor manual de encendido/apagado .
    • Horario personalizado: la luz nocturna se enciende a una hora de inicio específica [predeterminada: 10:30 p. m.] y se apaga a una hora de finalización específica [predeterminada: 6:30 a. m.].
    • Desde el atardecer hasta el amanecer: Night Light se enciende al atardecer y se apaga al amanecer. La hora de salida y puesta del sol depende de la ubicación del dispositivo y la época del año.
  • On/Off: Alternar que controla el estado actual de Night Light. Este estado respeta las reglas automáticas existentes. Por ejemplo, si la luz nocturna se enciende a las 5:30 p. m. (antes de que la regla automática la encendiera a las 10:30 p. :30 am (antes se apaga a las 6:30 am), seguirá encendiendo a las 10:30 pm
  • Intensidad: barra de búsqueda que controla el nivel de tinte deslizándose de cálido a frío. La barra de búsqueda se puede desactivar cuando Night Light no está activado.
  • Texto informativo: le enseña al usuario qué hace Night Light y por qué.

Configuraciones condicionales

Visible en la parte superior de Configuración cuando la luz nocturna está activada.

Mosaico de configuración rápida

El mosaico de Configuración rápida se comporta de manera idéntica a la opción Activar/Desactivar en Configuración > Pantalla > Luz nocturna .