Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7430c249 authored by Kevin Gabayan's avatar Kevin Gabayan Committed by android-build-merger
Browse files

Merge "AnyMotionDetector holds wakelock until conclusive. Bug: 27821976" into nyc-dev am: 35a306cc

am: ed57efdf

* commit 'ed57efdf':
  AnyMotionDetector holds wakelock until conclusive. Bug: 27821976

Change-Id: I24722e165b7bf3a94e8d9e6baa190eee931ea422
parents 1c0aff78 ed57efdf
Loading
Loading
Loading
Loading
+48 −39
Original line number Diff line number Diff line
@@ -108,6 +108,7 @@ public class AnyMotionDetector {
    public AnyMotionDetector(PowerManager pm, Handler handler, SensorManager sm,
            DeviceIdleCallback callback, float thresholdAngle) {
        if (DEBUG) Slog.d(TAG, "AnyMotionDetector instantiated.");
        synchronized (mLock) {
            mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
            mWakeLock.setReferenceCounted(false);
            mHandler = handler;
@@ -122,23 +123,32 @@ public class AnyMotionDetector {
                    ((double)ORIENTATION_MEASUREMENT_DURATION_MILLIS / SAMPLING_INTERVAL_MILLIS));
            if (DEBUG) Slog.d(TAG, "mNumSufficientSamples = " + mNumSufficientSamples);
        }
    }

    /*
     * Acquire accel data until we determine AnyMotion status.
     */
    public void checkForAnyMotion() {
      if (DEBUG) Slog.d(TAG, "checkForAnyMotion(). mState = " + mState);
        if (DEBUG) {
            Slog.d(TAG, "checkForAnyMotion(). mState = " + mState);
        }
        if (mState != STATE_ACTIVE) {
            synchronized (mLock) {
                mState = STATE_ACTIVE;
            if (DEBUG) Slog.d(TAG, "Moved from STATE_INACTIVE to STATE_ACTIVE.");
                if (DEBUG) {
                    Slog.d(TAG, "Moved from STATE_INACTIVE to STATE_ACTIVE.");
                }
                mCurrentGravityVector = null;
                mPreviousGravityVector = null;
            startOrientationMeasurement();
                mWakeLock.acquire();
                startOrientationMeasurementLocked();
            }
        }
    }

    public void stop() {
        if (mState == STATE_ACTIVE) {
            synchronized (mLock) {
                mState = STATE_INACTIVE;
                if (DEBUG) Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE.");
                if (mMeasurementInProgress) {
@@ -147,24 +157,22 @@ public class AnyMotionDetector {
                }
                mHandler.removeCallbacks(mMeasurementTimeout);
                mHandler.removeCallbacks(mSensorRestart);
            mWakeLock.release();
                mCurrentGravityVector = null;
                mPreviousGravityVector = null;
                mWakeLock.release();
            }
        }
    }

    private void startOrientationMeasurement() {
        if (DEBUG) Slog.d(TAG, "startOrientationMeasurement: mMeasurementInProgress=" +
    private void startOrientationMeasurementLocked() {
        if (DEBUG) Slog.d(TAG, "startOrientationMeasurementLocked: mMeasurementInProgress=" +
            mMeasurementInProgress + ", (mAccelSensor != null)=" + (mAccelSensor != null));

        if (!mMeasurementInProgress && mAccelSensor != null) {
            if (mSensorManager.registerListener(mListener, mAccelSensor,
                    SAMPLING_INTERVAL_MILLIS * 1000)) {
                mWakeLock.acquire();
                mMeasurementInProgress = true;
                mRunningStats.reset();
            }

            Message msg = Message.obtain(mHandler, mMeasurementTimeout);
            msg.setAsynchronous(true);
            mHandler.sendMessageDelayed(msg, ACCELEROMETER_DATA_TIMEOUT_MILLIS);
@@ -178,7 +186,6 @@ public class AnyMotionDetector {
        if (mMeasurementInProgress) {
            mSensorManager.unregisterListener(mListener);
            mHandler.removeCallbacks(mMeasurementTimeout);
            mWakeLock.release();
            long detectionEndTime = SystemClock.elapsedRealtime();
            mMeasurementInProgress = false;
            mPreviousGravityVector = mCurrentGravityVector;
@@ -196,8 +203,10 @@ public class AnyMotionDetector {
            status = getStationaryStatus();
            if (DEBUG) Slog.d(TAG, "getStationaryStatus() returned " + status);
            if (status != RESULT_UNKNOWN) {
                if (DEBUG) Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE. status = " +
                        status);
                mWakeLock.release();
                if (DEBUG) {
                    Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE. status = " + status);
                }
                mState = STATE_INACTIVE;
            } else {
                /*
@@ -275,7 +284,7 @@ public class AnyMotionDetector {
        @Override
        public void run() {
            synchronized (mLock) {
                startOrientationMeasurement();
                startOrientationMeasurementLocked();
            }
        }
    };