Loading services/core/java/com/android/server/AnyMotionDetector.java +46 −15 Original line number Original line Diff line number Diff line Loading @@ -97,6 +97,15 @@ public class AnyMotionDetector { /** True if an orientation measurement is in progress. */ /** True if an orientation measurement is in progress. */ private boolean mMeasurementInProgress; private boolean mMeasurementInProgress; /** True if sendMessageDelayed() for the mMeasurementTimeout callback has been scheduled */ private boolean mMeasurementTimeoutIsActive; /** True if sendMessageDelayed() for the mWakelockTimeout callback has been scheduled */ private boolean mWakelockTimeoutIsActive; /** True if sendMessageDelayed() for the mSensorRestart callback has been scheduled */ private boolean mSensorRestartIsActive; /** The most recent gravity vector. */ /** The most recent gravity vector. */ private Vector3 mCurrentGravityVector = null; private Vector3 mCurrentGravityVector = null; Loading @@ -118,6 +127,9 @@ public class AnyMotionDetector { mSensorManager = sm; mSensorManager = sm; mAccelSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mAccelSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mMeasurementInProgress = false; mMeasurementInProgress = false; mMeasurementTimeoutIsActive = false; mWakelockTimeoutIsActive = false; mSensorRestartIsActive = false; mState = STATE_INACTIVE; mState = STATE_INACTIVE; mCallback = callback; mCallback = callback; mThresholdAngle = thresholdAngle; mThresholdAngle = thresholdAngle; Loading Loading @@ -146,6 +158,7 @@ public class AnyMotionDetector { mWakeLock.acquire(); mWakeLock.acquire(); Message wakelockTimeoutMsg = Message.obtain(mHandler, mWakelockTimeout); Message wakelockTimeoutMsg = Message.obtain(mHandler, mWakelockTimeout); mHandler.sendMessageDelayed(wakelockTimeoutMsg, WAKELOCK_TIMEOUT_MILLIS); mHandler.sendMessageDelayed(wakelockTimeoutMsg, WAKELOCK_TIMEOUT_MILLIS); mWakelockTimeoutIsActive = true; startOrientationMeasurementLocked(); startOrientationMeasurementLocked(); } } } } Loading @@ -157,17 +170,20 @@ public class AnyMotionDetector { mState = STATE_INACTIVE; mState = STATE_INACTIVE; if (DEBUG) Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE."); if (DEBUG) Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE."); } } mHandler.removeCallbacks(mMeasurementTimeout); mHandler.removeCallbacks(mSensorRestart); mMeasurementTimeoutIsActive = false; mSensorRestartIsActive = false; if (mMeasurementInProgress) { if (mMeasurementInProgress) { mMeasurementInProgress = false; mMeasurementInProgress = false; mSensorManager.unregisterListener(mListener); mSensorManager.unregisterListener(mListener); } } mHandler.removeCallbacks(mMeasurementTimeout); mHandler.removeCallbacks(mSensorRestart); mCurrentGravityVector = null; mCurrentGravityVector = null; mPreviousGravityVector = null; mPreviousGravityVector = null; if (mWakeLock.isHeld()) { if (mWakeLock.isHeld()) { mWakeLock.release(); mHandler.removeCallbacks(mWakelockTimeout); mHandler.removeCallbacks(mWakelockTimeout); mWakelockTimeoutIsActive = false; mWakeLock.release(); } } } } } } Loading @@ -183,6 +199,7 @@ public class AnyMotionDetector { } } Message measurementTimeoutMsg = Message.obtain(mHandler, mMeasurementTimeout); Message measurementTimeoutMsg = Message.obtain(mHandler, mMeasurementTimeout); mHandler.sendMessageDelayed(measurementTimeoutMsg, ACCELEROMETER_DATA_TIMEOUT_MILLIS); mHandler.sendMessageDelayed(measurementTimeoutMsg, ACCELEROMETER_DATA_TIMEOUT_MILLIS); mMeasurementTimeoutIsActive = true; } } } } Loading @@ -191,8 +208,9 @@ public class AnyMotionDetector { mMeasurementInProgress); mMeasurementInProgress); int status = RESULT_UNKNOWN; int status = RESULT_UNKNOWN; if (mMeasurementInProgress) { if (mMeasurementInProgress) { mSensorManager.unregisterListener(mListener); mHandler.removeCallbacks(mMeasurementTimeout); mHandler.removeCallbacks(mMeasurementTimeout); mMeasurementTimeoutIsActive = false; mSensorManager.unregisterListener(mListener); mMeasurementInProgress = false; mMeasurementInProgress = false; mPreviousGravityVector = mCurrentGravityVector; mPreviousGravityVector = mCurrentGravityVector; mCurrentGravityVector = mRunningStats.getRunningAverage(); mCurrentGravityVector = mRunningStats.getRunningAverage(); Loading @@ -213,8 +231,9 @@ public class AnyMotionDetector { if (DEBUG) Slog.d(TAG, "getStationaryStatus() returned " + status); if (DEBUG) Slog.d(TAG, "getStationaryStatus() returned " + status); if (status != RESULT_UNKNOWN) { if (status != RESULT_UNKNOWN) { if (mWakeLock.isHeld()) { if (mWakeLock.isHeld()) { mWakeLock.release(); mHandler.removeCallbacks(mWakelockTimeout); mHandler.removeCallbacks(mWakelockTimeout); mWakelockTimeoutIsActive = false; mWakeLock.release(); } } if (DEBUG) { if (DEBUG) { Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE. status = " + status); Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE. status = " + status); Loading @@ -230,6 +249,7 @@ public class AnyMotionDetector { " milliseconds."); " milliseconds."); Message msg = Message.obtain(mHandler, mSensorRestart); Message msg = Message.obtain(mHandler, mSensorRestart); mHandler.sendMessageDelayed(msg, ORIENTATION_MEASUREMENT_INTERVAL_MILLIS); mHandler.sendMessageDelayed(msg, ORIENTATION_MEASUREMENT_INTERVAL_MILLIS); mSensorRestartIsActive = true; } } } } return status; return status; Loading Loading @@ -283,6 +303,7 @@ public class AnyMotionDetector { } } if (status != RESULT_UNKNOWN) { if (status != RESULT_UNKNOWN) { mHandler.removeCallbacks(mWakelockTimeout); mHandler.removeCallbacks(mWakelockTimeout); mWakelockTimeoutIsActive = false; mCallback.onAnyMotionResult(status); mCallback.onAnyMotionResult(status); } } } } Loading @@ -296,9 +317,12 @@ public class AnyMotionDetector { @Override @Override public void run() { public void run() { synchronized (mLock) { synchronized (mLock) { if (mSensorRestartIsActive == true) { mSensorRestartIsActive = false; startOrientationMeasurementLocked(); startOrientationMeasurementLocked(); } } } } } }; }; private final Runnable mMeasurementTimeout = new Runnable() { private final Runnable mMeasurementTimeout = new Runnable() { Loading @@ -306,25 +330,32 @@ public class AnyMotionDetector { public void run() { public void run() { int status = RESULT_UNKNOWN; int status = RESULT_UNKNOWN; synchronized (mLock) { synchronized (mLock) { if (mMeasurementTimeoutIsActive == true) { mMeasurementTimeoutIsActive = false; if (DEBUG) Slog.i(TAG, "mMeasurementTimeout. Failed to collect sufficient accel " + if (DEBUG) Slog.i(TAG, "mMeasurementTimeout. Failed to collect sufficient accel " + "data within " + ACCELEROMETER_DATA_TIMEOUT_MILLIS + " ms. Stopping " + "data within " + ACCELEROMETER_DATA_TIMEOUT_MILLIS + " ms. Stopping " + "orientation measurement."); "orientation measurement."); status = stopOrientationMeasurementLocked(); status = stopOrientationMeasurementLocked(); } if (status != RESULT_UNKNOWN) { if (status != RESULT_UNKNOWN) { mHandler.removeCallbacks(mWakelockTimeout); mHandler.removeCallbacks(mWakelockTimeout); mWakelockTimeoutIsActive = false; mCallback.onAnyMotionResult(status); mCallback.onAnyMotionResult(status); } } } } } } }; }; private final Runnable mWakelockTimeout = new Runnable() { private final Runnable mWakelockTimeout = new Runnable() { @Override @Override public void run() { public void run() { synchronized (mLock) { synchronized (mLock) { if (mWakelockTimeoutIsActive == true) { mWakelockTimeoutIsActive = false; stop(); stop(); } } } } } }; }; /** /** Loading Loading
services/core/java/com/android/server/AnyMotionDetector.java +46 −15 Original line number Original line Diff line number Diff line Loading @@ -97,6 +97,15 @@ public class AnyMotionDetector { /** True if an orientation measurement is in progress. */ /** True if an orientation measurement is in progress. */ private boolean mMeasurementInProgress; private boolean mMeasurementInProgress; /** True if sendMessageDelayed() for the mMeasurementTimeout callback has been scheduled */ private boolean mMeasurementTimeoutIsActive; /** True if sendMessageDelayed() for the mWakelockTimeout callback has been scheduled */ private boolean mWakelockTimeoutIsActive; /** True if sendMessageDelayed() for the mSensorRestart callback has been scheduled */ private boolean mSensorRestartIsActive; /** The most recent gravity vector. */ /** The most recent gravity vector. */ private Vector3 mCurrentGravityVector = null; private Vector3 mCurrentGravityVector = null; Loading @@ -118,6 +127,9 @@ public class AnyMotionDetector { mSensorManager = sm; mSensorManager = sm; mAccelSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mAccelSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mMeasurementInProgress = false; mMeasurementInProgress = false; mMeasurementTimeoutIsActive = false; mWakelockTimeoutIsActive = false; mSensorRestartIsActive = false; mState = STATE_INACTIVE; mState = STATE_INACTIVE; mCallback = callback; mCallback = callback; mThresholdAngle = thresholdAngle; mThresholdAngle = thresholdAngle; Loading Loading @@ -146,6 +158,7 @@ public class AnyMotionDetector { mWakeLock.acquire(); mWakeLock.acquire(); Message wakelockTimeoutMsg = Message.obtain(mHandler, mWakelockTimeout); Message wakelockTimeoutMsg = Message.obtain(mHandler, mWakelockTimeout); mHandler.sendMessageDelayed(wakelockTimeoutMsg, WAKELOCK_TIMEOUT_MILLIS); mHandler.sendMessageDelayed(wakelockTimeoutMsg, WAKELOCK_TIMEOUT_MILLIS); mWakelockTimeoutIsActive = true; startOrientationMeasurementLocked(); startOrientationMeasurementLocked(); } } } } Loading @@ -157,17 +170,20 @@ public class AnyMotionDetector { mState = STATE_INACTIVE; mState = STATE_INACTIVE; if (DEBUG) Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE."); if (DEBUG) Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE."); } } mHandler.removeCallbacks(mMeasurementTimeout); mHandler.removeCallbacks(mSensorRestart); mMeasurementTimeoutIsActive = false; mSensorRestartIsActive = false; if (mMeasurementInProgress) { if (mMeasurementInProgress) { mMeasurementInProgress = false; mMeasurementInProgress = false; mSensorManager.unregisterListener(mListener); mSensorManager.unregisterListener(mListener); } } mHandler.removeCallbacks(mMeasurementTimeout); mHandler.removeCallbacks(mSensorRestart); mCurrentGravityVector = null; mCurrentGravityVector = null; mPreviousGravityVector = null; mPreviousGravityVector = null; if (mWakeLock.isHeld()) { if (mWakeLock.isHeld()) { mWakeLock.release(); mHandler.removeCallbacks(mWakelockTimeout); mHandler.removeCallbacks(mWakelockTimeout); mWakelockTimeoutIsActive = false; mWakeLock.release(); } } } } } } Loading @@ -183,6 +199,7 @@ public class AnyMotionDetector { } } Message measurementTimeoutMsg = Message.obtain(mHandler, mMeasurementTimeout); Message measurementTimeoutMsg = Message.obtain(mHandler, mMeasurementTimeout); mHandler.sendMessageDelayed(measurementTimeoutMsg, ACCELEROMETER_DATA_TIMEOUT_MILLIS); mHandler.sendMessageDelayed(measurementTimeoutMsg, ACCELEROMETER_DATA_TIMEOUT_MILLIS); mMeasurementTimeoutIsActive = true; } } } } Loading @@ -191,8 +208,9 @@ public class AnyMotionDetector { mMeasurementInProgress); mMeasurementInProgress); int status = RESULT_UNKNOWN; int status = RESULT_UNKNOWN; if (mMeasurementInProgress) { if (mMeasurementInProgress) { mSensorManager.unregisterListener(mListener); mHandler.removeCallbacks(mMeasurementTimeout); mHandler.removeCallbacks(mMeasurementTimeout); mMeasurementTimeoutIsActive = false; mSensorManager.unregisterListener(mListener); mMeasurementInProgress = false; mMeasurementInProgress = false; mPreviousGravityVector = mCurrentGravityVector; mPreviousGravityVector = mCurrentGravityVector; mCurrentGravityVector = mRunningStats.getRunningAverage(); mCurrentGravityVector = mRunningStats.getRunningAverage(); Loading @@ -213,8 +231,9 @@ public class AnyMotionDetector { if (DEBUG) Slog.d(TAG, "getStationaryStatus() returned " + status); if (DEBUG) Slog.d(TAG, "getStationaryStatus() returned " + status); if (status != RESULT_UNKNOWN) { if (status != RESULT_UNKNOWN) { if (mWakeLock.isHeld()) { if (mWakeLock.isHeld()) { mWakeLock.release(); mHandler.removeCallbacks(mWakelockTimeout); mHandler.removeCallbacks(mWakelockTimeout); mWakelockTimeoutIsActive = false; mWakeLock.release(); } } if (DEBUG) { if (DEBUG) { Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE. status = " + status); Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE. status = " + status); Loading @@ -230,6 +249,7 @@ public class AnyMotionDetector { " milliseconds."); " milliseconds."); Message msg = Message.obtain(mHandler, mSensorRestart); Message msg = Message.obtain(mHandler, mSensorRestart); mHandler.sendMessageDelayed(msg, ORIENTATION_MEASUREMENT_INTERVAL_MILLIS); mHandler.sendMessageDelayed(msg, ORIENTATION_MEASUREMENT_INTERVAL_MILLIS); mSensorRestartIsActive = true; } } } } return status; return status; Loading Loading @@ -283,6 +303,7 @@ public class AnyMotionDetector { } } if (status != RESULT_UNKNOWN) { if (status != RESULT_UNKNOWN) { mHandler.removeCallbacks(mWakelockTimeout); mHandler.removeCallbacks(mWakelockTimeout); mWakelockTimeoutIsActive = false; mCallback.onAnyMotionResult(status); mCallback.onAnyMotionResult(status); } } } } Loading @@ -296,9 +317,12 @@ public class AnyMotionDetector { @Override @Override public void run() { public void run() { synchronized (mLock) { synchronized (mLock) { if (mSensorRestartIsActive == true) { mSensorRestartIsActive = false; startOrientationMeasurementLocked(); startOrientationMeasurementLocked(); } } } } } }; }; private final Runnable mMeasurementTimeout = new Runnable() { private final Runnable mMeasurementTimeout = new Runnable() { Loading @@ -306,25 +330,32 @@ public class AnyMotionDetector { public void run() { public void run() { int status = RESULT_UNKNOWN; int status = RESULT_UNKNOWN; synchronized (mLock) { synchronized (mLock) { if (mMeasurementTimeoutIsActive == true) { mMeasurementTimeoutIsActive = false; if (DEBUG) Slog.i(TAG, "mMeasurementTimeout. Failed to collect sufficient accel " + if (DEBUG) Slog.i(TAG, "mMeasurementTimeout. Failed to collect sufficient accel " + "data within " + ACCELEROMETER_DATA_TIMEOUT_MILLIS + " ms. Stopping " + "data within " + ACCELEROMETER_DATA_TIMEOUT_MILLIS + " ms. Stopping " + "orientation measurement."); "orientation measurement."); status = stopOrientationMeasurementLocked(); status = stopOrientationMeasurementLocked(); } if (status != RESULT_UNKNOWN) { if (status != RESULT_UNKNOWN) { mHandler.removeCallbacks(mWakelockTimeout); mHandler.removeCallbacks(mWakelockTimeout); mWakelockTimeoutIsActive = false; mCallback.onAnyMotionResult(status); mCallback.onAnyMotionResult(status); } } } } } } }; }; private final Runnable mWakelockTimeout = new Runnable() { private final Runnable mWakelockTimeout = new Runnable() { @Override @Override public void run() { public void run() { synchronized (mLock) { synchronized (mLock) { if (mWakelockTimeoutIsActive == true) { mWakelockTimeoutIsActive = false; stop(); stop(); } } } } } }; }; /** /** Loading