Nachtlicht implementieren

Studien haben gezeigt, dass blaues Licht von Bildschirmen sich negativ auf den Schlaf auswirken kann. Mit Android 7.1.1 wurde die Funktion „Nachtlicht“ eingeführt, mit der die Menge des vom Display des Geräts abgegebenen blauen Lichts reduziert wird, um besser zum natürlichen Licht der Tageszeit und des Standorts des Nutzers zu passen. Mit Android 8.0 wurde eine zusätzliche Funktion eingeführt, mit der Nutzer die Intensität des Nachtlichteffekts besser steuern können. In Android 10 wird der Systemdienst COLOR_DISPLAY_SERVICE eingeführt. Er bietet eine System-API, mit der das System, die Einstellungen und die System-UI mehr Kontrolle über alle Farbtransformationen haben, einschließlich des Nachtlichts.

Für den Nachtmodus ist eine Hardware Composer HAL 2.0-Implementierung (HWC 2) erforderlich, die die an setColorTransform übergebene Matrix anwenden kann, um die Tönung anzuwenden, ohne die Akkulaufzeit, Leistung und App-Kompatibilität zu beeinträchtigen.

Implementierung

Gerätehersteller können die Standardimplementierung der Funktion mithilfe der folgenden Flags aktivieren, die in frameworks/base/core/res/res/values/config.xml definiert sind.

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

Der Code ist in Framework, Systemdienste, System-UI und Einstellungen unterteilt. Die Hauptfunktionen werden von ColorDisplayManager gesteuert (unterstützt von ColorDisplayService).

Gerätehersteller sollten die Farbrampe anhand der Eigenschaften des Displaypanels des Geräts anpassen, einschließlich Weißpunkt, Farbraum und gewünschter Farbe. Mit einem Konfigurations-Overlay können Sie die Farbrampe ändern, ohne die Basisimplementierung zu ändern. Diese Konfiguration wird für Rot, Grün und Blau als quadratische Gleichung in der Form vres = vat2 + vbt + vy-int ausgedrückt, wobei t die Temperatur in Kelvin ist, wie im vorherigen Abschnitt beschrieben, und va, vb und vy-int die A-Koeffizienten, B-Koeffizienten und y-Achsenabschnitte für die Kurve des jeweiligen Primärfarbstoffs sind, wie unten angegeben.config_nightDisplayColorTemperatureMinconfig_nightDisplayColorTemperatureMax

    <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 das Nachtlicht eine nutzerorientierte Funktion ist, müssen Nutzer es selbst steuern können. Im Android Open Source Project (AOSP) gibt es eine vollständige Implementierung der Einstellungen im Projekt packages/apps/Settings, auf das Gerätehersteller für ihre Implementierung der Einstellungen verweisen können. Implementierer müssen die Settings.ACTION_NIGHT_DISPLAY_SETTINGS-Intent verwenden, um diese Einstellung freizugeben.

Einstellungen

Die Einstellungen für das Nachtlicht finden Sie unter Einstellungen > Display > Nachtlicht. Dort können Nutzer mehr über den Nachtmodus erfahren, einen Zeitplan festlegen und ihn aktivieren oder deaktivieren.

  • Automatisch aktivieren
    • Nie:Das Nachtlicht wird nie automatisch eingeschaltet und muss manuell über die Ein-/Aus-Schaltfläche An/Aus aktiviert werden.
    • Benutzerdefinierter Zeitplan:Das Nachtlicht wird zu einer bestimmten Startzeit [Standard: 22:30 Uhr] ein- und zu einer bestimmten Endzeit [Standard: 06:30 Uhr] ausgeschaltet.
    • Von Sonnenuntergang bis -aufgang:Das Nachtlicht wird bei Sonnenuntergang ein- und bei Sonnenaufgang ausgeschaltet. Die Uhrzeit für Sonnenaufgang und Sonnenuntergang hängt vom Standort des Geräts und von der Jahreszeit ab.
  • An/Aus:Mit dieser Ein/Aus-Schaltfläche wird der aktuelle Status des Nachtlichts gesteuert. In diesem Status werden vorhandene automatische Regeln berücksichtigt. Wenn Sie das Nachtlicht beispielsweise um 17:30 Uhr einschalten, bevor es durch die automatische Regel um 22:30 Uhr aktiviert werden würde, Das Nachtlicht wird trotzdem um 6:30 Uhr ausgeschaltet. Wenn Sie das Nachtlicht um 5:30 Uhr ausschalten (bevor es um 6:30 Uhr ausgeschaltet wird), wird es trotzdem um 22:30 Uhr eingeschaltet.
  • Intensität:Schieberegler, mit dem Sie den Farbton von warm nach kalt einstellen können. Die Bildlaufleiste kann deaktiviert werden, wenn das Nachtlicht nicht aktiviert ist.
  • Informationstext:Hier erfahren Nutzer, wozu das Nachtlicht dient und warum es verwendet wird.

Einstellungen bedingt

Ist oben in den Einstellungen zu sehen, wenn das Nachtlicht aktiviert ist.

Kachel für die Schnelleinstellungen

Die Kachel in den Schnelleinstellungen funktioniert genauso wie die Ein-/Aus-Schaltfläche An/Aus unter Einstellungen > Display > Nachtlicht.