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

Commit cebf2e6c authored by Chris Kuiper's avatar Chris Kuiper
Browse files

sensorservice: ProximitySensor needs to report correct sensor state.

Calls to ProximitySensor::activate() may repeatedly set enabled=true.
The current logic doesn't account for that. In order to correctly
report the current sensor state, simply use
mSensorDevice.isSensorActive() instead.

Bug: 194878856
Test: 1) Reproduced problem and verified mIsProxActive in "dumpsys
         display" contains the correct value and no more 60/90Hz
         flicker.
      2) Adding local debugs, then mixing making phone calls with
         additional "sensor_test sample -s8 -n5" commands to create
         several Prox clients, and verifying logged flags and
         reference counts.
Change-Id: I2342844ff4e6301a6b9ac8a33dc3e6047fca83ad
parent c63880a5
Loading
Loading
Loading
Loading
+6 −4
Original line number Original line Diff line number Diff line
@@ -92,14 +92,16 @@ ProximitySensor::ProximitySensor(const sensor_t& sensor, SensorService& service)
}
}


status_t ProximitySensor::activate(void* ident, bool enabled) {
status_t ProximitySensor::activate(void* ident, bool enabled) {
    bool wasActive = mActive;
    bool lastState = mSensorDevice.isSensorActive(mSensor.getHandle());

    status_t status = HardwareSensor::activate(ident, enabled);
    status_t status = HardwareSensor::activate(ident, enabled);
    if (status != NO_ERROR) {
    if (status != NO_ERROR) {
        return status;
        return status;
    }
    }
    mActive = enabled;

    if (wasActive != enabled) {
    bool currentState = mSensorDevice.isSensorActive(mSensor.getHandle());
        mSensorService.onProximityActiveLocked(enabled);
    if (currentState != lastState) {
        mSensorService.onProximityActiveLocked(currentState);
    }
    }
    return NO_ERROR;
    return NO_ERROR;
}
}
+0 −1
Original line number Original line Diff line number Diff line
@@ -119,7 +119,6 @@ public:
    void didEnableAllSensors() override;
    void didEnableAllSensors() override;
private:
private:
    SensorService& mSensorService;
    SensorService& mSensorService;
    bool mActive;
};
};


// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------