Télévision en veille

Dans Android 11, la veille inattentive est une fonctionnalité d'économie d'énergie qui permet de définir un délai d'inactivité de l'utilisateur après lequel l'écran s'éteint, même si les fenêtres avec FLAG_KEEP_SCREEN_ON sont visibles ou si des wakelocks de niveau FULL_WAKE_LOCK , SCREEN_BRIGHT_WAKE_LOCK ou SCREEN_DIM_WAKE_LOCK sont maintenus. Les Wakelocks avec le niveau PARTIAL_WAKE_LOCK ne sont pas affectés par cette fonctionnalité. Peu de temps avant l'expiration du délai d'attente, un message peut s'afficher pour avertir l'utilisateur que l'appareil se mettra en veille s'il n'interagit pas avec l'appareil.

Dans ce contexte, l'activité de l'utilisateur fait référence à tout ce qui déclenche un appel à PowerManager#userActivity (sans l'indicateur USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS ), y compris, mais sans s'y limiter :

  • Interagir avec l'écran tactile
  • Appuyer sur un bouton physique
  • Saisir des événements à partir d'un accessoire externe (par exemple, clavier connecté, télécommande Bluetooth, télécommande IR)
  • Interaction vocale
  • Réception de certains messages HDMI CEC, tels que One Touch Play
  • Démarrer une nouvelle session de diffusion

Personnalisation

Si la fonctionnalité est activée, l'appareil affiche un avertissement à l'écran après une période spécifiée d'inactivité de l'utilisateur. Si aucune action n'est entreprise, l'écran s'éteint. Vous pouvez personnaliser la fonctionnalité à l'aide de ces options de configuration.

Configurer le délai d'attente

Pour configurer le délai d'attente, mettez à jour l'élément suivant dans frameworks/base/core/res/res/values/config.xml :

  • config_attentiveTimeout
    • Spécifie le temps par défaut en millisecondes d'inactivité de l'utilisateur après lequel l'écran s'éteint (même si des wakelocks d'écran sont en place).
    • Défini au moment de la construction.
    • Si la valeur est comprise entre 0 et config_minimumScreenOffTimeout , le délai d'attente est défini sur config_minimumScreenOffTimeout pour empêcher l'appareil d'éteindre son écran peu de temps après son réveil.
    • Par défaut : -1 , ce qui désactive cette fonctionnalité.

Remplacer le délai d'expiration par défaut

Pour remplacer le paramètre de délai d'expiration par défaut, mettez à jour l'élément suivant.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • S'il est défini, remplace le délai d'attente de mise en veille inattentive par défaut défini par config_attentiveTimeout .
    • Peut être défini au moment de l’exécution.

Configurer la durée avant l'apparition de l'avertissement

Pour configurer la durée, mettez à jour l'élément suivant dans frameworks/base/core/res/res/values/config.xml :

  • config_attentiveWarningDuration
    • Combien de temps faut-il afficher un message d'avertissement à l'utilisateur avant que l'écran ne s'éteigne après une inactivité prolongée de l'utilisateur.
    • La valeur doit être bien inférieure au délai d'attente de mise en veille inattentive défini, sinon la boîte de dialogue d'avertissement s'affiche en permanence et ne peut pas être ignorée.
    • Par défaut : 30000 (30 s).

Afficher les préférences de délai d'attente dans TvSettings

Pour afficher les préférences de délai d'attente, mettez à jour l'élément suivant dans packages/apps/TvSettings/Settings/res/values/config.xml :

  • config_show_standby_timeout
    • S'il faut afficher un élément de préférence pour permettre d'éteindre l'écran pendant la lecture multimédia.
    • Par défaut : false .

Ressources pour l'interface utilisateur d'avertissement

  • La disposition de la boîte de dialogue d'avertissement est définie dans frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml .
  • Les chaînes suivantes pour la boîte de dialogue sont définies dans frameworks/base/packages/SystemUI/res/values/strings.xml et frameworks/base/packages/SystemUI/res-product/values/strings.xml .
    • inattentive_sleep_warning_title
    • inattentive_sleep_warning_message

Les configurations et les ressources au moment de la construction peuvent être modifiées par des superpositions de ressources.

Mise en œuvre

Activez la fonctionnalité en utilisant ce qui suit.

  1. Remplacez le config_attentiveTimeout par défaut.
  2. Si vous utilisez l'AOSP TvSettings :
    • Désactivez la fonctionnalité dans les paramètres en remplaçant config_show_standby_timeout .
    • Implémentez vos propres paramètres qui définissent Settings.Secure.ATTENTIVE_TIMEOUT .

Validation

Les tests CTS pour la fonctionnalité se trouvent sur cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java .

Exemples et source

  • frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java contient l'implémentation de l'interface utilisateur d'avertissement par défaut.
  • packages/apps/TvSettings fournit un exemple de la façon d'exposer la fonctionnalité dans les paramètres.

Exemple de cas de test manuel

  1. Assurez-vous que le paramètre du développeur stay_on_while_plugged_in est désactivé si le HAL de santé de l'appareil signale que l'appareil dispose d'une batterie ( battery_present est true ), car cela pourrait empêcher la fonctionnalité d'éteindre l'écran.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Définissez un délai d'attente de mise en veille inattentive de quelques secondes supérieur à la durée de la boîte de dialogue d'avertissement.
    adb shell settings put secure attentive_timeout 32000
  3. Commencez la lecture d'une vidéo (pour acquérir un wakelock d'écran).
  4. Vérifiez que la boîte de dialogue d'avertissement de veille apparaît après quelques secondes.
  5. Vérifiez que l'écran s'éteint après l'expiration du délai défini.