Mode standby TV

Di Android 11, tidur tidak aktif adalah fitur hemat daya yang memungkinkan waktu tunggu tidak ada aktivitas pengguna ditetapkan setelah layar dinonaktifkan, meskipun 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. Tidak lama sebelum waktu tunggu berakhir, pesan dapat ditampilkan yang memperingatkan pengguna bahwa perangkat akan tidur jika mereka tidak berinteraksi dengan perangkat.

Dalam konteks ini, aktivitas pengguna mengacu pada apa pun yang memicu panggilan ke PowerManager#userActivity (tanpa flag 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 terhubung, remote Bluetooth, remote IR)
  • Interaksi suara
  • Menerima pesan HDMI CEC tertentu, seperti One Touch Play
  • Memulai sesi transmisi baru

Penyesuaian

Jika fitur ini diaktifkan, perangkat akan menampilkan peringatan di layar setelah waktu tidak ada aktivitas pengguna yang ditentukan. Jika tidak ada tindakan yang diambil, layar akan dinonaktifkan. Anda dapat menyesuaikan fitur ini 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 tidak ada aktivitas pengguna setelah layar dinonaktifkan (meskipun wakelock layar ada).
    • Ditetapkan pada waktu build.
    • Jika nilainya antara 0 dan config_minimumScreenOffTimeout, waktu tunggu akan ditetapkan ke config_minimumScreenOffTimeout untuk mencegah perangkat menonaktifkan 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 ditetapkan, akan mengganti waktu tunggu tidur tidak aktif default yang ditetapkan 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 menampilkan pesan peringatan kepada pengguna sebelum layar dinonaktifkan setelah tidak ada aktivitas pengguna dalam waktu lama.
    • Nilai harus jauh di bawah waktu tunggu tidur tidak aktif 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
    • Apakah akan menampilkan item preferensi untuk mengizinkan layar dinonaktifkan 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 di 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.

Penerapan

Aktifkan fitur ini menggunakan hal berikut.

  1. Ganti config_attentiveTimeout default.
  2. Jika menggunakan TvSettings AOSP:
    • Nonaktifkan fitur ini 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 menampilkan fitur ini di setelan.

Contoh kasus pengujian manual

  1. Pastikan setelan stay_on_while_plugged_in developer 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 aktif beberapa detik lebih lama dari durasi dialog peringatan.
    adb shell settings put secure attentive_timeout 32000
  3. Mulai putar video (untuk mendapatkan wakelock layar).
  4. Pastikan dialog peringatan tidur muncul setelah beberapa detik.
  5. Pastikan layar dinonaktifkan setelah waktu tunggu yang ditetapkan berakhir.