Wdrożyć oświetlenie nocne

Badania sugerują, że niebieskie światło z ekranów może mieć negatywny wpływ na sen. W systemie Android 7.1.1 wprowadzono funkcję o nazwie Night Light, która zmniejsza ilość niebieskiego światła emitowanego przez wyświetlacz urządzenia, aby lepiej dopasować się do naturalnego światła o porze dnia i lokalizacji użytkownika. W Androidzie 8.0 wprowadzono dodatkową funkcję, która daje użytkownikom większą kontrolę nad intensywnością efektu Night Light. W systemie Android 10 wprowadzono usługę systemową COLOR_DISPLAY_SERVICE z interfejsem API systemu, który zapewnia systemowi, ustawieniom i interfejsowi użytkownika większą kontrolę nad wszystkimi transformacjami kolorów, w tym podświetleniem nocnym.

Night Light wymaga implementacji Hardware Composer HAL 2.0 (HWC 2), która może zastosować matrycę przekazaną do setColorTransform w celu przeprowadzenia barwienia bez wpływu na moc, wydajność i zgodność aplikacji.

Realizacja

Producenci urządzeń mogą włączyć domyślną implementację tej funkcji, używając następujących flag zdefiniowanych w 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>

Kod jest podzielony na framework, usługi systemowe, interfejs użytkownika systemu i ustawienia. Podstawową funkcjonalnością zarządza ColorDisplayManager (wspierany przez ColorDisplayService ).

Producenci urządzeń powinni dostosować skalę kolorów w oparciu o charakterystykę panelu wyświetlacza urządzenia, w tym punkt bieli, gamę i żądany kolor. Możesz zmienić rampę kolorów bez zmiany podstawowej implementacji, używając nakładki konfiguracyjnej. Konfiguracja ta jest wyrażona jako równanie kwadratowe dla każdego koloru czerwonego, zielonego i niebieskiego, w postaci v res = v a t 2 + v b t + v y-int gdzie t jest temperaturą wejściową w Kelwinach, jak określono w zakres pomiędzy config_nightDisplayColorTemperatureMin i config_nightDisplayColorTemperatureMax (jak opisano w poprzedniej sekcji), a v a , v b i v y-int to odpowiednio współczynnik a, współczynnik b i punkt przecięcia z y dla danej krzywej podstawowej, jako wskazane poniżej.

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

Funkcje interfejsu użytkownika

Ponieważ Podświetlenie nocne jest funkcją dostępną dla użytkownika, użytkownicy muszą mieć możliwość kontrolowania jej. Istnieje pełna implementacja ustawień w pakietach/aplikacjach/projektach ustawień systemu Android Open Source Project (AOSP), do których producenci urządzeń mogą się odwoływać w celu wdrożenia ustawień. Osoby wdrażające muszą obsłużyć intencję Settings.ACTION_NIGHT_DISPLAY_SETTINGS , aby udostępnić to ustawienie.

Ustawienia

Ustawienia Podświetlenia nocnego znajdują się w Ustawieniach > Wyświetlacz > Podświetlenie nocne . Stamtąd użytkownicy mogą dowiedzieć się o Night Light, ustawić jego harmonogram oraz włączyć lub wyłączyć.

  • Włącz automatycznie
    • Nigdy: Podświetlenie nocne nigdy nie włączy się automatycznie i należy je aktywować za pomocą ręcznego przełącznika włączania/wyłączania .
    • Harmonogram niestandardowy: Podświetlenie nocne włącza się o określonej godzinie rozpoczęcia [domyślnie: 22:30] i wyłącza o określonej godzinie zakończenia [domyślnie: 6:30].
    • Od zachodu do wschodu słońca: Podświetlenie nocne włącza się o zachodzie słońca i wyłącza o wschodzie słońca. Czas wschodu i zachodu słońca zależy od lokalizacji urządzenia i pory roku.
  • Wł. / Wył.: Przełącznik kontrolujący bieżący stan Podświetlenia nocnego. Ten stan uwzględnia istniejące reguły automatyczne. Na przykład, jeśli podświetlenie nocne zostanie włączone o 17:30 (zanim reguła automatyczna włączy je o 22:30), podświetlenie nocne nadal wyłączy się o 6:30. Jeśli podświetlenie nocne zostanie wyłączone o 17:00 :30 (zanim wyłączy się o 6:30), nadal włączy się o 22:30
  • Intensywność: Pasek wyszukiwania , który kontroluje poziom odcienia, przesuwając się z ciepłego do chłodnego. Pasek wyszukiwania można wyłączyć, gdy podświetlenie nocne nie jest włączone.
  • Tekst informacyjny: uczy użytkownika, co robi Night Light i dlaczego.

Ustawienia warunkowe

Widoczne u góry Ustawień, gdy włączone jest Podświetlenie nocne.

Kafelek Szybkie ustawienia

Kafelek Szybkie ustawienia zachowuje się identycznie jak przełącznik Wł./Wył. w Ustawieniach > Wyświetlacz > Podświetlenie nocne .