Implementa la luce notturna

La ricerca suggerisce che la luce blu degli schermi può avere un impatto negativo sul sonno. Android 7.1.1 ha introdotto una funzionalità chiamata Night Light che riduce la quantità di luce blu emessa dal display del dispositivo per adattarsi meglio alla luce naturale dell'ora del giorno e della posizione dell'utente. Android 8.0 ha introdotto una funzionalità aggiuntiva che offre agli utenti un maggiore controllo sull'intensità dell'effetto Luce notturna. Android 10 introduce il servizio di sistema COLOR_DISPLAY_SERVICE , con una superficie API di sistema per fornire al sistema, alle Impostazioni e all'interfaccia utente del sistema un maggiore controllo su tutte le trasformazioni di colore, inclusa la luce notturna.

Night Light richiede un'implementazione Hardware Composer HAL 2.0 (HWC 2) in grado di applicare la matrice passata a setColorTransform per eseguire la colorazione senza influire su potenza, prestazioni e compatibilità dell'app.

Implementazione

I produttori di dispositivi possono abilitare l'implementazione predefinita della funzionalità utilizzando i seguenti flag definiti in 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>

Il codice è suddiviso tra framework, servizi di sistema, interfaccia utente di sistema e impostazioni. La funzionalità principale è controllata da ColorDisplayManager (supportato da ColorDisplayService ).

I produttori di dispositivi dovrebbero personalizzare la scala di colori in base alle caratteristiche del pannello di visualizzazione del dispositivo, inclusi punto di bianco, gamma e colore desiderato. È possibile modificare la scala di colori senza modificare l'implementazione di base utilizzando una sovrapposizione di configurazione. Questa configurazione è espressa come un'equazione quadratica per ciascuno dei colori rosso, verde e blu, nella forma v res = v a t 2 + v b t + v y-int dove t è la temperatura in ingresso in Kelvin, come specificato nella tabella intervallo compreso tra config_nightDisplayColorTemperatureMin e config_nightDisplayColorTemperatureMax (come descritto nella sezione precedente) e v a , v b e v y-int sono rispettivamente il coefficiente a, il coefficiente b e l'intercetta y per la curva primaria data, come indicato di seguito.

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

Funzionalità dell'interfaccia utente

Poiché Night Light è una funzionalità rivolta all'utente, gli utenti devono essere in grado di controllarla. Esiste un'implementazione completa delle impostazioni nel progetto di pacchetti/app/impostazioni Android Open Source Project (AOSP) a cui i produttori di dispositivi possono fare riferimento per l'implementazione delle impostazioni. Gli implementatori devono gestire l'intento Settings.ACTION_NIGHT_DISPLAY_SETTINGS per esporre questa impostazione.

Impostazioni

Le impostazioni per Luce notturna si trovano in Impostazioni > Display > Luce notturna . Da lì, gli utenti possono conoscere Night Light, impostarne la pianificazione e accenderla o spegnerla.

  • Attiva automaticamente
    • Mai: la luce notturna non si accenderà mai automaticamente e deve essere attivata con l'interruttore manuale On/Off .
    • Programmazione personalizzata: la luce notturna si accende a un'ora di inizio specificata [impostazione predefinita: 22:30] e si spegne a un'ora di fine specificata [impostazione predefinita: 6:30].
    • Dal tramonto all'alba: la luce notturna si accende al tramonto e si spegne all'alba. L'ora dell'alba e del tramonto dipende dalla posizione del dispositivo e dal periodo dell'anno.
  • On/Off: attiva/disattiva che controlla lo stato attuale della luce notturna. Questo stato rispetta le regole automatiche esistenti. Ad esempio, se la Luce notturna viene attivata alle 17:30 (prima che la regola automatica la accendesse alle 22:30), la Luce notturna si spegnerà comunque alle 6:30. E se la Luce notturna viene disattivata alle 5 :30 (prima si spegne alle 6:30), si accenderà comunque alle 22:30
  • Intensità: Seekbar che controlla il livello di tinta facendo scorrere da caldo a freddo. La barra di ricerca può essere disabilitata quando la luce notturna non è attivata.
  • Testo informativo: insegna all'utente cosa fa la luce notturna e perché.

Impostazioni condizionali

Visibile nella parte superiore delle Impostazioni quando la Luce notturna è attiva.

Riquadro Impostazioni rapide

Il riquadro Impostazioni rapide si comporta in modo identico all'interruttore On/Off in Impostazioni > Display > Luce notturna .