Implementa la luce notturna

In base alla ricerca, la luce blu degli schermi può avere un impatto negativo dormire meglio. Android 7.1.1 ha introdotto una funzionalità chiamata Luminosità notturna che riduce quantità di luce blu emessa dal display del dispositivo per adattarsi meglio alla luce naturale luce dell'ora del giorno e della località dell'utente. Android 8.0 ha introdotto un'ulteriore che offre agli utenti un maggiore controllo sull'intensità dell'effetto Luce notturna. Android 10 introduce COLOR_DISPLAY_SERVICE servizio di sistema, con un'API di sistema per dare al sistema, alle Impostazioni e all'UI di sistema più controllo su tutti i colori trasformazioni avanzate, inclusa la luminosità notturna.

La funzionalità di luminosità notturna richiede Articoli di ferramenta Composer HAL 2.0 (HWC 2) implementazione che può applicare la matrice passata a setColorTransform per eseguire la colorazione senza influire sull'alimentazione, prestazioni e compatibilità delle app.

Implementazione

I produttori di dispositivi possono attivare l'implementazione predefinita della funzionalità utilizzando i seguenti flag definiti 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 in framework, servizi di sistema, UI di sistema e impostazioni. La la funzionalità di base è controllata da ColorDisplayManager (supportata da ColorDisplayService).

I produttori di dispositivi devono personalizzare la rampa di colore in base alle caratteristiche del schermo del dispositivo, inclusi punto di bianco, gamut e colore desiderato. Puoi modificare colore senza modificare l'implementazione di base utilizzando un overlay di configurazione. Questa configurazione viene espressa sotto forma di equazione quadrata per ciascuno dei campi rosso, verde e blu, nel formato vres = vat2 + vbt + vy-int dove t è l'input di temperatura in Kelvin, come specificato nell'intervallo tra config_nightDisplayColorTemperatureMin e config_nightDisplayColorTemperatureMax (come descritto nella sezione precedente) e va, vb e vy-int sono le rispettivamente per la curva a-coefficiente, il coefficiente b e l'intercetta y per la curva del primario. 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à UI

Poiché la luminosità notturna è una funzionalità rivolta agli utenti, gli utenti devono poter controllare li annotino. C'è un'implementazione completa delle impostazioni in Android Open Source Progetto (AOSP) pacchetti/app/impostazioni progetto a cui i produttori di dispositivi possono fare riferimento per le proprie Impostazioni implementazione. Gli implementatori devono gestire Settings.ACTION_NIGHT_DISPLAY_SETTINGS l'intento di esporre questa impostazione.

Impostazioni

Le impostazioni per la luminosità notturna si trovano in Impostazioni > Display > Sera Luce. Qui gli utenti possono conoscere la funzionalità Luminosità notturna, impostarne la programmazione e attivare o disattivare la funzionalità.

  • Attiva automaticamente
      .
    • Mai: la luminosità notturna non si attiverà mai automaticamente e Deve essere attivata con il pulsante di attivazione / disattivazione manuale.
    • Programmazione personalizzata:la luminosità notturna si attiva in base a un orario specificato Ora di inizio [predefinita: 22:30] e disattivata a un orario specificato Ora di fine [predefinita: 6:30].
    • Dal tramonto all'alba: la luminosità notturna si attiva al tramonto e si disattiva all'alba. L'ora dell'alba e del tramonto dipende dalla posizione del dispositivo. e il periodo dell'anno.
  • On/Off:attiva/disattiva per controllare lo stato attuale della modalità Notte. Luce. Questo stato rispetta le regole automatiche esistenti. Ad esempio, se Notte La luce viene accesa alle 17:30. (prima che la regola automatica lo attivi alle 22:30), La luminosità notturna continuerà a essere disattivata alle 6:30. La luce viene spenta alle 5:30 (prima di spegnersi alle 6:30), accendi sempre alle 22:30.
  • Intensità: Seekbar che controlla il livello di tinta scorrendo da Calda a Fredda. La barra di scorrimento può essere è disattivata quando la luminosità notturna non è attiva.
  • Testo informativo: spiega all'utente cosa fa la funzionalità di luminosità notturna e perché.

Impostazioni condizionali

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

Riquadro Impostazioni rapide

Il riquadro Impostazioni rapide si comporta in modo identico all'impostazione On / Off. attiva/disattiva in Impostazioni > Display > Luminosità notturna.