Standby TV

In Android 11, il sonno disattento è una funzione di risparmio energetico che consente a un utente di timeout di inattività da impostare dopo di che lo schermo si spegne, anche se le finestre con FLAG_KEEP_SCREEN_ON sono visibili o wakelocks di livello FULL_WAKE_LOCK , SCREEN_BRIGHT_WAKE_LOCK o SCREEN_DIM_WAKE_LOCK sono detenuti. Wakelocks con livello di PARTIAL_WAKE_LOCK non sono interessati da questa funzione. Poco prima della scadenza del timeout, può essere visualizzato un messaggio che avverte l'utente che il dispositivo andrà in sospensione se non interagisce con il dispositivo.

In questo contesto, l'attività dell'utente si riferisce a tutto ciò che fa scattare una chiamata a PowerManager#userActivity (senza USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS bandiera), incluso ma non limitato a:

  • Interagire con il touchscreen
  • Premendo un pulsante fisico
  • Inserisci eventi da un accessorio esterno (ad esempio, tastiera connessa, telecomando Bluetooth, telecomando IR)
  • Interazione vocale
  • Ricezione di determinati messaggi HDMI CEC, come One Touch Play
  • Avvio di una nuova sessione di cast

personalizzazione

Se la funzione è abilitata, il dispositivo mostra un avviso sullo schermo dopo un tempo specificato di inattività dell'utente. Se non viene intrapresa alcuna azione, lo schermo si spegne. Puoi personalizzare la funzione utilizzando queste opzioni di configurazione.

Configurazione del timeout

Per configurare il timeout, aggiornare i seguenti elementi in frameworks/base/core/res/res/values/config.xml :

  • config_attentiveTimeout
    • Specifica il tempo predefinito in millisecondi di inattività dell'utente dopo il quale lo schermo si spegne (anche se sono attivi i wakelock dello schermo).
    • Impostato in fase di compilazione.
    • Se il valore è compreso tra 0 e config_minimumScreenOffTimeout , il timeout è impostato config_minimumScreenOffTimeout per impedire al dispositivo di spegnimento suo schermo poco dopo il risveglio.
    • Default: -1 , che disabilita questa caratteristica.

Sovrascrivere il timeout predefinito

Per sovrascrivere l'impostazione di timeout predefinita, aggiorna il seguente elemento.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • Se impostato, sovrascrive quella di default disattento timeout impostato sonno da config_attentiveTimeout .
    • Può essere impostato in fase di esecuzione.

Configurazione della durata prima che appaia l'avviso

Per configurare la durata, aggiornare i seguenti elementi in frameworks/base/core/res/res/values/config.xml :

  • config_attentiveWarningDuration
    • Per quanto tempo mostrare un messaggio di avviso all'utente prima che lo schermo si spenga dopo un'inattività prolungata dell'utente.
    • Il valore dovrebbe essere ben al di sotto del timeout di sospensione per disattenzione impostato, altrimenti la finestra di avviso viene visualizzata costantemente e non può essere ignorata.
    • Predefinito: 30000 (anni '30).

Mostrare le preferenze di timeout in TvSettings

Per mostrare le preferenze di timeout, aggiornare i seguenti elementi in packages/apps/TvSettings/Settings/res/values/config.xml :

  • config_show_standby_timeout
    • Indica se mostrare un elemento di preferenza per consentire lo spegnimento dello schermo durante la riproduzione multimediale.
    • Predefinito: false .

Risorse per l'interfaccia utente di avviso

  • Il layout della finestra di avviso è definito in frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml .
  • Le seguenti stringhe per la finestra sono definiti in frameworks/base/packages/SystemUI/res/values/strings.xml e frameworks/base/packages/SystemUI/res-product/values/strings.xml .
    • inattentive_sleep_warning_title
    • inattentive_sleep_warning_message

Le configurazioni e le risorse del tempo di compilazione possono essere modificate dagli overlay delle risorse.

Implementazione

Abilita la funzione utilizzando quanto segue.

  1. Sostituire il valore predefinito config_attentiveTimeout .
  2. Se si utilizza l'AOSP TvSettings :
    • Disattivare la funzionalità nelle impostazioni ridefinendo config_show_standby_timeout .
    • Implementare le proprie impostazioni che stabiliscono Settings.Secure.ATTENTIVE_TIMEOUT .

Convalida

Le prove CTS per la funzionalità sono a cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java .

Esempi e fonte

  • frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java contiene l'implementazione dell'interfaccia utente avviso predefinito.
  • packages/apps/TvSettings fornisce un esempio di come esporre la funzionalità nelle impostazioni.

Esempio di caso di test manuale

  1. Assicurarsi che il stay_on_while_plugged_in impostazione sviluppatore è fuori se i rapporti HAL salute del dispositivo che il dispositivo ha una batteria ( battery_present è true ) come questo potrebbe impedire che la funzione si spenga lo schermo.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Imposta un timeout di sospensione per disattenzione su alcuni secondi in più rispetto alla durata della finestra di avviso.
    adb shell settings put secure attentive_timeout 32000
  3. Avvia la riproduzione di un video (per acquisire un wakelock dello schermo).
  4. Verificare che la finestra di dialogo di avviso di sospensione venga visualizzata dopo alcuni secondi.
  5. Verificare che lo schermo si spenga allo scadere del timeout impostato.