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

Commit 23537575 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

Keep secondary prox registered when covered.

We were pinging the secondary proximity sensor every 5 seconds to see
if the "near" state had changed. However, after some amount of time,
this 5 second delay would be extended as the cpu would stop waking up,
presumably for power saving reasons.

Instead, we now keep the secondary proxmity sensor registered when
the phone is covered. This means that the phone will immediately wake
up when uncovered, as expected.

The ThresholdSensorImpl now reports a change from below to above when
the latch value is equaled, rather surpassed. This ensures that some,
coarse grained sensors will still trigger when a small change in their
value is detected. Prior to this, a larger change was needed, meaning
that uncovering a phone in a dark room could leave the screen off.

Fixes: 157630609
Test: atest SystemUITests && manual
Change-Id: I4b4e936b19045d38445bf6ab92df2bb6e3d90a28
parent 13f35c60
Loading
Loading
Loading
Loading
+8 −7
Original line number Original line Diff line number Diff line
@@ -83,20 +83,21 @@ public class ProximitySensor implements ThresholdSensor {
    private ThresholdSensor.Listener mSecondaryEventListener = new ThresholdSensor.Listener() {
    private ThresholdSensor.Listener mSecondaryEventListener = new ThresholdSensor.Listener() {
        @Override
        @Override
        public void onThresholdCrossed(ThresholdSensorEvent event) {
        public void onThresholdCrossed(ThresholdSensorEvent event) {
            // This sensor should only be used briefly. Turn it off as soon as we get a reading.
            mSecondaryThresholdSensor.pause();

            // Only check the secondary as long as the primary thinks we're near.
            // Only check the secondary as long as the primary thinks we're near.
            if (!mLastPrimaryEvent.getBelow()) {
            if (!mLastPrimaryEvent.getBelow()) {
                mSecondaryThresholdSensor.pause();
                mCancelSecondaryRunnable = null;
                mCancelSecondaryRunnable = null;
                return;
                return;
            }
            }
            logDebug("Secondary sensor event: " + event.getBelow() + ".");
            logDebug("Secondary sensor event: " + event.getBelow() + ".");


            // This sensor should only be used briefly when uncovered.
            if (!event.getBelow()) {
                mSecondaryThresholdSensor.pause();
                // Check this sensor again in a moment.
                // Check this sensor again in a moment.
                mCancelSecondaryRunnable = mDelayableExecutor.executeDelayed(
                mCancelSecondaryRunnable = mDelayableExecutor.executeDelayed(
                        mSecondaryThresholdSensor::resume, SECONDARY_PING_INTERVAL_MS);
                        mSecondaryThresholdSensor::resume, SECONDARY_PING_INTERVAL_MS);

            }
            onSensorEvent(event);
            onSensorEvent(event);
        }
        }
    };
    };
+1 −1
Original line number Original line Diff line number Diff line
@@ -51,7 +51,7 @@ class ThresholdSensorImpl implements ThresholdSensor {
        @Override
        @Override
        public void onSensorChanged(SensorEvent event) {
        public void onSensorChanged(SensorEvent event) {
            boolean below = event.values[0] < mThreshold;
            boolean below = event.values[0] < mThreshold;
            boolean above = event.values[0] > mThresholdLatch;
            boolean above = event.values[0] >= mThresholdLatch;
            logDebug("Sensor value: " + event.values[0]);
            logDebug("Sensor value: " + event.values[0]);
            onSensorEvent(below, above, event.timestamp);
            onSensorEvent(below, above, event.timestamp);
        }
        }
+10 −11
Original line number Original line Diff line number Diff line
@@ -86,10 +86,9 @@ public class ProximitySensorDualTest extends SysuiTestCase {
        // Trigger second sensor.
        // Trigger second sensor.
        mThresholdSensorSecondary.triggerEvent(true, 0);
        mThresholdSensorSecondary.triggerEvent(true, 0);
        assertFalse(mThresholdSensorPrimary.isPaused());
        assertFalse(mThresholdSensorPrimary.isPaused());
        assertTrue(mThresholdSensorSecondary.isPaused());
        assertFalse(mThresholdSensorSecondary.isPaused());
        assertTrue(listener.mLastEvent.getBelow());
        assertTrue(listener.mLastEvent.getBelow());
        assertEquals(1, listener.mCallCount);
        assertEquals(1, listener.mCallCount);
        assertTrue(mThresholdSensorSecondary.isPaused());


        mProximitySensor.unregister(listener);
        mProximitySensor.unregister(listener);
    }
    }
@@ -109,23 +108,23 @@ public class ProximitySensorDualTest extends SysuiTestCase {
        assertNull(listener.mLastEvent);
        assertNull(listener.mLastEvent);
        assertEquals(0, listener.mCallCount);
        assertEquals(0, listener.mCallCount);


        // Trigger second sensor.
        // Trigger second sensor. Second sensor remains registered.
        mThresholdSensorSecondary.triggerEvent(true, 0);
        mThresholdSensorSecondary.triggerEvent(true, 0);
        assertTrue(listener.mLastEvent.getBelow());
        assertTrue(listener.mLastEvent.getBelow());
        assertEquals(1, listener.mCallCount);
        assertEquals(1, listener.mCallCount);
        assertTrue(mThresholdSensorSecondary.isPaused());

        // Advance time. Second sensor should resume.
        mFakeExecutor.advanceClockToNext();
        mFakeExecutor.runNextReady();
        assertFalse(mThresholdSensorSecondary.isPaused());
        assertFalse(mThresholdSensorSecondary.isPaused());


        // Triggering should pause again.
        // Triggering above should pause.
        mThresholdSensorSecondary.triggerEvent(false, 0);
        mThresholdSensorSecondary.triggerEvent(false, 0);
        assertFalse(listener.mLastEvent.getBelow());
        assertFalse(listener.mLastEvent.getBelow());
        assertEquals(2, listener.mCallCount);
        assertEquals(2, listener.mCallCount);
        assertTrue(mThresholdSensorSecondary.isPaused());
        assertTrue(mThresholdSensorSecondary.isPaused());


        // Advance time. Second sensor should resume.
        mFakeExecutor.advanceClockToNext();
        mFakeExecutor.runNextReady();
        assertFalse(mThresholdSensorSecondary.isPaused());

        mProximitySensor.unregister(listener);
        mProximitySensor.unregister(listener);
    }
    }


