TV en espera

En Android 11, el sueño sin atención es una función de ahorro de energía que permite establecer un tiempo de espera de inactividad del usuario después del cual la pantalla se apaga, incluso si las ventanas con FLAG_KEEP_SCREEN_ON son visibles o se mantienen wakelocks de nivel FULL_WAKE_LOCK , SCREEN_BRIGHT_WAKE_LOCK o SCREEN_DIM_WAKE_LOCK . Los wakelocks con nivel PARTIAL_WAKE_LOCK no se ven afectados por esta función. Poco antes de que expire el tiempo de espera, se puede mostrar un mensaje que advierte al usuario que el dispositivo se pondrá en modo de suspensión si no interactúa con él.

En este contexto, la actividad del usuario se refiere a cualquier cosa que desencadene una llamada a PowerManager#userActivity (sin el indicador USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS ), incluido, entre otros:

  • Interactuando con la pantalla táctil
  • Pulsando un botón físico
  • Ingrese eventos desde un accesorio externo (por ejemplo, teclado conectado, control remoto Bluetooth, control remoto IR)
  • Interacción de voz
  • Recibir ciertos mensajes HDMI CEC, como One Touch Play
  • Iniciar una nueva sesión de transmisión

Personalización

Si la función está habilitada, el dispositivo muestra una advertencia en pantalla después de un tiempo específico de inactividad del usuario. Si no se realiza ninguna acción, la pantalla se apaga. Puede personalizar la función utilizando estas opciones de configuración.

Configurar el tiempo de espera

Para configurar el tiempo de espera, actualice el siguiente elemento en frameworks/base/core/res/res/values/config.xml :

  • config_attentiveTimeout
    • Especifica el tiempo predeterminado en milisegundos de inactividad del usuario después del cual la pantalla se apaga (incluso si hay bloqueos de pantalla activados).
    • Establecer en el momento de la construcción.
    • Si el valor está entre 0 y config_minimumScreenOffTimeout , el tiempo de espera se establece en config_minimumScreenOffTimeout para evitar que el dispositivo apague su pantalla poco después de despertarse.
    • Valor predeterminado: -1 , que desactiva esta función.

Anular el tiempo de espera predeterminado

Para anular la configuración de tiempo de espera predeterminada, actualice el siguiente elemento.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • Si se establece, anula el tiempo de espera de suspensión por falta de atención predeterminado establecido por config_attentiveTimeout .
    • Se puede configurar en tiempo de ejecución.

Configurar la duración antes de que aparezca la advertencia

Para configurar la duración, actualice el siguiente elemento en frameworks/base/core/res/res/values/config.xml :

  • config_attentiveWarningDuration
    • Cuánto tiempo se debe mostrar un mensaje de advertencia al usuario antes de que la pantalla se apague después de una inactividad prolongada del usuario.
    • El valor debe estar muy por debajo del tiempo de espera de suspensión por falta de atención establecido; de lo contrario, el cuadro de diálogo de advertencia se muestra constantemente y no se puede descartar.
    • Predeterminado: 30000 (30s).

Mostrando las preferencias de tiempo de espera en TvSettings

Para mostrar las preferencias de tiempo de espera, actualice el siguiente elemento en packages/apps/TvSettings/Settings/res/values/config.xml :

  • config_show_standby_timeout
    • Si se debe mostrar un elemento de preferencia para permitir apagar la pantalla durante la reproducción multimedia.
    • Valor predeterminado: false .

Recursos para la interfaz de usuario de advertencia

  • El diseño del cuadro de diálogo de advertencia se define en frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml .
  • Las siguientes cadenas para el cuadro de diálogo se definen en frameworks/base/packages/SystemUI/res/values/strings.xml y frameworks/base/packages/SystemUI/res-product/values/strings.xml .
    • inattentive_sleep_warning_title
    • inattentive_sleep_warning_message

Las configuraciones y los recursos del tiempo de compilación se pueden cambiar mediante superposiciones de recursos.

Implementación

Habilite la función usando lo siguiente.

  1. Anule el config_attentiveTimeout predeterminado.
  2. Si utiliza AOSP TvSettings :
    • Deshabilite la función en la configuración anulando config_show_standby_timeout .
    • Implemente sus propias configuraciones que establezcan Settings.Secure.ATTENTIVE_TIMEOUT .

Validación

Las pruebas CTS para la función se encuentran en cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java .

Ejemplos y fuente

  • frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java contiene la implementación de la interfaz de usuario de advertencia predeterminada.
  • packages/apps/TvSettings proporciona un ejemplo de cómo exponer la función en la configuración.

Ejemplo de caso de prueba manual

  1. Asegúrese de que la configuración del desarrollador stay_on_while_plugged_in esté desactivada si el HAL de estado del dispositivo informa que el dispositivo tiene batería ( battery_present es true ), ya que esto podría impedir que la función apague la pantalla.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Establezca un tiempo de espera de suspensión por falta de atención para que sea unos segundos más que la duración del diálogo de advertencia.
    adb shell settings put secure attentive_timeout 32000
  3. Comience a reproducir un vídeo (para adquirir un wakelock de pantalla).
  4. Verifique que el cuadro de diálogo de advertencia de suspensión aparezca después de unos segundos.
  5. Verifique que la pantalla se apague después de que expire el tiempo de espera establecido.