diff options
| author | 2023-12-19 22:58:16 +0000 | |
|---|---|---|
| committer | 2024-01-08 21:27:15 +0000 | |
| commit | c971c41db9ad83f6fa096c461a158543bbbe119e (patch) | |
| tree | 2052e6076df307f77c9a229241b381085cbfa5e6 | |
| parent | f750f66741473fcac13b39c5054ac1d454d70f89 (diff) | |
Implement onDynamicSensorDisconnected
Fixes: 316958439
Test: Connect/Remove a dynamic sensor and see log.
Change-Id: I55fcafcd30d7dbddfab555733077466c7a5f26f3
| -rw-r--r-- | services/sensorservice/Android.bp | 4 | ||||
| -rw-r--r-- | services/sensorservice/SensorDevice.cpp | 23 |
2 files changed, 21 insertions, 6 deletions
diff --git a/services/sensorservice/Android.bp b/services/sensorservice/Android.bp index 0dd4dd6525..019fefaca4 100644 --- a/services/sensorservice/Android.bp +++ b/services/sensorservice/Android.bp @@ -15,7 +15,7 @@ aconfig_declarations { cc_aconfig_library { name: "sensorservice_flags_c_lib", - aconfig_declarations: "dynamic_sensors_flags", + aconfig_declarations: "sensorservice_flags", host_supported: true, } @@ -82,6 +82,7 @@ cc_library { "android.hardware.sensors@2.1", "android.hardware.common-V2-ndk", "android.hardware.common.fmq-V1-ndk", + "server_configurable_flags", ], static_libs: [ @@ -89,6 +90,7 @@ cc_library { "android.hardware.sensors@1.0-convert", "android.hardware.sensors-V1-convert", "android.hardware.sensors-V2-ndk", + "sensorservice_flags_c_lib", ], generated_headers: ["framework-cppstream-protos"], diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp index dd83fdefc3..45fab7e592 100644 --- a/services/sensorservice/SensorDevice.cpp +++ b/services/sensorservice/SensorDevice.cpp @@ -25,6 +25,7 @@ #include <android-base/logging.h> #include <android/util/ProtoOutputStream.h> +#include <com_android_frameworks_sensorservice_flags.h> #include <cutils/atomic.h> #include <frameworks/base/core/proto/android/service/sensor_service.proto.h> #include <hardware/sensors-base.h> @@ -42,6 +43,7 @@ using namespace android::hardware::sensors; using android::util::ProtoOutputStream; +namespace sensorservice_flags = com::android::frameworks::sensorservice::flags; namespace android { // --------------------------------------------------------------------------- @@ -416,8 +418,15 @@ void SensorDevice::onDynamicSensorsConnected(const std::vector<sensor_t>& dynami } void SensorDevice::onDynamicSensorsDisconnected( - const std::vector<int32_t>& /* dynamicSensorHandlesRemoved */) { - // TODO: Currently dynamic sensors do not seem to be removed + const std::vector<int32_t>& dynamicSensorHandlesRemoved) { + if (sensorservice_flags::sensor_device_on_dynamic_sensor_disconnected()) { + for (auto handle : dynamicSensorHandlesRemoved) { + auto it = mConnectedDynamicSensors.find(handle); + if (it != mConnectedDynamicSensors.end()) { + mConnectedDynamicSensors.erase(it); + } + } + } } void SensorDevice::writeWakeLockHandled(uint32_t count) { @@ -483,12 +492,16 @@ status_t SensorDevice::activateLocked(void* ident, int handle, int enabled) { } else { ALOGD_IF(DEBUG_CONNECTIONS, "disable index=%zd", info.batchParams.indexOfKey(ident)); - // If a connected dynamic sensor is deactivated, remove it from the - // dictionary. + // TODO(b/316958439): Remove these line after + // sensor_device_on_dynamic_sensor_disconnected is ramped up. Bounded + // here since this function is coupled with + // dynamic_sensors_hal_disconnect_dynamic_sensor flag. If a connected + // dynamic sensor is deactivated, remove it from the dictionary. auto it = mConnectedDynamicSensors.find(handle); if (it != mConnectedDynamicSensors.end()) { - mConnectedDynamicSensors.erase(it); + mConnectedDynamicSensors.erase(it); } + // End of TODO(b/316958439) if (info.removeBatchParamsForIdent(ident) >= 0) { if (info.numActiveClients() == 0) { |