Mode standby TV

Di Android 11, tidur tidak memperhatikan adalah fitur hemat daya yang memungkinkan waktu tunggu tidak aktif pengguna ditetapkan setelah layar dimatikan, bahkan 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 untuk memperingatkan pengguna bahwa perangkat akan memasuki 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 Pemutaran Sekali Sentuh
  • Memulai sesi transmisi baru

Penyesuaian

Jika fitur ini diaktifkan, perangkat akan menampilkan peringatan di layar setelah pengguna tidak aktif selama waktu yang ditentukan. Jika tidak ada tindakan yang dilakukan, layar akan nonaktif. 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 saat tidak ada aktivitas pengguna sebelum layar dinonaktifkan (meskipun wakelock layar aktif).
    • Ditetapkan pada waktu build.
    • Jika nilainya antara 0 dan config_minimumScreenOffTimeout, waktu tunggu ditetapkan ke config_minimumScreenOffTimeout untuk mencegah perangkat menonaktifkan layarnya segera setelah diaktifkan.
    • 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 tidak ada aktivitas default yang ditetapkan oleh config_attentiveTimeout.
    • Dapat disetel 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 waktu untuk menampilkan pesan peringatan kepada pengguna sebelum layar dinonaktifkan setelah pengguna tidak aktif dalam waktu yang lama.
    • Nilai harus jauh di bawah waktu tunggu tidak aktif saat tidur 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.

Referensi 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 perintah berikut.

  1. Mengganti 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

Pengujian CTS untuk fitur ini ada 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 dinonaktifkan 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. Tetapkan waktu tunggu tidur tidak fokus beberapa detik lebih lama dari durasi dialog peringatan.
    adb shell settings put secure attentive_timeout 32000
  3. Mulai memutar kembali video (untuk mendapatkan wakelock layar).
  4. Verifikasi bahwa dialog peringatan tidur muncul setelah beberapa detik.
  5. Pastikan layar dinonaktifkan setelah waktu tunggu yang ditetapkan berakhir.