Mettre en place une veilleuse

Des recherches suggèrent que la lumière bleue émise par les écrans peut avoir un impact négatif sur le sommeil. Android 7.1.1 a introduit une fonctionnalité appelée Night Light qui réduit la quantité de lumière bleue émise par l'écran de l'appareil pour mieux correspondre à la lumière naturelle de l'heure de la journée et du lieu de l'utilisateur. Android 8.0 a introduit une fonctionnalité supplémentaire qui donne aux utilisateurs plus de contrôle sur l'intensité de l'effet Night Light. Android 10 introduit le service système COLOR_DISPLAY_SERVICE , avec une surface API système pour donner au système, aux paramètres et à l'interface utilisateur système plus de contrôle sur toutes les transformations de couleurs, y compris Night Light.

Night Light nécessite une implémentation de Hardware Composer HAL 2.0 (HWC 2) qui peut appliquer la matrice transmise à setColorTransform pour effectuer la teinte sans affecter la puissance, les performances et la compatibilité des applications.

Mise en œuvre

Les fabricants d'appareils peuvent activer l'implémentation par défaut de la fonctionnalité en utilisant les indicateurs suivants définis dans 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>

Le code est divisé entre le framework, les services système, l'interface utilisateur système et les paramètres. La fonctionnalité principale est contrôlée par ColorDisplayManager (soutenu par ColorDisplayService ).

Les fabricants d'appareils doivent personnaliser la palette de couleurs en fonction des caractéristiques de l'écran d'affichage de l'appareil, notamment le point blanc, la gamme et la couleur souhaitée. Vous pouvez modifier la palette de couleurs sans modifier l'implémentation de base en utilisant une superposition de configuration. Cette configuration est exprimée sous la forme d'une équation quadratique pour chacun des éléments rouge, vert et bleu, sous la forme v res = v a t 2 + v b t + v y-int où t est la température d'entrée en Kelvin, comme spécifié dans le plage entre config_nightDisplayColorTemperatureMin et config_nightDisplayColorTemperatureMax (comme décrit dans la section précédente), et v a , v b et v y-int sont respectivement le coefficient a, le coefficient b et l'ordonnée à l'origine pour la courbe primaire donnée, comme indiqué ci-dessous.

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

Fonctionnalités de l'interface utilisateur

Étant donné que Night Light est une fonctionnalité destinée aux utilisateurs, ceux-ci doivent pouvoir la contrôler. Il existe une implémentation complète des paramètres dans le projet packages/apps/Settings du projet Android Open Source (AOSP) que les fabricants d'appareils peuvent référencer pour leur implémentation de paramètres. Les développeurs doivent gérer l’intention Settings.ACTION_NIGHT_DISPLAY_SETTINGS pour exposer ce paramètre.

Paramètres

Les paramètres de Night Light se trouvent dans Paramètres > Affichage > Night Light . À partir de là, les utilisateurs peuvent en savoir plus sur Night Light, définir son horaire et l'allumer ou l'éteindre.

  • Allumer automatiquement
    • Jamais : la veilleuse ne s'allumera jamais automatiquement et doit être activée avec la bascule manuelle marche/arrêt .
    • Programmation personnalisée : la veilleuse s'allume à une heure de début spécifiée [par défaut : 22h30] et s'éteint à une heure de fin spécifiée [par défaut : 6h30].
    • Du coucher au lever du soleil : la veilleuse s'allume au coucher du soleil et s'éteint au lever du soleil. L'heure du lever et du coucher du soleil dépend de l'emplacement de l'appareil et de la période de l'année.
  • On / Off : bascule qui contrôle l'état actuel de la veilleuse. Cet état respecte les règles automatiques existantes. Par exemple, si la veilleuse est activée à 17h30 (avant que la règle automatique ne l'allume à 22h30), la veilleuse s'éteindra toujours à 6h30. Et si la veilleuse est désactivée à 17h30. : 30h (avant qu'il ne s'éteigne à 6h30), il s'allumera toujours à 22h30
  • Intensité : barre de recherche qui contrôle le niveau de teinte en glissant du chaud au froid. La barre de recherche peut être désactivée lorsque Night Light n'est pas activé.
  • Texte informatif : enseigne à l'utilisateur ce que fait Night Light et pourquoi.

Paramètres conditionnels

Visible en haut des paramètres lorsque la veilleuse est activée.

Vignette Paramètres rapides

La vignette Paramètres rapides se comporte de la même manière que la bascule Marche/Arrêt dans Paramètres > Affichage > Veilleuse .