Idle Job Start During SCREEN_ON or DREAMING_STOPPED
When the screen goes off or dreaming start, an alarm will be scheduled and idle state will be true when the alarm expired. If the screen goes on or dreaming stop happens before the alarm expired, the alarm isn't cancelled and idle state is set to be true when the device is in SCREEN_ON or DREADING_STOPPED state. There is also a case that Idle alarm triggered when the screen on or dreaming stop just start to be processed. ACTION_TRIGGER_IDLE will set mIdle to true during screen on or dreaming stop. In this patch, the alarm will be cancelled when the screen goes on or dreaming stop and screen-on flag will be set. So the idle state can only be set when screen is off or dreaming started. Change-Id: I06ae4b7fd77901f9570ce0459d2299bbfd4b46b4
This commit is contained in:
@@ -109,6 +109,7 @@ public class IdleController extends StateController {
|
||||
private AlarmManager mAlarm;
|
||||
private PendingIntent mIdleTriggerIntent;
|
||||
boolean mIdle;
|
||||
boolean mScreenOn;
|
||||
|
||||
public IdlenessTracker() {
|
||||
mAlarm = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
|
||||
@@ -121,6 +122,7 @@ public class IdleController extends StateController {
|
||||
// At boot we presume that the user has just "interacted" with the
|
||||
// device in some meaningful way.
|
||||
mIdle = false;
|
||||
mScreenOn = true;
|
||||
}
|
||||
|
||||
public boolean isIdle() {
|
||||
@@ -150,12 +152,14 @@ public class IdleController extends StateController {
|
||||
|
||||
if (action.equals(Intent.ACTION_SCREEN_ON)
|
||||
|| action.equals(Intent.ACTION_DREAMING_STOPPED)) {
|
||||
// possible transition to not-idle
|
||||
if (DEBUG) {
|
||||
Slog.v(TAG,"exiting idle : " + action);
|
||||
}
|
||||
mScreenOn = true;
|
||||
//cancel the alarm
|
||||
mAlarm.cancel(mIdleTriggerIntent);
|
||||
if (mIdle) {
|
||||
if (DEBUG) {
|
||||
Slog.v(TAG, "exiting idle : " + action);
|
||||
}
|
||||
mAlarm.cancel(mIdleTriggerIntent);
|
||||
// possible transition to not-idle
|
||||
mIdle = false;
|
||||
reportNewIdleState(mIdle);
|
||||
}
|
||||
@@ -170,11 +174,12 @@ public class IdleController extends StateController {
|
||||
Slog.v(TAG, "Scheduling idle : " + action + " now:" + nowElapsed + " when="
|
||||
+ when);
|
||||
}
|
||||
mScreenOn = false;
|
||||
mAlarm.setWindow(AlarmManager.ELAPSED_REALTIME_WAKEUP,
|
||||
when, IDLE_WINDOW_SLOP, mIdleTriggerIntent);
|
||||
} else if (action.equals(ACTION_TRIGGER_IDLE)) {
|
||||
// idle time starts now
|
||||
if (!mIdle) {
|
||||
// idle time starts now. Do not set mIdle if screen is on.
|
||||
if (!mIdle && !mScreenOn) {
|
||||
if (DEBUG) {
|
||||
Slog.v(TAG, "Idle trigger fired @ " + SystemClock.elapsedRealtime());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user