diff options
| author | 2016-04-04 17:52:22 -0700 | |
|---|---|---|
| committer | 2016-04-06 15:40:27 -0700 | |
| commit | 92f15e65d93dc15a55e756fb8f545e7c4f652457 (patch) | |
| tree | 3bec37214a3abfe11adc3e4df1bb6971eb73b6c6 | |
| parent | 522e28e943c5f8580de6a48d1e7f160291377ad1 (diff) | |
SENSING_TIMEOUT goes to STATE_INACTIVE.
Bug: 27821977
Change-Id: I920581f57a1467ad13ab32efdf86a8f68960d84c
| -rw-r--r-- | services/core/java/com/android/server/DeviceIdleController.java | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/DeviceIdleController.java b/services/core/java/com/android/server/DeviceIdleController.java index 423f9456ee7f..ccb4647d8591 100644 --- a/services/core/java/com/android/server/DeviceIdleController.java +++ b/services/core/java/com/android/server/DeviceIdleController.java @@ -198,6 +198,7 @@ public class DeviceIdleController extends SystemService private long mNextIdleDelay; private long mNextLightIdleDelay; private long mNextLightAlarmTime; + private long mNextSensingTimeoutAlarmTime; private long mCurIdleBudget; private long mMaintenanceStartTime; @@ -339,6 +340,18 @@ public class DeviceIdleController extends SystemService } }; + private final AlarmManager.OnAlarmListener mSensingTimeoutAlarmListener + = new AlarmManager.OnAlarmListener() { + @Override + public void onAlarm() { + if (mState == STATE_SENSING) { + synchronized (DeviceIdleController.this) { + becomeInactiveIfAppropriateLocked(); + } + } + } + }; + private final AlarmManager.OnAlarmListener mDeepAlarmListener = new AlarmManager.OnAlarmListener() { @Override @@ -924,6 +937,11 @@ public class DeviceIdleController extends SystemService @Override public void onAnyMotionResult(int result) { if (DEBUG) Slog.d(TAG, "onAnyMotionResult(" + result + ")"); + if (result != AnyMotionDetector.RESULT_UNKNOWN) { + synchronized (this) { + cancelSensingTimeoutAlarmLocked(); + } + } if (result == AnyMotionDetector.RESULT_MOVED) { if (DEBUG) Slog.d(TAG, "RESULT_MOVED received."); synchronized (this) { @@ -1746,6 +1764,7 @@ public class DeviceIdleController extends SystemService mNextIdleDelay = 0; mNextLightIdleDelay = 0; cancelAlarmLocked(); + cancelSensingTimeoutAlarmLocked(); cancelLocatingLocked(); stopMonitoringMotionLocked(); mAnyMotionDetector.stop(); @@ -1866,15 +1885,16 @@ public class DeviceIdleController extends SystemService mState = STATE_SENSING; if (DEBUG) Slog.d(TAG, "Moved from STATE_IDLE_PENDING to STATE_SENSING."); EventLogTags.writeDeviceIdle(mState, reason); - scheduleAlarmLocked(mConstants.SENSING_TIMEOUT, false); + scheduleSensingTimeoutAlarmLocked(mConstants.SENSING_TIMEOUT); cancelLocatingLocked(); - mAnyMotionDetector.checkForAnyMotion(); mNotMoving = false; mLocated = false; mLastGenericLocation = null; mLastGpsLocation = null; + mAnyMotionDetector.checkForAnyMotion(); break; case STATE_SENSING: + cancelSensingTimeoutAlarmLocked(); mState = STATE_LOCATING; if (DEBUG) Slog.d(TAG, "Moved from STATE_SENSING to STATE_LOCATING."); EventLogTags.writeDeviceIdle(mState, reason); @@ -2161,6 +2181,13 @@ public class DeviceIdleController extends SystemService } } + void cancelSensingTimeoutAlarmLocked() { + if (mNextSensingTimeoutAlarmTime != 0) { + mNextSensingTimeoutAlarmTime = 0; + mAlarmManager.cancel(mSensingTimeoutAlarmListener); + } + } + void scheduleAlarmLocked(long delay, boolean idleUntil) { if (DEBUG) Slog.d(TAG, "scheduleAlarmLocked(" + delay + ", " + idleUntil + ")"); if (mMotionSensor == null) { @@ -2194,6 +2221,13 @@ public class DeviceIdleController extends SystemService mNextLightAlarmTime, "DeviceIdleController.light", mLightAlarmListener, mHandler); } + void scheduleSensingTimeoutAlarmLocked(long delay) { + if (DEBUG) Slog.d(TAG, "scheduleSensingAlarmLocked(" + delay + ")"); + mNextSensingTimeoutAlarmTime = SystemClock.elapsedRealtime() + delay; + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, mNextSensingTimeoutAlarmTime, + "DeviceIdleController.sensing", mSensingTimeoutAlarmListener, mHandler); + } + private static int[] buildAppIdArray(ArrayMap<String, Integer> systemApps, ArrayMap<String, Integer> userApps, SparseBooleanArray outAppIds) { outAppIds.clear(); |