Pesquisas sugerem que a luz azul das telas pode ter um impacto negativo no
sono. O Android 7.1.1 introduziu um recurso chamado Modo noturno, que reduz a
quantidade de luz azul emitida pela tela do dispositivo para corresponder melhor à luz
natural do dia e do local do usuário. O Android 8.0 introduziu um recurso
adicional que oferece aos usuários mais controle sobre a intensidade do efeito do Modo noturno.
O Android 10 apresenta o
serviço do sistema COLOR_DISPLAY_SERVICE
, com uma API do sistema
para dar ao sistema, às Configurações e à IU do sistema mais controle sobre todas as transformações
de cores, incluindo o Modo noturno.
O Night Light requer uma implementação do
Hardware
Composer HAL 2.0 (HWC 2) que possa aplicar a matriz transmitida a
setColorTransform
para realizar a coloração sem afetar a energia,
o desempenho e a compatibilidade do app.
Implementação
Os fabricantes de dispositivos podem ativar a implementação padrão do recurso
usando as seguintes flags definidas em
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>
O código é dividido entre framework, serviços do sistema, interface do sistema e configurações. A
funcionalidade principal é controlada por ColorDisplayManager
(apoiada por
ColorDisplayService
).
Os fabricantes de dispositivos precisam personalizar a rampa de cores com base nas características do
painel de exibição do dispositivo, incluindo o ponto branco, a gama e a cor desejada. É possível mudar a
rampa de cores sem mudar a implementação de base usando uma sobreposição de configuração.
Essa configuração é expressa como uma equação quadrática para cada um dos vermelho, verde e azul,
na forma vres = vat2 + vbt + vy-int,
em que t é a entrada de temperatura em kelvin, conforme especificado no intervalo entre
config_nightDisplayColorTemperatureMin
e
config_nightDisplayColorTemperatureMax
(conforme descrito
na seção anterior), e va, vb e vy-int são o
coeficiente a, o coeficiente b e a interseção y, respectivamente, para a curva primária dada,
conforme indicado abaixo.
<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>
Recursos da interface
Como o Night Light é um recurso voltado ao usuário, ele precisa ser controlado
pelo usuário. Há uma implementação completa das configurações no projeto
packages/apps/Settings
do Android Open Source Project (AOSP)
que os fabricantes de dispositivos podem usar como referência para a implementação
das configurações. Os implementadores precisam processar a
intent Settings.ACTION_NIGHT_DISPLAY_SETTINGS
para expor essa configuração.
Configurações
As configurações do Modo noturno estão em Configurações > Tela > Modo noturno. Nela, os usuários podem saber mais sobre o recurso, definir a programação e ativar ou desativar.
- Ativar automaticamente
- Nunca:o Modo noturno nunca será ativado automaticamente e precisa ser ativado manualmente com a opção Ativar / Desativar.
- Programação personalizada: o Modo noturno é ativado em um Horário de início especificado [padrão: 22h30] e desativado em um Horário de término especificado [padrão: 6h30].
- Do anoitecer ao amanhecer:o Modo noturno é ativado ao pôr do sol e desativado ao amanhecer. O horário do nascer e do pôr do sol depende da localização do dispositivo e da época do ano.
- Ativar / Desativar:alternar que controla o estado atual do Modo noturno. Esse estado respeita as regras automáticas atuais. Por exemplo, se o Modo noturno for ativado às 17h30 (antes da regra automática ativá-lo às 22h30), O Modo noturno ainda será desativado às 6h30. E se o Modo noturno for desativado às 5h30 (antes de ser desativado às 6h30), ele ainda será ativado às 22h30.
- Intensidade:barra de busca que controla o nível de matiz deslizando de quente para frio. A barra de busca pode ser desativada quando o Modo noturno não está ativado.
- Texto informativo:ensina ao usuário o que o Modo noturno faz e por quê.
Configurações condicionais
Fica visível na parte de cima das Configurações quando o Modo noturno está ativado.
Bloco "Configurações rápidas"
O bloco de Configurações rápidas se comporta de maneira idêntica ao botão Ativar / Desativar em Configurações > Tela > Luz noturna.