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

Commit c971c41d authored by Rocky Fang's avatar Rocky Fang
Browse files

Implement onDynamicSensorDisconnected

Fixes: 316958439
Test: Connect/Remove a dynamic sensor and see log.
Change-Id: I55fcafcd30d7dbddfab555733077466c7a5f26f3
parent f750f667
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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"],
+18 −5
Original line number Diff line number Diff line
@@ -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);
        }
        // End of TODO(b/316958439)

        if (info.removeBatchParamsForIdent(ident) >= 0) {
            if (info.numActiveClients() == 0) {