Loading services/sensorservice/SensorDirectConnection.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading services/sensorservice/SensorDirectConnection.h +6 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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; Loading @@ -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; }; Loading services/sensorservice/SensorService.cpp +9 −2 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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) { Loading Loading @@ -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 Loading Loading @@ -676,7 +683,7 @@ void SensorService::enableAllSensorsLocked(ConnectionSafeAutolock* connLock) { connection->updateSensorSubscriptions(); } for (const sp<SensorDirectConnection>& connection : connLock->getDirectConnections()) { connection->recoverAll(); connection->updateSensorSubscriptions(); } } Loading Loading
services/sensorservice/SensorDirectConnection.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading
services/sensorservice/SensorDirectConnection.h +6 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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; Loading @@ -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; }; Loading
services/sensorservice/SensorService.cpp +9 −2 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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) { Loading Loading @@ -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 Loading Loading @@ -676,7 +683,7 @@ void SensorService::enableAllSensorsLocked(ConnectionSafeAutolock* connLock) { connection->updateSensorSubscriptions(); } for (const sp<SensorDirectConnection>& connection : connLock->getDirectConnections()) { connection->recoverAll(); connection->updateSensorSubscriptions(); } } Loading