Riset 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
alam pada waktu dan lokasi pengguna. Android 8.0 memperkenalkan fitur tambahan
yang memberi pengguna kontrol lebih besar atas intensitas efek Lampu Malam.
Android 10 memperkenalkan
layanan sistem COLOR_DISPLAY_SERVICE
, dengan platform API
sistem untuk memberi sistem, Setelan, dan UI Sistem lebih banyak kontrol atas semua transformasi
warna, termasuk Lampu Malam.
Lampu Malam memerlukan
penerapan Hardware
Composer HAL 2.0 (HWC 2) yang dapat menerapkan matriks yang diteruskan ke
setColorTransform
untuk melakukan tinting tanpa memengaruhi daya,
performa, dan kompatibilitas aplikasi.
Implementasi
Produsen perangkat dapat mengaktifkan penerapan default fitur dengan
menggunakan flag berikut yang ditentukan di
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 framework, layanan sistem, UI Sistem, dan Setelan. Fungsi
inti dikontrol oleh ColorDisplayManager
(didukung oleh
ColorDisplayService
).
Produsen perangkat harus menyesuaikan gradien warna berdasarkan karakteristik
panel layar perangkat, termasuk titik putih, gamut, dan warna yang diinginkan. Anda dapat mengubah
ramp warna tanpa mengubah implementasi dasar menggunakan overlay konfigurasi.
Konfigurasi ini dinyatakan sebagai persamaan kuadrat untuk setiap warna merah, hijau, dan biru,
dalam bentuk vres = vat2 + vbt + vy-int
dengan t adalah input suhu dalam Kelvin, seperti yang ditentukan dalam rentang antara
config_nightDisplayColorTemperatureMin
dan
config_nightDisplayColorTemperatureMax
(seperti yang dijelaskan
di bagian sebelumnya), dan va, vb, dan vy-int masing-masing adalah
koefisien a, koefisien b, dan intersep y, untuk kurva primer yang diberikan,
seperti yang ditunjukkan di bawah.
<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 Lampu Malam adalah fitur yang terlihat oleh pengguna, pengguna harus dapat mengendalikannya. Ada implementasi setelan lengkap dalam project
packages/apps/Settings
Android Open Source Project (AOSP)
yang dapat dirujuk oleh produsen perangkat untuk implementasi
Setelan mereka. Implementer harus menangani
intent
Settings.ACTION_NIGHT_DISPLAY_SETTINGS
untuk mengekspos setelan ini.
Setelan
Setelan untuk Cahaya Malam ada di Setelan > Tampilan > Cahaya Malam. Dari sana, pengguna dapat mempelajari Lampu Malam, menyetel jadwalnya, dan mengaktifkan atau menonaktifkannya.
- Aktifkan Otomatis
- Tidak pernah: Cahaya Malam tidak akan pernah aktif secara otomatis dan harus diaktifkan dengan tombol Aktif / Nonaktif manual.
- Jadwal kustom: Mode Cahaya Malam akan aktif pada Waktu mulai yang ditentukan [default: 22.30] dan nonaktif pada Waktu berakhir yang ditentukan [default: 06.30].
- Matahari terbenam hingga matahari terbit: Cahaya Malam akan aktif saat matahari terbenam dan nonaktif saat matahari terbit. Waktu matahari terbit dan terbenam bergantung pada lokasi perangkat dan waktu dalam setahun.
- Aktif / Nonaktif: Tombol yang mengontrol status Cahaya Malam saat ini. Status ini mematuhi aturan otomatis yang ada. Misalnya, jika Cahaya Malam diaktifkan pada pukul 17.30 (sebelum aturan otomatis mengaktifkannya pada pukul 22.30), Mode Cahaya Malam akan tetap dinonaktifkan pada pukul 06.30. Dan jika Mode Cahaya Malam dinonaktifkan pada pukul 05.30 (sebelum dinonaktifkan pada pukul 06.30), mode tersebut akan tetap diaktifkan pada pukul 22.30.
- Intensitas: Seekbar yang mengontrol tingkat tint dengan menggeser dari hangat ke dingin. Panel geser dapat dinonaktifkan jika Cahaya Malam tidak diaktifkan.
- Teks informatif: Mengajari pengguna fungsi Lampu Malam dan alasannya.
Setelan kondisional
Terlihat di bagian atas Setelan saat Mode Cahaya Malam aktif.
Kartu Setelan Cepat
Kartu Setelan Cepat berperilaku sama dengan tombol Aktif / Nonaktif di Setelan > Tampilan > Lampu Malam.