Loading services/core/java/com/android/server/DeviceIdleController.java +36 −2 Original line number Original line Diff line number Diff line Loading @@ -198,6 +198,7 @@ public class DeviceIdleController extends SystemService private long mNextIdleDelay; private long mNextIdleDelay; private long mNextLightIdleDelay; private long mNextLightIdleDelay; private long mNextLightAlarmTime; private long mNextLightAlarmTime; private long mNextSensingTimeoutAlarmTime; private long mCurIdleBudget; private long mCurIdleBudget; private long mMaintenanceStartTime; private long mMaintenanceStartTime; Loading Loading @@ -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 private final AlarmManager.OnAlarmListener mDeepAlarmListener = new AlarmManager.OnAlarmListener() { = new AlarmManager.OnAlarmListener() { @Override @Override Loading Loading @@ -924,6 +937,11 @@ public class DeviceIdleController extends SystemService @Override @Override public void onAnyMotionResult(int result) { public void onAnyMotionResult(int result) { if (DEBUG) Slog.d(TAG, "onAnyMotionResult(" + result + ")"); if (DEBUG) Slog.d(TAG, "onAnyMotionResult(" + result + ")"); if (result != AnyMotionDetector.RESULT_UNKNOWN) { synchronized (this) { cancelSensingTimeoutAlarmLocked(); } } if (result == AnyMotionDetector.RESULT_MOVED) { if (result == AnyMotionDetector.RESULT_MOVED) { if (DEBUG) Slog.d(TAG, "RESULT_MOVED received."); if (DEBUG) Slog.d(TAG, "RESULT_MOVED received."); synchronized (this) { synchronized (this) { Loading Loading @@ -1746,6 +1764,7 @@ public class DeviceIdleController extends SystemService mNextIdleDelay = 0; mNextIdleDelay = 0; mNextLightIdleDelay = 0; mNextLightIdleDelay = 0; cancelAlarmLocked(); cancelAlarmLocked(); cancelSensingTimeoutAlarmLocked(); cancelLocatingLocked(); cancelLocatingLocked(); stopMonitoringMotionLocked(); stopMonitoringMotionLocked(); mAnyMotionDetector.stop(); mAnyMotionDetector.stop(); Loading Loading @@ -1866,15 +1885,16 @@ public class DeviceIdleController extends SystemService mState = STATE_SENSING; mState = STATE_SENSING; if (DEBUG) Slog.d(TAG, "Moved from STATE_IDLE_PENDING to STATE_SENSING."); if (DEBUG) Slog.d(TAG, "Moved from STATE_IDLE_PENDING to STATE_SENSING."); EventLogTags.writeDeviceIdle(mState, reason); EventLogTags.writeDeviceIdle(mState, reason); scheduleAlarmLocked(mConstants.SENSING_TIMEOUT, false); scheduleSensingTimeoutAlarmLocked(mConstants.SENSING_TIMEOUT); cancelLocatingLocked(); cancelLocatingLocked(); mAnyMotionDetector.checkForAnyMotion(); mNotMoving = false; mNotMoving = false; mLocated = false; mLocated = false; mLastGenericLocation = null; mLastGenericLocation = null; mLastGpsLocation = null; mLastGpsLocation = null; mAnyMotionDetector.checkForAnyMotion(); break; break; case STATE_SENSING: case STATE_SENSING: cancelSensingTimeoutAlarmLocked(); mState = STATE_LOCATING; mState = STATE_LOCATING; if (DEBUG) Slog.d(TAG, "Moved from STATE_SENSING to STATE_LOCATING."); if (DEBUG) Slog.d(TAG, "Moved from STATE_SENSING to STATE_LOCATING."); EventLogTags.writeDeviceIdle(mState, reason); EventLogTags.writeDeviceIdle(mState, reason); Loading Loading @@ -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) { void scheduleAlarmLocked(long delay, boolean idleUntil) { if (DEBUG) Slog.d(TAG, "scheduleAlarmLocked(" + delay + ", " + idleUntil + ")"); if (DEBUG) Slog.d(TAG, "scheduleAlarmLocked(" + delay + ", " + idleUntil + ")"); if (mMotionSensor == null) { if (mMotionSensor == null) { Loading Loading @@ -2194,6 +2221,13 @@ public class DeviceIdleController extends SystemService mNextLightAlarmTime, "DeviceIdleController.light", mLightAlarmListener, mHandler); 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, private static int[] buildAppIdArray(ArrayMap<String, Integer> systemApps, ArrayMap<String, Integer> userApps, SparseBooleanArray outAppIds) { ArrayMap<String, Integer> userApps, SparseBooleanArray outAppIds) { outAppIds.clear(); outAppIds.clear(); Loading Loading
services/core/java/com/android/server/DeviceIdleController.java +36 −2 Original line number Original line Diff line number Diff line Loading @@ -198,6 +198,7 @@ public class DeviceIdleController extends SystemService private long mNextIdleDelay; private long mNextIdleDelay; private long mNextLightIdleDelay; private long mNextLightIdleDelay; private long mNextLightAlarmTime; private long mNextLightAlarmTime; private long mNextSensingTimeoutAlarmTime; private long mCurIdleBudget; private long mCurIdleBudget; private long mMaintenanceStartTime; private long mMaintenanceStartTime; Loading Loading @@ -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 private final AlarmManager.OnAlarmListener mDeepAlarmListener = new AlarmManager.OnAlarmListener() { = new AlarmManager.OnAlarmListener() { @Override @Override Loading Loading @@ -924,6 +937,11 @@ public class DeviceIdleController extends SystemService @Override @Override public void onAnyMotionResult(int result) { public void onAnyMotionResult(int result) { if (DEBUG) Slog.d(TAG, "onAnyMotionResult(" + result + ")"); if (DEBUG) Slog.d(TAG, "onAnyMotionResult(" + result + ")"); if (result != AnyMotionDetector.RESULT_UNKNOWN) { synchronized (this) { cancelSensingTimeoutAlarmLocked(); } } if (result == AnyMotionDetector.RESULT_MOVED) { if (result == AnyMotionDetector.RESULT_MOVED) { if (DEBUG) Slog.d(TAG, "RESULT_MOVED received."); if (DEBUG) Slog.d(TAG, "RESULT_MOVED received."); synchronized (this) { synchronized (this) { Loading Loading @@ -1746,6 +1764,7 @@ public class DeviceIdleController extends SystemService mNextIdleDelay = 0; mNextIdleDelay = 0; mNextLightIdleDelay = 0; mNextLightIdleDelay = 0; cancelAlarmLocked(); cancelAlarmLocked(); cancelSensingTimeoutAlarmLocked(); cancelLocatingLocked(); cancelLocatingLocked(); stopMonitoringMotionLocked(); stopMonitoringMotionLocked(); mAnyMotionDetector.stop(); mAnyMotionDetector.stop(); Loading Loading @@ -1866,15 +1885,16 @@ public class DeviceIdleController extends SystemService mState = STATE_SENSING; mState = STATE_SENSING; if (DEBUG) Slog.d(TAG, "Moved from STATE_IDLE_PENDING to STATE_SENSING."); if (DEBUG) Slog.d(TAG, "Moved from STATE_IDLE_PENDING to STATE_SENSING."); EventLogTags.writeDeviceIdle(mState, reason); EventLogTags.writeDeviceIdle(mState, reason); scheduleAlarmLocked(mConstants.SENSING_TIMEOUT, false); scheduleSensingTimeoutAlarmLocked(mConstants.SENSING_TIMEOUT); cancelLocatingLocked(); cancelLocatingLocked(); mAnyMotionDetector.checkForAnyMotion(); mNotMoving = false; mNotMoving = false; mLocated = false; mLocated = false; mLastGenericLocation = null; mLastGenericLocation = null; mLastGpsLocation = null; mLastGpsLocation = null; mAnyMotionDetector.checkForAnyMotion(); break; break; case STATE_SENSING: case STATE_SENSING: cancelSensingTimeoutAlarmLocked(); mState = STATE_LOCATING; mState = STATE_LOCATING; if (DEBUG) Slog.d(TAG, "Moved from STATE_SENSING to STATE_LOCATING."); if (DEBUG) Slog.d(TAG, "Moved from STATE_SENSING to STATE_LOCATING."); EventLogTags.writeDeviceIdle(mState, reason); EventLogTags.writeDeviceIdle(mState, reason); Loading Loading @@ -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) { void scheduleAlarmLocked(long delay, boolean idleUntil) { if (DEBUG) Slog.d(TAG, "scheduleAlarmLocked(" + delay + ", " + idleUntil + ")"); if (DEBUG) Slog.d(TAG, "scheduleAlarmLocked(" + delay + ", " + idleUntil + ")"); if (mMotionSensor == null) { if (mMotionSensor == null) { Loading Loading @@ -2194,6 +2221,13 @@ public class DeviceIdleController extends SystemService mNextLightAlarmTime, "DeviceIdleController.light", mLightAlarmListener, mHandler); 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, private static int[] buildAppIdArray(ArrayMap<String, Integer> systemApps, ArrayMap<String, Integer> userApps, SparseBooleanArray outAppIds) { ArrayMap<String, Integer> userApps, SparseBooleanArray outAppIds) { outAppIds.clear(); outAppIds.clear(); Loading