Mode TV standby

Di Android 11, tidur tanpa perhatian adalah fitur penghemat daya yang memungkinkan waktu tunggu ketidakaktifan pengguna disetel setelah layar dinonaktifkan, bahkan jika jendela dengan FLAG_KEEP_SCREEN_ON terlihat atau wakelock pada level FULL_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCK atau SCREEN_DIM_WAKE_LOCK akan ditangguhkan. Wakelock dengan level PARTIAL_WAKE_LOCK tidak terpengaruh oleh fitur ini. Sesaat sebelum waktu tunggu berakhir, pesan dapat ditampilkan yang memperingatkan pengguna bahwa perangkat akan beralih ke mode tidur jika mereka tidak berinteraksi dengan perangkat.

Dalam konteks ini, aktivitas pengguna mengacu pada apa pun yang memicu panggilan ke PowerManager#userActivity (tanpa USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS flag), termasuk, tetapi tidak terbatas pada:

  • Berinteraksi dengan layar sentuh
  • Menekan tombol fisik
  • Peristiwa input dari aksesori eksternal (misalnya, keyboard yang terhubung, remote Bluetooth, remote IR)
  • Interaksi suara
  • Menerima pesan CEC HDMI tertentu, seperti One Touch Play
  • Memulai sesi transmisi baru

Penyesuaian

Jika fitur ini diaktifkan, perangkat akan menampilkan peringatan di layar setelah waktu tertentu ketidakaktifan pengguna. Jika tidak ada tindakan yang dilakukan, layar akan mati. Anda dapat menyesuaikan fitur menggunakan opsi konfigurasi ini.

Mengonfigurasi waktu tunggu

Untuk mengonfigurasi waktu tunggu, perbarui elemen berikut di frameworks/base/core/res/res/values/config.xml:

  • config_attentiveTimeout
    • Menentukan waktu default dalam milidetik untuk tidak adanya aktivitas pengguna, setelah itu layar akan dinonaktifkan (meskipun wakelock layar diterapkan).
    • Tetapkan pada waktu build.
    • Jika nilainya antara 0 dan config_minimumScreenOffTimeout, waktu tunggu disetel ke config_minimumScreenOffTimeout untuk mencegah perangkat mematikan layarnya segera setelah bangun.
    • Default: -1, yang menonaktifkan fitur ini.

Mengganti waktu tunggu default

Untuk mengganti setelan waktu tunggu default, perbarui elemen berikut.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • Jika disetel, akan mengganti waktu tunggu tidur inattentif default yang disetel oleh config_attentiveTimeout.
    • Dapat ditetapkan saat runtime.

Mengonfigurasi durasi sebelum peringatan muncul

Untuk mengonfigurasi durasi, perbarui elemen berikut di frameworks/base/core/res/res/values/config.xml:

  • config_attentiveWarningDuration
    • Durasi pesan peringatan ditampilkan kepada pengguna sebelum layar dinonaktifkan tidak aktif dalam waktu lama.
    • Nilainya harus jauh di bawah waktu tunggu tidur tidak memperhatikan yang ditetapkan. Jika tidak, dialog peringatan akan terus ditampilkan dan tidak dapat ditutup.
    • Default: 30000 (30 detik).

Menampilkan preferensi waktu tunggu di TvSettings

Untuk menampilkan preferensi waktu tunggu, perbarui elemen berikut di packages/apps/TvSettings/Settings/res/values/config.xml:

  • config_show_standby_timeout
    • Menentukan apakah akan menampilkan item preferensi untuk mengizinkan penonaktifan layar selama pemutaran media.
    • Default: false.

Resource untuk UI peringatan

  • Tata letak dialog peringatan ditentukan dalam frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml.
  • String berikut untuk dialog ditentukan dalam frameworks/base/packages/SystemUI/res/values/strings.xml dan frameworks/base/packages/SystemUI/res-product/values/strings.xml.
    • inattentive_sleep_warning_title
    • inattentive_sleep_warning_message

Konfigurasi dan resource waktu build dapat diubah oleh overlay resource.

Implementasi

Aktifkan fitur menggunakan kode berikut.

  1. Ganti config_attentiveTimeout default.
  2. Jika menggunakan TvSettings AOSP:
    • Nonaktifkan fitur di setelan dengan menggantikan config_show_standby_timeout.
    • Menerapkan setelan Anda sendiri yang menetapkan Settings.Secure.ATTENTIVE_TIMEOUT.

Validasi

Pengujian CTS untuk fitur ini berada di cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java.

Contoh dan sumber

  • frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java berisi implementasi UI peringatan default.
  • packages/apps/TvSettings memberikan contoh cara mengekspos fitur di setelan.

Contoh kasus pengujian manual

  1. Pastikan setelan developer stay_on_while_plugged_in nonaktif jika HAL kesehatan perangkat melaporkan bahwa perangkat memiliki baterai (battery_present adalah true) karena hal ini dapat mencegah fitur menonaktifkan layar.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Setel waktu tunggu tidur yang tidak penuh perhatian menjadi beberapa detik lebih lama dari durasi dialog peringatan.
    adb shell settings put secure attentive_timeout 32000
  3. Mulai memutar video (untuk mendapatkan penguncian layar saat aktif).
  4. Pastikan dialog peringatan tidur muncul setelah beberapa detik.
  5. Pastikan layar dinonaktifkan setelah waktu tunggu yang disetel berakhir.