Dans Android 11, le mode veille inattentive est une fonctionnalité d'économie d'énergie qui permet de définir un délai d'inactivité de l'utilisateur au bout duquel l'écran s'éteint, même si des fenêtres avec FLAG_KEEP_SCREEN_ON
sont visibles ou que des wakelocks de niveau FULL_WAKE_LOCK
, SCREEN_BRIGHT_WAKE_LOCK
ou SCREEN_DIM_WAKE_LOCK
sont maintenus.
Les wakelocks de niveau PARTIAL_WAKE_LOCK
ne sont pas affectés par cette fonctionnalité.
Peu de temps avant l'expiration du délai, un message d'avertissement peut s'afficher
à l'utilisateur que l'appareil se met
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 USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
)
), y compris, mais sans s'y limiter:
- Interaction avec l'écran tactile
- Appuyer sur un bouton physique
- Événements d'entrée provenant d'un accessoire externe (par exemple, un clavier connecté, une télécommande Bluetooth, télécommande infrarouge)
- Interaction vocale
- Réception de certains messages HDMI CEC, tels que One Touch Play
- Démarrer une nouvelle session Cast
Personnalisation
Si la fonctionnalité est activée, l'appareil affiche un avertissement à l'écran après un délai spécifié l'inactivité de l'utilisateur. Si aucune action n'est effectuée, l'écran s'éteint. Vous pouvez personnaliser la fonctionnalité à l'aide de ces options de configuration.
<ph type="x-smartling-placeholder">Configurer le délai avant expiration
Pour configurer le délai avant expiration, mettez à jour l'élément suivant dans
frameworks/base/core/res/res/values/config.xml
:
config_attentiveTimeout
- Spécifie le délai d'inactivité de l'utilisateur par défaut, en millisecondes, au terme duquel l'écran s'éteint. (même si des wakelocks sont en place).
- Défini au moment de la compilation.
- Si la valeur est comprise entre
0
etconfig_minimumScreenOffTimeout
, le délai d'expiration est défini surconfig_minimumScreenOffTimeout
pour empêcher l'appareil d'éteindre son écran peu de temps après son réveil. - Valeur par défaut :
-1
, ce qui désactive cette fonctionnalité.
Ignorer le délai avant expiration par défaut
Pour ignorer le paramètre de délai avant expiration par défaut, mettez à jour l'élément suivant.
Settings.Secure.ATTENTIVE_TIMEOUT
- Si cette valeur est définie, elle prévaut sur le délai de mise en veille inattentif par défaut défini par
config_attentiveTimeout
- Peut être défini au moment de l'exécution.
Configurer la durée avant l'affichage 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
- Durée pendant laquelle un message d'avertissement s'affiche 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 avant expiration de la mise en veille inattentive défini, sinon la boîte de dialogue d'avertissement s'affiche en permanence et ne peut pas être fermée.
- Valeur par défaut:
30000
(30 s).
Afficher les préférences de délai avant expiration dans TvSettings
Pour afficher les préférences de délai d'expiration, mettez à jour l'élément suivant dans
packages/apps/TvSettings/Settings/res/values/config.xml
:
config_show_standby_timeout
- Permet d'afficher ou non un élément de préférence permettant d'éteindre l'écran pendant la lecture du contenu multimédia.
- Valeur par défaut:
false
.
Ressources pour l'interface utilisateur des avertissements
- 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 de 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 compilation peuvent être modifiées par des superpositions de ressources.
Implémentation
Activez la fonctionnalité comme suit.
- Ignorez le
config_attentiveTimeout
par défaut. - Si vous utilisez le
TvSettings
d'AOSP: - Désactivez la fonctionnalité dans les paramètres en remplaçant
config_show_standby_timeout
. - Implémenter vos propres paramètres
qui définissent
Settings.Secure.ATTENTIVE_TIMEOUT
.
Validation
Les tests CTS de la fonctionnalité se trouvent à l'adresse 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'UI d'avertissement par défaut.packages/apps/TvSettings
fournit un exemple d'exposition de la fonctionnalité dans les paramètres.
Exemple de scénario de test manuel
Assurez-vous que le paramètre de développement
stay_on_while_plugged_in
est désactivé si le HAL de santé de l'appareil indique qu'il 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 de mise en veille inattentif de quelques secondes de plus que la durée de la boîte de dialogue d'avertissement.
adb shell settings put secure attentive_timeout 32000
- Lancez la lecture d'une vidéo (pour acquérir un wakelock d'écran).
- Vérifiez que la boîte de dialogue d'avertissement de mise en veille s'affiche après quelques secondes.
- Vérifiez que l'écran s'éteint après expiration du délai défini.