Implementieren Sie Nachtlicht

Untersuchungen legen nahe, dass blaues Licht von Bildschirmen einen negativen Einfluss auf den Schlaf haben kann. Mit Android 7.1.1 wurde eine Funktion namens „Nachtlicht“ eingeführt, die die Menge des vom Gerätedisplay ausgestrahlten blauen Lichts reduziert, um es besser an das natürliche Licht der Tageszeit und des Standorts des Benutzers anzupassen. Mit Android 8.0 wurde eine zusätzliche Funktion eingeführt, die Benutzern mehr Kontrolle über die Intensität des Nachtlichteffekts gibt. Android 10 führt den Systemdienst COLOR_DISPLAY_SERVICE mit einer System-API-Oberfläche ein, um dem System, den Einstellungen und der System-Benutzeroberfläche mehr Kontrolle über alle Farbtransformationen, einschließlich Nachtlicht, zu geben.

Night Light erfordert eine Hardware Composer HAL 2.0 (HWC 2)-Implementierung, die die an setColorTransform übergebene Matrix anwenden kann, um Tönungen durchzuführen, ohne die Leistung, Leistung und App-Kompatibilität zu beeinträchtigen.

Implementierung

Gerätehersteller können die Standardimplementierung der Funktion aktivieren, indem sie die folgenden Flags verwenden, die in 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>
definiert sind

Der Code ist in Framework, Systemdienste, System-Benutzeroberfläche und Einstellungen unterteilt. Die Kernfunktionalität wird von ColorDisplayManager gesteuert (unterstützt von ColorDisplayService ).

Gerätehersteller sollten den Farbverlauf basierend auf den Eigenschaften des Anzeigefelds des Geräts anpassen, einschließlich Weißpunkt, Farbskala und gewünschter Farbe. Sie können den Farbverlauf ändern, ohne die Basisimplementierung zu ändern, indem Sie ein Konfigurations-Overlay verwenden. Diese Konfiguration wird als quadratische Gleichung für Rot, Grün und Blau in der Form v res = v a t 2 + v b t + v y-int ausgedrückt, wobei t die Temperatureingabe in Kelvin ist, wie in angegeben Bereich zwischen config_nightDisplayColorTemperatureMin und config_nightDisplayColorTemperatureMax (wie im vorherigen Abschnitt beschrieben), und v a , v b und v y-int sind der a-Koeffizient, der b-Koeffizient bzw. der y-Achsenabschnitt für die gegebene Primärkurve, as unten angegeben.

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

UI-Funktionen

Da es sich bei Nachtlicht um eine benutzerorientierte Funktion handelt, müssen Benutzer sie steuern können. Es gibt eine vollständige Implementierung der Einstellungen im Projekt „packages/apps/Settings“ des Android Open Source Project (AOSP), auf die Gerätehersteller für ihre Einstellungsimplementierung verweisen können. Implementierer müssen die Absicht Settings.ACTION_NIGHT_DISPLAY_SETTINGS verarbeiten, um diese Einstellung verfügbar zu machen.

Einstellungen

Die Einstellungen für Nachtlicht finden Sie unter Einstellungen > Anzeige > Nachtlicht . Von dort aus können Benutzer mehr über Nachtlicht erfahren, seinen Zeitplan festlegen und es ein- oder ausschalten.

  • Automatisch einschalten
    • Niemals: Das Nachtlicht schaltet sich nie automatisch ein und muss mit dem manuellen Ein-/Aus -Schalter aktiviert werden.
    • Benutzerdefinierter Zeitplan: Das Nachtlicht schaltet sich zu einer bestimmten Startzeit [Standard: 22:30 Uhr] ein und zu einer bestimmten Endzeit [Standard: 6:30 Uhr] aus.
    • Sonnenuntergang bis Sonnenaufgang: Das Nachtlicht schaltet sich bei Sonnenuntergang ein und bei Sonnenaufgang aus. Die Zeit für Sonnenauf- und -untergang hängt vom Standort des Geräts und der Jahreszeit ab.
  • Ein/Aus: Umschalter, der den aktuellen Status des Nachtlichts steuert. Dieser Zustand respektiert bestehende automatische Regeln. Wenn beispielsweise das Nachtlicht um 17:30 Uhr eingeschaltet wird (bevor die automatische Regel es um 22:30 Uhr einschaltet), wird das Nachtlicht immer noch um 6:30 Uhr ausgeschaltet. Und wenn das Nachtlicht um 17:00 Uhr ausgeschaltet wird :30 Uhr (bevor es sich um 6:30 Uhr ausschaltet), schaltet es sich immer noch um 22:30 Uhr ein
  • Intensität: Suchleiste , die den Farbtongrad durch Schieben von warm nach kalt steuert. Die Suchleiste kann deaktiviert werden, wenn das Nachtlicht nicht aktiviert ist.
  • Informationstext: Bringt dem Benutzer bei, was Nachtlicht tut und warum.

Einstellungen bedingt

Wird oben in den Einstellungen angezeigt, wenn das Nachtlicht aktiviert ist.

Kachel „Schnelleinstellungen“.

Die Kachel „Schnelleinstellungen“ verhält sich identisch mit dem Ein-/Aus -Schalter unter „Einstellungen“ > „Anzeige“ > „Nachtlicht“ .