Menerapkan cahaya malam

Penelitian menunjukkan bahwa cahaya biru dari layar dapat berdampak negatif pada tidur. Android 7.1.1 memperkenalkan fitur bernama Cahaya Malam yang mengurangi cahaya biru yang dipancarkan oleh layar perangkat agar lebih cocok dengan berdasarkan waktu dan lokasi pengguna. Android 8.0 memperkenalkan yang memberi pengguna kontrol lebih besar atas intensitas efek Cahaya Malam. Android 10 memperkenalkan Layanan sistem COLOR_DISPLAY_SERVICE, dengan API sistem untuk memberikan kontrol lebih besar kepada sistem, Setelan, dan UI Sistem atas semua warna transformasi, termasuk Cahaya Malam.

Cahaya Malam memerlukan Perangkat Keras Implementasi Composer HAL 2.0 (HWC 2) yang dapat menerapkan matriks yang diteruskan ke setColorTransform untuk melakukan penambahan tint tanpa memengaruhi daya, performa, dan kompatibilitas aplikasi.

Implementasi

Produsen perangkat dapat mengaktifkan implementasi fitur secara {i>default<i} dengan menggunakan penanda berikut yang didefinisikan 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 framework, layanan sistem, UI Sistem, dan Setelan. Tujuan fungsi inti dikontrol oleh ColorDisplayManager (didukung oleh ColorDisplayService).

Produsen perangkat harus menyesuaikan ramp warna berdasarkan karakteristik panel tampilan perangkat, termasuk titik putih, gamut, dan warna yang diinginkan. Anda dapat mengubah 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 vres = vat2 + vbt + vy-int di mana t adalah input suhu dalam Kelvin, seperti yang ditentukan dalam rentang antara config_nightDisplayColorTemperatureMin dan config_nightDisplayColorTemperatureMax (sebagaimana dijelaskan di bagian sebelumnya), dan va, vb, dan vy-int adalah koefisien a, koefisien b, dan perpotongan y untuk kurva primer yang diberikan, seperti yang 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 Cahaya Malam adalah fitur yang ditampilkan kepada pengguna, pengguna harus dapat mengontrol anotasi. Terdapat implementasi lengkap setelan di Android Open Source Project (AOSP) paket/aplikasi/Setelan yang dapat dirujuk oleh produsen perangkat untuk Setelan terlepas dari implementasi layanan. Implementasi harus menangani Settings.ACTION_NIGHT_DISPLAY_SETTINGS untuk mengekspos setelan ini.

Setelan

Setelan untuk Cahaya Malam ada di Setelan > Tampilan > Malam Ringan. Dari sana, pengguna dapat mempelajari tentang Cahaya Malam, mengatur jadwal, lalu aktifkan atau nonaktifkan.

  • Aktifkan Secara Otomatis
    • Tidak pernah: Cahaya Malam tidak akan aktif secara otomatis dan harus diaktifkan dengan tombol Aktif / Nonaktif manual.
    • Jadwal kustom: Cahaya Malam menyala pada waktu yang ditentukan Waktu mulai [default: 22.30] dan mati pada waktu tertentu Waktu berakhir [default: 06.30].
    • Matahari terbenam hingga matahari terbit: Cahaya Malam aktif saat matahari terbenam dan nonaktif saat matahari terbit. Waktu matahari terbit dan terbenam bergantung pada lokasi perangkat dan sepanjang tahun.
  • Aktif / Nonaktif: Tombol yang mengontrol status Mode Malam saat ini Ringan. Status ini mematuhi aturan otomatis yang ada. Misalnya, jika Night Lampu dinyalakan pukul 17.30. (sebelum aturan otomatis mengaktifkannya pukul 22.30), Cahaya Malam akan tetap mati pada pukul 06.30 Dan jika Malam Hari Dimatikan pada pukul 05.30 (sebelum mati pada pukul 06.30), maka akan masih nyala jam 10.30 malam.
  • Intensitas: Seekbar yang mengontrol level tint dengan menggeser dari hangat ke sejuk. Bilah geser dapat dinonaktifkan jika Cahaya Malam tidak diaktifkan.
  • Teks informasi: Mengajari pengguna fungsi Cahaya Malam dan mengapa.

Setelan bersyarat

Terlihat di bagian atas Setelan saat Cahaya Malam aktif.

Kartu Setelan Cepat

Kartu Setelan Cepat berperilaku identik dengan tombol Aktif / Nonaktif aktifkan di Setelan > Tampilan > Cahaya Malam.