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
etconfig_minimumScreenOffTimeout
, le délai d'attente est défini surconfig_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
etframeworks/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.
- Remplacez le
config_attentiveTimeout
par défaut. - 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
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
esttrue
), car cela pourrait empêcher la fonctionnalité d'éteindre l'écran.
adb shell settings put global stay_on_while_plugged_in 0
- 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
- Commencez la lecture d'une vidéo (pour acquérir un wakelock d'écran).
- Vérifiez que la boîte de dialogue d'avertissement de veille apparaît après quelques secondes.
- Vérifiez que l'écran s'éteint après l'expiration du délai défini.