Android concept이다.
Keyguard가 표시중이거나 Hidden일경우 PowerManager.enableUserActivity(true)에 의해 mUserActivityAllowed변수가 set되면서 PowerManager.userActivity(..)에서 setPowerState가 정상적으로 호출될 수 있다.
PowerManager.userActivity는 WindowManagerService.InputDispatcherThread에서 이벤트큐의 이벤트를 처리할때마다 호출된다. 따라서 PowerManager.enableUserActivity()로 screen timeout을 ON/OFF할 수 있다.
Keyguard에서 이를 이용해 LockScreen이 표시중에는 사용자 입력이 있더라도 무조건 5초후에 꺼지도록 되어있다.
KeyguardViewMediator.java
private void adjustUserActivityLocked() {
// disable user activity if we are shown and not hidden
if (DEBUG) Log.d(TAG, "adjustUserActivityLocked mShowing: " + mShowing + " mHidden: " + mHidden);
boolean enabled = !mShowing || mHidden;
mRealPowerManager.enableUserActivity(enabled);
if (!enabled && mScreenOn) {
// reinstate our short screen timeout policy
pokeWakelock();
}
}