No Android 11, o modo de suspensão por inatividade é um recurso de economia de energia que permite definir um tempo limite de inatividade 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.
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 no modo de suspensão 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:
- Interação com a tela sensível ao toque
- Pressionar um botão físico
- Eventos de entrada de um acessório externo (por exemplo, teclado conectado, controle remoto Bluetooth, controle remoto infravermelho)
- Interação por voz
- Recebimento de determinadas mensagens HDMI CEC, como o One Touch Play
- Início de uma nova sessão de transmissão
Personalização
Se o recurso estiver ativado, o dispositivo 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. É possível 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 após o qual a tela é desligada (mesmo que os wakelocks da tela estejam ativados).
- 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 suspensão por inatividade definido por
config_attentiveTimeout. - Pode ser definido no momento da execução.
Configurar 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- 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 do usuário.
- O valor precisa ser bem menor que o tempo limite de suspensão por inatividade definido. Caso contrário, a caixa de diálogo de aviso será mostrada 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- Se um item de preferência será mostrado para permitir que a tela seja desligada durante a reprodução de mídia.
- 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 seguintes strings da 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_titleinattentive_sleep_warning_message
As configurações e os recursos do 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/TvSettingsfornece um exemplo de como expor o recurso nas configurações.
Exemplo de caso de teste manual
Verifique se a configuração de
stay_on_while_plugged_indesenvolvedor está 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 suspensão por inatividade 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 suspensão aparece após alguns segundos.
- Verifique se a tela é desligada após a expiração do tempo limite definido.