TV en espera

En Android 11, la suspensión por falta de atención es una función de ahorro de energía que permite configurar 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 están visibles o se mantienen los wakelocks de nivel FULL_WAKE_LOCK , SCREEN_BRIGHT_WAKE_LOCK o SCREEN_DIM_WAKE_LOCK . Wakelocks con nivel PARTIAL_WAKE_LOCK no se ven afectados por esta característica. Poco antes de que expire el tiempo de espera, se puede mostrar un mensaje que advierte al usuario que el dispositivo entrará en suspensión si no interactúa con el dispositivo.

En este contexto, la actividad del usuario se refiere a todo lo que desencadena una llamada a PowerManager#userActivity (sin el indicador USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS ), incluidos, entre otros, los siguientes:

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

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.

Configuración del 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 los bloqueos de pantalla están 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 la pantalla poco después de activarse.
    • Predeterminado: -1 , que deshabilita 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.

Configuración de 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 para 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 inatento establecido; de lo contrario, el cuadro de diálogo de advertencia se muestra constantemente y no se puede descartar.
    • Predeterminado: 30000 (30 s).

Mostrar 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
    • Ya sea para mostrar un elemento de preferencia para permitir apagar la pantalla durante la reproducción de medios.
    • Predeterminado: false .

Recursos para la IU 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 de tiempo de compilación y los recursos se pueden cambiar mediante superposiciones de recursos.

Implementación

Habilite la característica usando lo siguiente.

  1. Anule el config_attentiveTimeout predeterminado.
  2. Si usa AOSP TvSettings :
    • Deshabilite la función en la configuración anulando config_show_standby_timeout .
    • Implemente su propia configuración que establezca Settings.Secure.ATTENTIVE_TIMEOUT .

Validación

Las pruebas de 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 IU 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 de desarrollador stay_on_while_plugged_in esté desactivada si la HAL de estado del dispositivo informa que el dispositivo tiene batería ( battery_present es true ), ya que esto podría evitar 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 cuadro de diálogo de advertencia.
    adb shell settings put secure attentive_timeout 32000
  3. Comience a reproducir un video (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.