A pesquisa sugere que a luz azul das telas pode ter um impacto negativo no sono. O Android 7.1.1 introduziu um recurso chamado Night Light que reduz a quantidade de luz azul emitida pela tela do dispositivo para corresponder melhor à luz natural da hora do dia e da localização do usuário. O Android 8.0 introduziu um recurso adicional que dá aos usuários mais controle sobre a intensidade do efeito Night Light. O Android 10 apresenta o serviço do sistema COLOR_DISPLAY_SERVICE
, com uma superfície de API do sistema para dar ao sistema, às configurações e à IU do sistema mais controle sobre todas as transformações de cores, incluindo Night Light.
Night Light requer uma implementação de Hardware Composer HAL 2.0 (HWC 2) que pode aplicar a matriz passada para setColorTransform
para realizar tingimento sem afetar a potência, o desempenho e a compatibilidade do aplicativo.
Implementação
Os fabricantes de dispositivos podem ativar a implementação padrão do recurso usando os seguintes sinalizadores definidos 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 estrutura, serviços do sistema, UI do sistema e configurações. A funcionalidade principal é controlada pelo ColorDisplayManager
(apoiado pelo ColorDisplayService
).
Os fabricantes de dispositivos devem personalizar a rampa de cores com base nas características do painel de exibição do dispositivo, incluindo ponto branco, gama e cor desejada. Você pode alterar a rampa de cores sem alterar a implementação básica usando uma sobreposição de configuração. Esta configuração é expressa como uma equação quadrática para cada vermelho, verde e azul, na forma v res = v a t 2 + v b t + v y-int onde t é a entrada de temperatura em Kelvin, conforme especificado no intervalo entre config_nightDisplayColorTemperatureMin
e config_nightDisplayColorTemperatureMax
(conforme descrito na seção anterior), e v a , v b e v y-int são o coeficiente a, o coeficiente b e a interceptação y, respectivamente, para a curva do primário fornecido, como 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 do usuário
Como o Night Light é um recurso voltado para o usuário, os usuários precisam ser capazes de controlá-lo. Há uma implementação completa das configurações no projeto de pacotes/aplicativos/configurações do Android Open Source Project (AOSP) que os fabricantes de dispositivos podem consultar para sua implementação de configurações. Os implementadores devem lidar com a intenção Settings.ACTION_NIGHT_DISPLAY_SETTINGS
para expor essa configuração.
Configurações
As configurações de Luz Noturna estão em Configurações > Tela > Luz Noturna . A partir daí, os usuários podem aprender sobre o Night Light, definir sua programação e ligá-lo ou desligá-lo.
- Ativar automaticamente
- Nunca: Night Light nunca ligará automaticamente e deve ser ativado com o botão liga / desliga manual.
- Programação personalizada: a luz noturna é ligada em um horário de início especificado [padrão: 22h30] e desligada em um horário de término especificado [padrão: 6h30].
- Pôr do sol ao nascer do sol: a luz noturna acende ao pôr do sol e apaga ao nascer do sol. A hora do nascer e do pôr do sol depende da localização do dispositivo e da época do ano.
- Ligado / Desligado: Alterna que controla o estado atual do Night Light. Este estado respeita as regras automáticas existentes. Por exemplo, se o Night Light estiver ativado às 17h30 (antes que a regra automática o ligasse às 22h30), o Night Light ainda será desligado às 6h30. :30h (antes de desligar às 6h30), ainda ligará às 22h30
- Intensidade: Barra de busca que controla o nível de tonalidade deslizando do quente para o frio. A barra de busca pode ser desativada quando o Night Light não está ativado.
- Texto informativo: Ensina ao usuário o que o Night Light faz e por quê.
Configurações condicionais
Visível na parte superior das Configurações quando o Night Light está ativado.
Bloco Configurações rápidas
O bloco Configurações rápidas se comporta de forma idêntica ao botão Ligar/Desligar em Configurações > Tela > Luz noturna .