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 .