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

Commit 86003edd authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Extend background app behavior for direct channel" into rvc-dev am:...

Merge "Extend background app behavior for direct channel" into rvc-dev am: 584ab0d9 am: 984ad327 am: bd5c5c7c am: 12e26657

Change-Id: Ie06e3a565d4f610ae2d775608529320acaff0b91
parents 74e44fd4 12e26657
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -93,6 +93,23 @@ sp<BitTube> SensorService::SensorDirectConnection::getSensorChannel() const {
    return nullptr;
}

void SensorService::SensorDirectConnection::updateSensorSubscriptions() {
    if (!hasSensorAccess()) {
        stopAll(true /* backupRecord */);
    } else {
        recoverAll();
    }
}

void SensorService::SensorDirectConnection::setSensorAccess(bool hasAccess) {
    mHasSensorAccess = hasAccess;
    updateSensorSubscriptions();
}

bool SensorService::SensorDirectConnection::hasSensorAccess() const {
    return mHasSensorAccess && !mService->mSensorPrivacyPolicy->isSensorPrivacyEnabled();
}

status_t SensorService::SensorDirectConnection::enableDisable(
        int handle, bool enabled, nsecs_t samplingPeriodNs, nsecs_t maxBatchReportLatencyNs,
        int reservedFlags) {
+6 −0
Original line number Diff line number Diff line
@@ -54,6 +54,9 @@ public:
    // called by SensorService when return to NORMAL mode.
    void recoverAll();

    void updateSensorSubscriptions();

    void setSensorAccess(bool hasAccess);
protected:
    virtual ~SensorDirectConnection();
    // ISensorEventConnection functions
@@ -66,6 +69,7 @@ protected:
    virtual int32_t configureChannel(int handle, int rateLevel);
    virtual void destroy();
private:
    bool hasSensorAccess() const;
    const sp<SensorService> mService;
    const uid_t mUid;
    const sensors_direct_mem_t mMem;
@@ -76,6 +80,8 @@ private:
    std::unordered_map<int, int> mActivated;
    std::unordered_map<int, int> mActivatedBackup;

    std::atomic_bool mHasSensorAccess = true;

    mutable Mutex mDestroyLock;
    bool mDestroyed;
};
+9 −2
Original line number Diff line number Diff line
@@ -302,6 +302,7 @@ void SensorService::onFirstRef() {
void SensorService::setSensorAccess(uid_t uid, bool hasAccess) {
    ConnectionSafeAutolock connLock = mConnectionHolder.lock(mLock);
    const auto& connections = connLock.getActiveConnections();
    const auto& directConnections = connLock.getDirectConnections();

    mLock.unlock();
    for (const sp<SensorEventConnection>& conn : connections) {
@@ -309,6 +310,12 @@ void SensorService::setSensorAccess(uid_t uid, bool hasAccess) {
            conn->setSensorAccess(hasAccess);
        }
    }

    for (const sp<SensorDirectConnection>& conn : directConnections) {
        if (conn->getUid() == uid) {
            conn->setSensorAccess(hasAccess);
        }
    }
}

const Sensor& SensorService::registerSensor(SensorInterface* s, bool isDebug, bool isVirtual) {
@@ -645,7 +652,7 @@ void SensorService::disableAllSensorsLocked(ConnectionSafeAutolock* connLock) {
        connection->updateSensorSubscriptions();
    }
    for (const sp<SensorDirectConnection>& connection : connLock->getDirectConnections()) {
        connection->stopAll(true /* backupRecord */);
        connection->updateSensorSubscriptions();
    }
    dev.disableAllSensors();
    // Clear all pending flush connections for all active sensors. If one of the active
@@ -676,7 +683,7 @@ void SensorService::enableAllSensorsLocked(ConnectionSafeAutolock* connLock) {
        connection->updateSensorSubscriptions();
    }
    for (const sp<SensorDirectConnection>& connection : connLock->getDirectConnections()) {
        connection->recoverAll();
        connection->updateSensorSubscriptions();
    }
}