@@ -143,7 +142,7 @@ public class ProximitySensorDualTest extends SysuiTestCase {
        mThresholdSensorPrimary.triggerEvent(true, 0);
        mThresholdSensorPrimary.triggerEvent(true, 0);
        mThresholdSensorSecondary.triggerEvent(true, 0);
        mThresholdSensorSecondary.triggerEvent(true, 0);
        assertFalse(mThresholdSensorPrimary.isPaused());
        assertFalse(mThresholdSensorPrimary.isPaused());
        assertTrue(mThresholdSensorSecondary.isPaused());
        assertFalse(mThresholdSensorSecondary.isPaused());
        assertTrue(listener.mLastEvent.getBelow());
        assertTrue(listener.mLastEvent.getBelow());
        assertEquals(1, listener.mCallCount);
        assertEquals(1, listener.mCallCount);


@@ -165,7 +164,7 @@ public class ProximitySensorDualTest extends SysuiTestCase {
        mThresholdSensorPrimary.triggerEvent(true, 0);
        mThresholdSensorPrimary.triggerEvent(true, 0);
        mThresholdSensorSecondary.triggerEvent(true, 0);
        mThresholdSensorSecondary.triggerEvent(true, 0);
        assertFalse(mThresholdSensorPrimary.isPaused());
        assertFalse(mThresholdSensorPrimary.isPaused());
        assertTrue(mThresholdSensorSecondary.isPaused());
        assertFalse(mThresholdSensorSecondary.isPaused());
        assertTrue(listener.mLastEvent.getBelow());
        assertTrue(listener.mLastEvent.getBelow());
        assertEquals(1, listener.mCallCount);
        assertEquals(1, listener.mCallCount);


+1 −1
Original line number Original line Diff line number Diff line
@@ -259,7 +259,7 @@ public class ThresholdSensorImplTest extends SysuiTestCase {
        assertTrue(listener.mBelow);
        assertTrue(listener.mBelow);
        assertEquals(1, listener.mCallCount);
        assertEquals(1, listener.mCallCount);


        sensor.sendSensorEvent(highValue + 1);
        sensor.sendSensorEvent(highValue);


        assertFalse(listener.mBelow);
        assertFalse(listener.mBelow);
        assertEquals(2, listener.mCallCount);
        assertEquals(2, listener.mCallCount);