No Android 11, o modo de suspensão por desatenção é um recurso de economia de energia
que permite definir um tempo limite de inatividade após o qual a tela é desligada, mesmo
se janelas com FLAG_KEEP_SCREEN_ON
estiverem visíveis ou se wakelocks de nível
FULL_WAKE_LOCK,
SCREEN_BRIGHT_WAKE_LOCK ou
SCREEN_DIM_WAKE_LOCK
estiverem ativos.
Os wakelocks com nível PARTIAL_WAKE_LOCK não são afetados por esse recurso.
Pouco antes do tempo limite expirar, uma mensagem pode ser mostrada avisando
o usuário de que o dispositivo vai entrar em modo de espera se ele não interagir com ele.
Nesse contexto, a atividade do usuário se refere a qualquer coisa que acione uma chamada para
PowerManager#userActivity (sem a flag USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
), incluindo, entre outros:
- Como interagir com a tela touch
- Pressionar um botão físico
- Eventos de entrada de um acessório externo (por exemplo, teclado conectado, controle remoto Bluetooth ou infravermelho)
- Interação por voz
- Receber determinadas mensagens HDMI CEC, como o recurso "Reprodução com um toque"
- Como iniciar uma nova sessão de transmissão
Personalização
Se o recurso estiver ativado, o dispositivo vai mostrar um aviso na tela após um período especificado de inatividade do usuário. Se nenhuma ação for realizada, a tela será desligada. Você pode personalizar o recurso usando estas opções de configuração.
Configurar 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 para que a tela seja desligada (mesmo que haja wakelocks de tela).
- Definido no tempo de build.
- Se o valor estiver entre 0econfig_minimumScreenOffTimeout, o tempo limite será definido comoconfig_minimumScreenOffTimeoutpara evitar que o dispositivo desligue a tela logo após ser ativado.
- Padrão: -1, que desativa esse recurso.
Substituir o tempo limite padrão
Para substituir a configuração de tempo limite padrão, atualize o seguinte elemento.
- Settings.Secure.ATTENTIVE_TIMEOUT
- Se definido, substitui o tempo limite padrão de inatividade do sono definido por
 config_attentiveTimeout.
- Pode ser definido no ambiente de execução.
Configurar a duração antes do aviso aparecer
Para configurar a duração, atualize o seguinte elemento em
frameworks/base/core/res/res/values/config.xml:
- config_attentiveWarningDuration
- Por quanto tempo mostrar uma mensagem de aviso ao usuário antes que a tela seja desligada após um período prolongado de inatividade.
- O valor precisa estar bem abaixo do tempo limite de inatividade definido. Caso contrário, a caixa de diálogo de aviso vai aparecer constantemente e não poderá ser dispensada.
- Padrão: 30000(30 segundos).
Mostrar 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
- Indica se um item de preferência para permitir o desligamento da tela durante a reprodução de mídia será mostrado.
- Padrão: false.
Recursos para a interface de aviso
- O layout da caixa de diálogo de aviso é definido em
frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml.
- As strings a seguir para a caixa de diálogo são definidas em
frameworks/base/packages/SystemUI/res/values/strings.xmleframeworks/base/packages/SystemUI/res-product/values/strings.xml.
- inattentive_sleep_warning_title
- inattentive_sleep_warning_message
As configurações e os recursos de tempo de build podem ser alterados por sobreposições de recursos.
Implementação
Ative o recurso usando o seguinte.
- Substitua o config_attentiveTimeoutpadrão.
- Se você estiver usando o TvSettingsdo AOSP:
- 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 do CTS para o recurso estão em
cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java.
Exemplos e origem
- frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.javacontém a implementação padrão da interface de aviso.
- packages/apps/TvSettingsmostra um exemplo de como expor o recurso nas configurações.
Exemplo de caso de teste manual
- Verifique se a configuração de desenvolvedor - stay_on_while_plugged_inestá desativada se o HAL de integridade do dispositivo informar que ele tem uma bateria (- battery_presenté- true), já que 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 inatividade do sono alguns segundos maior 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 sono aparece após alguns segundos.
- Verifique se a tela desliga depois que o tempo limite definido expira.
