No Android 11, a suspensão desatenta é um recurso de economia de energia que permite definir um tempo limite de inatividade do usuário após o qual a tela é desligada, mesmo que janelas com FLAG_KEEP_SCREEN_ON
estejam visíveis ou wakelocks de nível FULL_WAKE_LOCK
, SCREEN_BRIGHT_WAKE_LOCK
ou SCREEN_DIM_WAKE_LOCK
sejam mantidos. Wakelocks com nível PARTIAL_WAKE_LOCK
não são afetados por esse recurso. Pouco antes do tempo limite expirar, pode ser exibida uma mensagem que avisa o usuário de que o dispositivo entrará em suspensão se ele não interagir com o dispositivo.
Nesse contexto, a atividade do usuário se refere a qualquer coisa que acione uma chamada para PowerManager#userActivity
(sem o sinalizador USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
), incluindo, mas não limitado a:
- Interagindo com a tela sensível ao toque
- Pressionando um botão físico
- Eventos de entrada de um acessório externo (por exemplo, teclado conectado, controle remoto bluetooth, controle remoto IR)
- Interação de voz
- Recebendo certas mensagens HDMI CEC, como One Touch Play
- Iniciando uma nova sessão de elenco
Costumização
Se o recurso estiver ativado, o dispositivo mostrará um aviso na tela após um tempo especificado de inatividade do usuário. Se nenhuma ação for tomada, a tela será desligada. Você pode personalizar o recurso usando essas opções de configuração.
Configurando o tempo limite
Para configurar o tempo limite, atualize o seguinte elemento em frameworks/base/core/res/res/values/config.xml
:
-
config_attentiveTimeout
- Especifica o tempo padrão em milissegundos de inatividade do usuário após o qual a tela é desligada (mesmo se os wakelocks da tela estiverem em vigor).
- Definido em tempo de construção.
- Se o valor estiver entre
0
econfig_minimumScreenOffTimeout
, o tempo limite será definido comoconfig_minimumScreenOffTimeout
para evitar que o dispositivo desligue sua tela logo após acordar. - Padrão:
-1
, que desativa esse recurso.
Substituindo o tempo limite padrão
Para substituir a configuração de tempo limite padrão, atualize o elemento a seguir.
-
Settings.Secure.ATTENTIVE_TIMEOUT
- Se definido, substitui o tempo limite de suspensão de desatenção padrão definido por
config_attentiveTimeout
. - Pode ser definido em tempo de execução.
Configurando a duração antes que o aviso apareça
Para configurar a duração, atualize o seguinte elemento em frameworks/base/core/res/res/values/config.xml
:
-
config_attentiveWarningDuration
- Quanto tempo para mostrar uma mensagem de aviso ao usuário antes que a tela desligue após inatividade prolongada do usuário.
- O valor deve estar bem abaixo do tempo limite de suspensão desatento definido, caso contrário, a caixa de diálogo de aviso é exibida constantemente e não pode ser descartada.
- Padrão:
30000
(30s).
Mostrando as preferências de tempo limite em TvSettings
Para mostrar as preferências de tempo limite, atualize o seguinte elemento em packages/apps/TvSettings/Settings/res/values/config.xml
:
-
config_show_standby_timeout
- Se deve mostrar um item de preferência para permitir desligar a tela durante a reprodução de mídia.
- Padrão:
false
.
Recursos para a IU de aviso
- O layout da caixa de diálogo de aviso é definido em
frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml
. - As seguintes strings para a caixa de diálogo são definidas em
frameworks/base/packages/SystemUI/res/values/strings.xml
eframeworks/base/packages/SystemUI/res-product/values/strings.xml
. -
inattentive_sleep_warning_title
-
inattentive_sleep_warning_message
As configurações e os recursos do tempo de compilação podem ser alterados por sobreposições de recursos.
Implementação
Ative o recurso usando o seguinte.
- Substitua o
config_attentiveTimeout
padrão. - Se estiver usando o AOSP
TvSettings
: - Desative o recurso nas configurações substituindo
config_show_standby_timeout
. - Implemente suas próprias configurações que definem
Settings.Secure.ATTENTIVE_TIMEOUT
.
Validação
Os testes CTS para o recurso estão em cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java
.
Exemplos e fonte
-
frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java
contém a implementação de UI de aviso padrão. -
packages/apps/TvSettings
fornece um exemplo de como expor o recurso em settings.
Exemplo de caso de teste manual
Certifique-se de que a configuração do desenvolvedor
stay_on_while_plugged_in
esteja desativada se o HAL de integridade do dispositivo informar que o dispositivo tem uma bateria (battery_present
étrue
), pois isso pode impedir que o recurso desligue a tela.
adb shell settings put global stay_on_while_plugged_in 0
- Defina um tempo limite de suspensão desatento para alguns segundos a mais do que a duração da caixa de diálogo de aviso.
adb shell settings put secure attentive_timeout 32000
- Comece a reproduzir um vídeo (para adquirir um wakelock de tela).
- Verifique se a caixa de diálogo de aviso de suspensão aparece após alguns segundos.
- Verifique se a tela desliga após o tempo limite definido expirar.