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

Commit 6eb75be7 authored by Arthur Ishiguro's avatar Arthur Ishiguro
Browse files

Fail on flush if no sensors are found

According to the SensorManager API, flush() is intended to return
false when no sensor is registered with the listener. Modify the
implementation to be consistent with the API contract, since no
flush command was successfully issued in this case.

Bug: 74395023
Test: Compile
Change-Id: I7e671c870aa684be54b7a5163052aac5258c0c86
parent 8a7ec57d
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -1748,17 +1748,22 @@ status_t SensorService::flushSensor(const sp<SensorEventConnection>& connection,
    const int halVersion = dev.getHalDeviceVersion();
    status_t err(NO_ERROR);
    Mutex::Autolock _l(mLock);

    size_t numSensors = 0;
    // Loop through all sensors for this connection and call flush on each of them.
    for (int handle : connection->getActiveSensorHandles()) {
        sp<SensorInterface> sensor = getSensorInterfaceFromHandle(handle);
        if (sensor == nullptr) {
            continue;
        }
        numSensors++;

        if (sensor->getSensor().getReportingMode() == AREPORTING_MODE_ONE_SHOT) {
            ALOGE("flush called on a one-shot sensor");
            err = INVALID_OPERATION;
            continue;
        }

        if (halVersion <= SENSORS_DEVICE_API_VERSION_1_0 || isVirtualSensor(handle)) {
            // For older devices just increment pending flush count which will send a trivial
            // flush complete event.
@@ -1776,7 +1781,8 @@ status_t SensorService::flushSensor(const sp<SensorEventConnection>& connection,
            err = (err_flush != NO_ERROR) ? err_flush : err;
        }
    }
    return err;

    return (numSensors == 0) ? INVALID_OPERATION : err;
}

bool SensorService::canAccessSensor(const Sensor& sensor, const char* operation,