Menerapkan Cahaya Malam

Penelitian menunjukkan bahwa cahaya biru dari layar dapat berdampak negatif pada tidur. Android 7.1.1 memperkenalkan fitur yang disebut Night Light yang mengurangi jumlah cahaya biru yang dipancarkan oleh tampilan perangkat agar lebih sesuai dengan cahaya alami waktu dan lokasi pengguna. Android 8.0 memperkenalkan fitur tambahan yang memberi pengguna kontrol lebih besar atas intensitas efek Cahaya Malam. Android 10 memperkenalkan layanan sistem COLOR_DISPLAY_SERVICE , dengan permukaan API sistem untuk memberi sistem, Pengaturan, dan UI Sistem kontrol lebih besar atas semua transformasi warna, termasuk Cahaya Malam.

Night Light memerlukan implementasi Hardware Composer HAL 2.0 (HWC 2) yang dapat menerapkan matriks yang diteruskan ke setColorTransform untuk melakukan pewarnaan tanpa memengaruhi daya, kinerja, dan kompatibilitas aplikasi.

Penerapan

Produsen perangkat dapat mengaktifkan implementasi default fitur dengan menggunakan flag berikut yang ditentukan dalam 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>

Kode dibagi antara kerangka kerja, layanan sistem, UI Sistem, dan Pengaturan. Fungsionalitas inti dikendalikan oleh ColorDisplayManager (didukung oleh ColorDisplayService ).

Produsen perangkat harus menyesuaikan jalur warna berdasarkan karakteristik panel tampilan perangkat, termasuk titik putih, gamut, dan warna yang diinginkan. Anda dapat mengubah jalan warna tanpa mengubah implementasi dasar dengan menggunakan overlay konfigurasi. Konfigurasi ini dinyatakan sebagai persamaan kuadrat untuk masing-masing warna merah, hijau, dan biru, dalam bentuk v res = v a t 2 + v b t + v y-int di mana t adalah masukan suhu dalam Kelvin, sebagaimana ditentukan dalam rentang antara config_nightDisplayColorTemperatureMin dan config_nightDisplayColorTemperatureMax (seperti yang dijelaskan di bagian sebelumnya), dan v a , v b , dan v y-int masing-masing adalah a-koefisien, b-koefisien, dan y-intercept, untuk kurva primer yang diberikan, sebagai ditunjukkan di bawah ini.

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

fitur UI

Karena Night Light adalah fitur yang menghadap pengguna, pengguna harus dapat mengontrolnya. Ada implementasi penuh dari pengaturan dalam proyek Android Open Source Project (AOSP) paket/aplikasi/Pengaturan yang dapat dirujuk oleh produsen perangkat untuk implementasi Pengaturan mereka. Pelaksana harus menangani maksud Settings.ACTION_NIGHT_DISPLAY_SETTINGS untuk mengekspos pengaturan ini.

Pengaturan

Pengaturan untuk Night Light ada di Settings > Display > Night Light . Dari sana, pengguna dapat mempelajari tentang Night Light, mengatur jadwalnya, dan menyalakan atau mematikannya.

  • Nyalakan Secara Otomatis
    • Never: Night Light tidak akan pernah menyala secara otomatis dan harus diaktifkan dengan tombol On/Off manual.
    • Jadwal khusus: Lampu Malam menyala pada waktu Mulai yang ditentukan [default: 22:30] dan mati pada waktu Akhir yang ditentukan [default: 6:30 pagi].
    • Matahari terbenam hingga matahari terbit: Lampu Malam menyala saat matahari terbenam dan mati saat matahari terbit. Waktu matahari terbit dan terbenam tergantung pada lokasi perangkat dan waktu dalam setahun.
  • On / Off: Toggle yang mengontrol status Night Light saat ini. Status ini menghormati aturan otomatis yang ada. Misalnya, jika Night Light dinyalakan pada pukul 17:30 (sebelum aturan otomatis akan menyalakannya pada 22:30), Night Light akan tetap mati pada 6:30 dan jika Night Light dimatikan pada 5 :30 pagi (sebelum mati jam 6:30 pagi), masih akan menyala jam 10:30 malam
  • Intensitas: Seekbar yang mengontrol tingkat rona dengan menggeser dari hangat ke dingin. Seekbar dapat dinonaktifkan saat Lampu Malam tidak diaktifkan.
  • Teks informasi: Mengajarkan pengguna apa yang Night Light lakukan dan mengapa.

Pengaturan bersyarat

Terlihat di bagian atas Pengaturan saat Lampu Malam menyala.

Ubin Pengaturan Cepat

Ubin Pengaturan Cepat berperilaku identik dengan sakelar Nyala/Mati di Pengaturan > Tampilan > Lampu Malam .