Cómo implementar la luz nocturna

Las investigaciones sugieren que la luz azul de las pantallas puede tener un impacto negativo en dormirán. Android 7.1.1 introdujo una función llamada Luz nocturna que reduce la temperatura cantidad de luz azul emitida por la pantalla del dispositivo para que coincida mejor con la luz la hora del día y la ubicación del usuario. Android 8.0 introdujo una función que les da a los usuarios más control sobre la intensidad del efecto Luz nocturna. Android 10 introduce la Servicio del sistema COLOR_DISPLAY_SERVICE, con una API del sistema para darle al sistema, la configuración y la IU del sistema más control sobre todos los colores transformaciones, incluida Luz nocturna.

La función Luz nocturna requiere un Hardware Implementación de HAL de Composer 2.0 (HWC 2) que puede aplicar la matriz que se pasa a setColorTransform para realizar ajustes de tono sin afectar la potencia rendimiento y compatibilidad de apps.

Implementación

Los fabricantes de dispositivos pueden habilitar la implementación predeterminada de la función mediante con las siguientes marcas definidas 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 framework, servicios del sistema, IU del sistema y configuración. El la funcionalidad principal la controla ColorDisplayManager (respaldada por ColorDisplayService).

Los fabricantes de dispositivos deben personalizar la rampa de color según las características de la el panel de la pantalla del dispositivo, incluidos el punto blanco, la gama y el color deseado. Puedes cambiar el una rampa de color sin cambiar la implementación básica 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 el formato vres = vat2 + vbt + vy-int donde t es la entrada de la temperatura en Kelvin, como se especifica en el rango entre config_nightDisplayColorTemperatureMin y config_nightDisplayColorTemperatureMax (como se describe en la sección anterior) y va, vb y vy-int son los atributos coeficiente a, coeficiente b e intersección y, respectivamente, para la curva de la primaria determinada, como se indica 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>

Funciones de la IU

Como la Luz nocturna es una función para los usuarios, estos deben poder controlar que la modifica. Existe una implementación completa de la configuración en el repositorio de código abierto de Android Proyecto (AOSP) paquetes/apps/configuración proyecto que los fabricantes de dispositivos pueden consultar para su Configuración para implementarlos. Los implementadores deben manejar Settings.ACTION_NIGHT_DISPLAY_SETTINGS para exponer este parámetro de configuración.

Configuración

La configuración de Luz nocturna se encuentra en Configuración > Mostrar > Noche Luz. Allí, los usuarios pueden aprender sobre la función Luz nocturna, establecer su programa, y activarla o desactivarla.

  • Activar automáticamente
    • Nunca: La Luz nocturna nunca se activará automáticamente ni debe activarse con el botón de activación manual Activado / Desactivado.
    • Programación personalizada: La Luz nocturna se activa según un horario especificado Hora de inicio [default: 10:30 p.m.] y desactivada en un horario especificado Hora de finalización [default: 6:30 a.m.]
    • Del atardecer al amanecer: La Luz nocturna se activa al atardecer y se apaga al amanecer. La hora del amanecer y el atardecer depende de la ubicación del dispositivo y la época del año.
  • Activar o Desactivar: Activa o desactiva la función. Ligero. Este estado respeta las reglas automáticas existentes. Por ejemplo, si Noche La luz se enciende a las 5:30 p.m. (antes de que la regla automática la active a las 10:30 p.m.), La Luz nocturna se desactivará a las 6:30 a.m. La luz se apaga a las 5:30 a.m. (antes de apagarse a las 6:30 a.m.) y seguir encendido a las 10:30 p.m.
  • Intensidad: Barra de búsqueda que controla el nivel de tono deslizando el dedo de cálido a frío. La barra deslizante de búsqueda puede se inhabilita cuando la Luz nocturna no está activada.
  • Texto informativo: Le enseña al usuario qué hace la función Luz nocturna. y por qué.

Configuración condicional

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

Tarjeta de Configuración rápida

La tarjeta de Configuración rápida se comporta de manera idéntica a la opción Activar / Desactivar. activar o desactivar en Configuración > Mostrar > Luz nocturna.