Mode TV standby

Di Android 11, tidur tidak memperhatikan adalah fitur hemat daya yang memungkinkan waktu tunggu ketidakaktifan pengguna ditetapkan, lalu layar dinonaktifkan, meskipun jika jendela dengan FLAG_KEEP_SCREEN_ON terlihat atau wakelock level FULL_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCK, atau SCREEN_DIM_WAKE_LOCK dipertahankan. 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 tanda USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS), 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 HDMI CEC tertentu, seperti One Touch Play
  • Memulai sesi transmisi baru

Penyesuaian

Jika fitur diaktifkan, perangkat akan menampilkan peringatan di layar setelah waktu tidak aktif pengguna yang ditentukan. 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 sudah diterapkan).
    • Ditetapkan pada waktu build.
    • Jika nilainya antara 0 dan config_minimumScreenOffTimeout, waktu tunggu ditetapkan ke config_minimumScreenOffTimeout untuk mencegah perangkat menonaktifkan layarnya segera setelah aktif.
    • 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 menggantikan 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 akan ditampilkan kepada pengguna sebelum layar dinonaktifkan setelah pengguna 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).

Tampilkan 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 di 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 perintah berikut.

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

Validasi

Uji CTS untuk fitur ini tersedia 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 mematikan layar.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Tetapkan waktu tunggu tidur yang tidak memperhatikan menjadi beberapa detik lebih lama dari durasi dialog peringatan.
    adb shell settings put secure attentive_timeout 32000
  3. Mulai memutar video (untuk mendapatkan wakelock layar).
  4. Pastikan dialog peringatan tidur muncul setelah beberapa detik.
  5. Pastikan layar mati setelah waktu tunggu yang ditetapkan berakhir.