Implementar luz noturna

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 .