Menerapkan lampu malam

Penelitian menunjukkan bahwa cahaya biru dari layar dapat berdampak negatif pada tidur. Android 7.1.1 memperkenalkan fitur bernama Cahaya Malam yang mengurangi jumlah cahaya biru yang dipancarkan oleh layar perangkat agar lebih cocok dengan cahaya alami pada waktu dan lokasi pengguna. Android 8.0 memperkenalkan fitur tambahan yang memberi pengguna kontrol lebih besar terhadap intensitas efek Cahaya Malam. Android 10 memperkenalkan layanan sistem COLOR_DISPLAY_SERVICE , dengan permukaan API sistem untuk memberi sistem, Setelan, 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, performa, dan kompatibilitas aplikasi.

Penerapan

Produsen perangkat dapat mengaktifkan implementasi default fitur ini dengan menggunakan tanda 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 jalur warna tanpa mengubah implementasi dasar dengan menggunakan hamparan konfigurasi. Konfigurasi ini dinyatakan dalam persamaan kuadrat untuk masing-masing warna merah, hijau, dan biru, dalam bentuk v res = v a t 2 + v b t + v y-int dengan t adalah masukan suhu dalam Kelvin, sebagaimana ditentukan dalam berkisar antara config_nightDisplayColorTemperatureMin dan config_nightDisplayColorTemperatureMax (seperti dijelaskan di bagian sebelumnya), dan v a , v b , dan v y-int masing-masing merupakan koefisien a, koefisien b, dan perpotongan y, untuk kurva primer tertentu, 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 dapat diakses oleh pengguna, pengguna harus dapat mengontrolnya. Terdapat implementasi penuh pengaturan dalam proyek paket/aplikasi/Pengaturan Proyek Sumber Terbuka Android (AOSP) yang dapat dirujuk oleh produsen perangkat untuk implementasi Pengaturan mereka. Implementer harus menangani maksud Settings.ACTION_NIGHT_DISPLAY_SETTINGS untuk mengekspos pengaturan ini.

Pengaturan

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

  • Nyalakan Secara Otomatis
    • Tidak pernah: Lampu Malam tidak akan pernah menyala secara otomatis dan harus diaktifkan dengan tombol Nyala / Mati manual.
    • Jadwal khusus: Lampu Malam menyala pada waktu Mulai yang ditentukan [default: 22:30] dan mati pada waktu Berakhir yang ditentukan [default: 6:30].
    • Matahari terbenam hingga matahari terbit: Lampu Malam menyala saat matahari terbenam dan mati saat matahari terbit. Waktu matahari terbit dan terbenam bergantung pada lokasi perangkat dan waktu dalam setahun.
  • Nyala / Mati: Tombol yang mengontrol status Cahaya Malam saat ini. Negara bagian ini menghormati aturan otomatis yang ada. Misalnya, jika Lampu Malam diaktifkan pada pukul 17.30 (sebelum aturan otomatis menyalakannya pada pukul 22.30), Lampu Malam akan tetap mati pada pukul 06.30. Dan jika Lampu Malam dimatikan pada pukul 5. :30 pagi (sebelum mati pada jam 6:30 pagi), masih akan menyala pada jam 10:30 malam
  • Intensitas: Seekbar yang mengontrol tingkat warna dengan menggeser dari hangat ke dingin. Seekbar dapat dinonaktifkan saat Lampu Malam tidak diaktifkan.
  • Teks informasi: Mengajari pengguna apa yang dilakukan Night Light dan alasannya.

Pengaturannya bersyarat

Terlihat di bagian atas Pengaturan saat Lampu Malam menyala.

Ubin Pengaturan Cepat

Ubin Pengaturan Cepat berperilaku sama dengan tombol Nyala / Mati di Pengaturan > Tampilan > Cahaya Malam .